Skip to content
Snippets Groups Projects
Docker.yaml 3.38 KiB
Newer Older
# -*- mode: yaml; coding: utf-8 -*-
# vim: ft=yaml
#
# Define `.build-docker-image` template used by `*-docker-build` jobs
# It build the container image and push it to `${CI_REGISTRY}`
#
# USAGE
# =====
#
# foo-docker-build:
#   extends: .build-docker-image
#   variables:
#     DOCKERFILE: Some-specific.Dockerfile
#     IMAGE_TAG: $CI_COMMIT_REF_SLUG
#
# REQUIREMENTS
# ============
#
# - A `build` stage must be present in your pipeline or it must be
#   overriden by the extending job to feet your need.
# - The `.not-on-stable` rules template
#
# OPTIONAL VARIABLES
# ==================
#
# - `IMAGE_NAME`: defaults to `${CI_JOB_NAME}` with any suffix `-docker-build*` removed
# - `DOCKERFILE`: defaults, in order
#    - to value set by the user
#    - to `Dockerfile.${IMAGE_NAME}` if the file exists
#    - to `Dockerfile` if the file exists
# - `IMAGE_TAG`: defaults to `git-${CI_COMMIT_SHORT_SHA}`
#
# USED CI VARIABLES
# =================
#
# - `CI_REGISTRY`
# - `CI_REGISTRY_USER`
# - `CI_REGISTRY_PASSWORD`
# - `CI_REGISTRY_IMAGE`
#
.build-docker-image:
  stage: build
  extends: .not-on-stable
  image:
    name: gcr.io/kaniko-project/executor:v1.7.0-debug
    entrypoint: [""]
  script:
    - export IMAGE_NAME=${IMAGE_NAME:-${CI_JOB_NAME%-docker-build*}}
    - test -f Dockerfile.${IMAGE_NAME} && export DOCKERFILE=${DOCKERFILE:-Dockerfile.${IMAGE_NAME}} || true
    - test -f Dockerfile && export DOCKERFILE=${DOCKERFILE:-Dockerfile} || true
    - export IMAGE_TAG=${IMAGE_TAG:-git-${CI_COMMIT_SHORT_SHA}}
    - mkdir -p /kaniko/.docker
    - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(echo -n ${CI_REGISTRY_USER}:${CI_REGISTRY_PASSWORD} | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
    - /kaniko/executor --context ${CI_PROJECT_DIR} --dockerfile $CI_PROJECT_DIR/${DOCKERFILE} --destination ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${IMAGE_TAG}

# Define `.tag-docker-image` template used by `*-docker-tag` jobs
# It tag the `${IMAGE_NAME}:${SOURCE_TAG}` with the tag `${IMAGE_TAG}`
#
# USAGE
# =====
#
# foo-docker-tag-devel:
#   extends: .tag-docker-image
#   variables:
#     IMAGE_TAG: 'devel'
#
# REQUIREMENTS
# ============
#
# - A `release` stage must be present in your pipeline or it must be
#   overriden by the extending job to feet your need.
# - The `.not-on-stable` rules template
#
# OPTIONAL VARIABLES
# ==================
#
# - `IMAGE_NAME`: defaults to `${CI_JOB_NAME}` with any suffix `-docker-tag*` removed
# - `SOURCE_TAG`: source image tag to retag, defaults to `git-${CI_COMMIT_SHORT_SHA}`
# - `IMAGE_TAG`: image tag, defaults to `${CI_COMMIT_TAG}` with prefix `RELEASE_PREFIX` removed
# - `RELEASE_PREFIX`: prefix of the `RELEASE`, defaults to `release/`
#
# USED CI VARIABLES
# =================
#
# - `CI_REGISTRY`
# - `CI_REGISTRY_USER`
# - `CI_REGISTRY_PASSWORD`
# - `CI_REGISTRY_IMAGE`
#
.tag-docker-image:
  stage: release
  extends: .on-release-tag
  image:
    name: gcr.io/go-containerregistry/crane:debug
    entrypoint: [""]
  variables:
    GIT_STRATEGY: none
  script:
    - export IMAGE_NAME=${IMAGE_NAME:-${CI_JOB_NAME%-docker-tag*}}
    - export SOURCE_TAG=${SOURCE_TAG:-git-${CI_COMMIT_SHORT_SHA}}
    - export RELEASE_PREFIX=${RELEASE_PREFIX:-release/}
    - export IMAGE_TAG=${IMAGE_TAG:-${CI_COMMIT_TAG#${RELEASE_PREFIX}}}
    - crane auth login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
    - crane tag ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${SOURCE_TAG} ${IMAGE_TAG}