首页 > 解决方案 > 在 gitlab ci 作业中使用 kubectl 创建 ImagePullSecret 时出现奇怪的错误

问题描述

我正在尝试将私有 gitlab 注册表中的映像部署到由 gitlab 连接和管理的自托管 kubernets 集群。据我了解,我需要在我的 Deployment-Config 中创建并引用一个 ImagePullSecret 才能使其工作。Gitlab 正在为每个项目创建一个命名空间,所以我试图在我的 CI-Job 开始时创建一个秘密。奇怪的是,尽管存在所有必需的参数,但我总是得到错误,即缺少参数。我究竟做错了什么?

这是我的 gitlab-ci.yml 中的 CI-Job

deploy-app:
  stage: deploy
  image:
    name: bitnami/kubectl:latest
    entrypoint: [""]
  script:
    - kubectl create secret docker-registry gitlab-registry --docker-username=$CI_DEPLOY_USER --docker-password=$CI_DEPLOY_PASSWORD --docker-server=$CI_REGISTRY --dry-run=client -o yaml | kubectl apply -f -
    - kubectl apply -f k8s/configmap.yaml
    - kubectl apply -f k8s/deployment.yaml
    - kubectl apply -f k8s/service.yaml
    - kubectl apply -f k8s/ingress.yaml
  environment:
    name: production
    url: <my-url>
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

CI-Job 总是遇到以下错误:

error: either --from-file or the combination of --docker-username, --docker-password and --docker-server is required

我尝试直接在服务器上运行命令没有错误,所以这与这个特定的环境有关。有人对另一种方法有想法吗?我现在有点失落。

标签: dockergitlabgitlab-cikubectldocker-registry

解决方案


有同样的问题。通过使用正确的 CI 变量名称修复: $CI_REGISTRY_USER$CI_REGISTRY_PASSWORD.

GitLab 文档中的看起来$CI_DEPLOY_USER$CI_DEPLOY_PASSWORD变量只是一个示例,实际上并没有定义。

在此处检查实际变量名称:https ://docs.gitlab.com/ee/ci/variables/


推荐阅读