繁体   English   中英

通过 Kubernetes Deployment.yml 覆盖 Dockerfile 参数

[英]Override Dockerfile arguments by Kubernetes Deployment.yml

我在 gitlab 上运行一个管道,它使用 .gitlab-ci.yml 和 Dockerfile 来构建映像并将其推送到 GCP 容器存储库。 然后我使用该映像在 Kubernetes 上进行部署。

我正在使用 CI/CD 私有变量来注入用户名(service_now_qa_username)密码(service_now_qa_password) ,并将其作为参数传递给 docker build 命令,然后在Dockerfile中使用

这就是我的 gitlab-ci.yml 文件的样子

variables:
        BUILD_ARGS: "--build-arg USERNAME=$service_now_qa_username --build-arg PASSWORD=$service_now_qa_password"
script:
   
    - docker build -t "$IMAGE_NAME:$CI_COMMIT_REF_NAME" -t "$IMAGE_NAME:latest" $BUILD_ARGS .

这是我的 Dockerfile 的样子:

ARG USERNAME
ARG PASSWORD
ENV USER=$USERNAME
ENV PASS=$PASSWORD

ENTRYPOINT java -jar servicenowapi.jar -conf config.json -username ${USER} -password ${PASS}

现在我想使用 Kubernetes Deployment.yml覆盖用户名密码的这些参数,并使用 Deployment.yaml 文件覆盖这些参数。

我的最终目标是使用 Kubernetes Deployment.yaml 作为用户名密码,并作为参数传递给 Dockerfile。

ARGS是构建时变量,因此无法在运行时将值传递给 ARGS。

顺便说一句,您可以在 Kubernetes 部署中按照以下方式覆盖entrypoint点并使用环境变量。 (Dockerfile 中的entrypoint点是 Kubernetes 容器规范中的command )。

containers:
  - name: xxxx
    env:
    - name: USER
      value: "Input your user"
    - name: PASS
      value: "Input your pass"
    command: ["java", "-jar servicenowapi.jar -conf config.json -username $(USER) -password $(PASS)"]

这里的主要内容是定义环境变量并使用$()而不是${}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM