【问题标题】:Gitlab: How to pass CI_JOB_TOKEN to Docker to be used with maven?Gitlab:如何将 CI_JOB_TOKEN 传递给 Docker 以与 maven 一起使用?
【发布时间】:2021-12-29 11:43:08
【问题描述】:

我有一个ci_settings.xml。有了它,我就可以构建工件并将它们部署到 gitlab 包仓库:

<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
    <servers>
        <server>
            <id>gitlab-maven</id>
            <configuration>
                <httpHeaders>
                    <property>
                        <name>Job-Token</name>
                        <value>${env.CI_JOB_TOKEN}</value>
                    </property>
                </httpHeaders>
            </configuration>
        </server>
    </servers>
</settings>

但如果我也希望能够在 docker 容器中执行此操作,我需要传递 CI_JOB_TOKEN 到码头集装箱。然而,我一直无法找到如何做到这一点。

我的码头文件:

FROM maven:3.8.1-jdk-11

COPY pom.xml /
COPY ci_settings.xml /build/
COPY lombok.config /build/
COPY app/pom.xml /build/
COPY app/src /build/src

WORKDIR /build/

ARG CI_JOB_TOKEN
ENV CI_JOB_TOKEN=$CI_JOB_TOKEN

RUN mvn package -B -s ci_settings.xml
RUN cp /build/target/*.jar /app.jar

ENTRYPOINT ["java", "-jar", "/app.jar"]

我的 gitlab-ci.yml:

stages:
  - build

variables:
  IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG # TODO semantic versioning

before_script:
  - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY

build:
  stage: build
#  variables:
#    CI_JOB_TOKEN: "${CI_JOB_TOKEN}" # does not work
  script:
#    - echo "CI_JOB_TOKEN=$CI_JOB_TOKEN" >> .env # does not work
    - docker info
    # setting it as build-arg also does not work
    - docker build --build-arg CI_JOB_TOKEN=${CI_JOB_TOKEN} -f app/Dockerfile --pull -t $IMAGE .
    - docker push $IMAGE

我需要做什么才能将 CI_JOB_TOKEN 传递给 docker 容器,以便 ${env.CI_JOB_TOKEN} 在我复制到容器的 ci_settings.xml 中 得到正确解决了吗?

【问题讨论】:

    标签: docker maven gitlab


    【解决方案1】:

    使用类似的东西

    RUN sed -i "s/CI_JOB_TOKEN/$CI_JOB_TOKEN/" ci_settings.xml
    

    文件复制后,在你的 xml 文件中将 ${env.CI_JOB_TOKEN} 替换为 CI_JOB_TOKEN 以简化替换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-05
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      相关资源
      最近更新 更多