Gitlab:如何将 CI_JOB_TOKEN 传递给 Docker 以与 Maven 一起使用?
Gitlab: How to pass CI_JOB_TOKEN to Docker to be used with maven?
我有一个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
到 docker 容器。但我一直没能找到如何做到这一点。
我的docker文件:
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
里面
得到正确解决了吗?
使用类似
的东西
RUN sed -i "s/CI_JOB_TOKEN/$CI_JOB_TOKEN/" ci_settings.xml
复制文件后,在 xml 文件中将 ${env.CI_JOB_TOKEN} 替换为 CI_JOB_TOKEN 以简化替换。
我有一个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
到 docker 容器。但我一直没能找到如何做到这一点。
我的docker文件:
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
里面
得到正确解决了吗?
使用类似
的东西RUN sed -i "s/CI_JOB_TOKEN/$CI_JOB_TOKEN/" ci_settings.xml
复制文件后,在 xml 文件中将 ${env.CI_JOB_TOKEN} 替换为 CI_JOB_TOKEN 以简化替换。