charts/pipelines-library/templates/tasks/ecr-to-docker.yaml (107 lines of code) (raw):
{{ if .Values.pipelines.deployableResources.tasks }}
apiVersion: tekton.dev/v1
kind: Task
metadata:
name: ecr-to-docker
labels:
app.kubernetes.io/based-on: "0.6"
{{- include "edp-tekton.labels" . | nindent 4 }}
annotations:
tekton.dev/pipelines.minVersion: "0.17.0"
tekton.dev/categories: Image Copy
tekton.dev/tags: image-copy
tekton.dev/displayName: "Push ECR images to DockerHUB"
tekton.dev/platforms: "linux/amd64"
spec:
description: >-
This task copies images from ECR to DockerHUB.
It must be used after kaniko-build task.
It is necessary to add a Service Account in a Pipeline for this task to run
since it uses AWS ECR authentication.
params:
- name: ECR_LOGIN
type: string
default: '/workspace/ecr_login_pass'
- name: ECR_USER
type: string
default: 'AWS'
- name: CODEBASE_NAME
type: string
- name: IMAGE_TAG
type: string
- name: DOCKERHUB_HOST
type: string
default: 'index.docker.io'
- name: dockerhub-credentials
type: string
description: secret holding dockerhub login token
default: dockerhub-credentials
- name: edp-config
type: string
description: this configmap holds aws_region parameter
default: edp-config
steps:
- image: {{ include "edp-tekton.registry" . }}/amazon/aws-cli:2.7.35
name: get-ecr-pass
computeResources: {}
env:
- name: ECR_LOGIN
value: "$(params.ECR_LOGIN)"
- name: AWS_REGION
valueFrom:
configMapKeyRef:
name: "$(params.edp-config)"
key: 'aws_region'
script: |
aws ecr get-login-password --region "${AWS_REGION}" > "${ECR_LOGIN}"
ls -l "${ECR_LOGIN}"
- name: copy-image
env:
- name: ECR_LOGIN
value: "$(params.ECR_LOGIN)"
- name: ECR_USER
value: "$(params.ECR_USER)"
- name: CODEBASE_NAME
value: "$(params.CODEBASE_NAME)"
- name: IMAGE_TAG
value: "$(params.IMAGE_TAG)"
- name: DOCKERHUB_HOST
value: "$(params.DOCKERHUB_HOST)"
- name: DOCKERHUB_USERNAME
valueFrom:
secretKeyRef:
name: "$(params.dockerhub-credentials)"
key: 'username'
- name: DOCKERHUB_TOKEN
valueFrom:
secretKeyRef:
name: "$(params.dockerhub-credentials)"
key: 'accesstoken'
- name: DOCKERHUB_ACCOUNT
valueFrom:
secretKeyRef:
name: "$(params.dockerhub-credentials)"
key: 'account'
- name: CONTAINER_REGISTRY_URL
valueFrom:
configMapKeyRef:
name: edp-config
key: container_registry_host
- name: CONTAINER_REGISTRY_SPACE
valueFrom:
configMapKeyRef:
name: edp-config
key: container_registry_space
image: gcr.io/go-containerregistry/crane/debug:v0.11.0
script: |
#!/busybox/sh
DOCKERHUB_IMAGE_TAGGED="${DOCKERHUB_HOST}/${DOCKERHUB_ACCOUNT}/${CODEBASE_NAME}:${IMAGE_TAG}"
echo "${DOCKERHUB_TOKEN}" | crane auth login "${DOCKERHUB_HOST}" -u "${DOCKERHUB_USERNAME}" --password-stdin
if crane manifest "${DOCKERHUB_IMAGE_TAGGED}"; then
echo " [INFO] Image "${DOCKERHUB_IMAGE_TAGGED}" already exists in Docker Hub"
exit 1
else
cat "${ECR_LOGIN}" | crane auth login "${CONTAINER_REGISTRY_URL}" -u "${ECR_USER}" --password-stdin
crane cp "${CONTAINER_REGISTRY_URL}/${CONTAINER_REGISTRY_SPACE}/${CODEBASE_NAME}:${IMAGE_TAG}" "${DOCKERHUB_IMAGE_TAGGED}"
fi
{{- include "resources" . | nindent 6 }}
{{ end }}