在GitLab Kubernetes Runner中编译Docker容器镜像

最为安全、稳妥的方案。

在GitLab Kubernetes Runner中编译Docker容器镜像
Photo by Isaac Chou on Unsplash

GitLab CI/CD 编译镜像是很常见的操作。不过,如果你使用GitLab Kubernetes Runner的话,问题变得略微复杂。

目前看来,最为稳妥的方案是使用 kaniko 这个方案。这样仅更改 CI/CD 配置文件即可,不需要对集群做危险的改造操作。

以下是一份我验证过的示例文件。这份文件同时支持镜像仓库采用了私有签名的https协议。

stages:
  - package

img:
  stage: package
  image:
    name: yinguobing/kaniko-project-executor:v1.9.2-debug
    entrypoint: [""]
  tags:
    - default
  before_script:
    - 'echo "Hello, $CI_REGISTRY_USER"'
  script:
    - mkdir -p /kaniko/.docker
    - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
    - cat 你的证书.crt >> /kaniko/ssl/certs/ca-certificates.crt
    - >-
      /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
      --destination "${CI_REGISTRY_IMAGE}":"${CI_COMMIT_SHORT_SHA}"
  after_script:
    - echo "$CI_REGISTRY_IMAGE":"$CI_COMMIT_SHORT_SHA"