azure - 如何在Gitlab CI CD中使用Kaniko?

标签 azure gitlab kaniko

我正在尝试将 Kaniko 与 Gitlab 结合使用,以摆脱 DinD 流程。

所以,我的 .gitlab-ci.yaml 中有这个

kaniko:
  stage: tagging

  variables:
    CI_REGISTRY: ${AZURE_REGISTRY_USERNAME_DEV}.azurecr.io
    CI_REGISTRY_USER: ${AZURE_REGISTRY_USERNAME_DEV}
    CI_REGISTRY_PASSWORD: ${AZURE_REGISTRY_PASS_DEV}

  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]

  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
    - >-
      /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/devops/Dockerfile"
      --destination "${CI_REGISTRY}/kanikotest:bla"
      --verbosity debug

  tags: # select gitlab-runner based on this tag(s)
    - docker
  only:
    refs:
      - /^feat.*$/

但我不断在日志中收到此错误

error checking push permissions -- make sure you entered the correct tag name, and that you are authenticated correctly, and try again: checking push permission for "mysuperregistry.azurecr.io/kanikotest:bla": creating push check transport for mysuperregistry.azurecr.io failed: GET https://mysuperregistry.azurecr.io/oauth2/token?scope=repository%3Akanikotest%3Apush%2Cpull&service=mysuperregistry.azurecr.io: UNAUTHORIZED: authentication required, visit https://aka.ms/acr/authorization for more information.

我正在关注this guide .

有趣的事实...我已经通过使用相同的信用创建一个 secret ,成功地将 Kaniko 部署在 Minikube 内,并且我成功地推送到了相同的注册表。

最佳答案

身份验证文件的语法似乎不错(我假设信用是正确的),因此如果您只需按如下方式设置 DOCKER_CONFIG 环境变量,您的代码应该可以工作:

kaniko:
  stage: tagging

  variables:
    CI_REGISTRY: ${AZURE_REGISTRY_USERNAME_DEV}.azurecr.io
    CI_REGISTRY_USER: ${AZURE_REGISTRY_USERNAME_DEV}
    CI_REGISTRY_PASSWORD: ${AZURE_REGISTRY_PASS_DEV}
    DOCKER_CONFIG: "$CI_PROJECT_DIR/kanikotest/.docker"

  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]

  script:
    - mkdir -p $DOCKER_CONFIG
    - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > $DOCKER_CONFIG/config.json
    - >-
      /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/devops/Dockerfile"
      --destination "${CI_REGISTRY}/kanikotest:bla"
      --digest-file "$CI_PROJECT_DIR/docker-content-digest-kanikotest"
      --verbosity info

  artifacts:
    paths:
      - docker-content-digest-kanikotest

DOCKER_CONFIG 路径中添加额外的目录 (kanikotest) 将避免并发构建覆盖相同的身份验证文件(在您的案例示例中不需要,但在一般)。

--digest-file 选项还允许为后续 CI 作业保存图像 SHA。

关于azure - 如何在Gitlab CI CD中使用Kaniko?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70775611/

相关文章:

git - 无法将现有项目克隆或推送到 gitlab

kubernetes - 尝试推送到不安全的私有(private) docker 注册表时检查推送权限时出错

azure - 为什么获取用户访问 token 会抛出 invalid_grant 错误?

azure - 在 Terraform 中为 Azure 存储帐户创建事件订阅

ssl - GitLab 的 Jenkins 身份验证失败

gitlab - GitLab 页面可以用于审核 mkdocs 项目上的应用程序吗?

docker - 如何在单独的 GitLab CI 阶段执行 kaniko Docker 构建和推送?

mysql - 尝试利用azure windows 2012 R2虚拟机mysql但无法访问它

azure - npm Azure Artifacts feed 不会安装来自上游源的所有依赖项