Tekton PipelineでDocker imageをビルド、private registryへのアップロードを行う。 Tekton Hubから必要なタスクを追加 $ tkn hub install task git-clone $ tkn hub install task kaniko assume-roleするタスクを追加 今回はECRにアップロードするためのロールにassume-roleで認証する方式を使う apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: assume-role spec: params: - name: AWS_ROLE type: string - name: SESSION_NAME type: string workspaces: - name: awscredentials steps: - name: assume-role image: public.ecr.aws/aws-cli/aws-cli:latest results: - name: aws-access-key-id - name: aws-secret-access-key - name: aws-session-token script: | #!/bin/sh creds=$(aws --output text sts assume-role --role-arn $(params.AWS_ROLE) --role-session-name $(params.SESSION_NAME) | grep CREDENTIALS | cut -f2,4,5) export AWS_ACCESS_KEY_ID=$(echo $creds | tr -s ' ' | cut -d ' ' -f1) export AWS_SECRET_ACCESS_KEY=$(echo $creds | tr -s ' ' | cut -d ' ' -f2) export AWS_SESSION_TOKEN=$(echo $creds | tr -s ' ' | cut -d ' ' -f3) echo ${AWS_ACCESS_KEY_ID} > $(results.aws-access-key-id.path) echo ${AWS_SECRET_ACCESS_KEY} > $(results.aws-secret-access-key.path) echo ${AWS_SESSION_TOKEN} > $(results.aws-session-token.path) pipelineを作成 apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: name: clone-build-push spec: description: | This pipeline clones a git repo, builds a Docker image with Kaniko and pushes it to a registry params: - name: repo-url type: string - name: image-reference type: string - name: dockerfile type: string - name: docker-context type: string workspaces: - name: shared-data - name: docker-credentials tasks: - name: fetch-source taskRef: name: git-clone workspaces: - name: output workspace: shared-data params: - name: url value: $(params.repo-url) - name: assume-role taskRef: name: assume-role - name: build-push runAfter: ["fetch-source"] taskRef: name: kaniko workspaces: - name: source workspace: shared-data - name: dockerconfig workspace: docker-credentials env: - name: AWS_ACCESS_KEY_ID value: $(results.assume-role.aws-access-key-id.log) - name: AWS_SECRET_ACCESS_KEY value: $(results.assume-role.aws-secret-access-key.log) - name: AWS_SESSION_TOKEN value: $(results.assume-role.aws-session-token.log) params: - name: IMAGE value: $(params.image-reference) - name: DOCKERFILE value: $(params.dockerfile) - name: CONTEXT value: $(params.docker-context)