我遇到了一个问题,我似乎很难在CI/CD流中传递CI_JOB_TOKEN,以便从我的Dockerfile下载私有的gitlab模块。
我的文件看起来是这样的:
gitlab-ci.yml
image: tmaier/docker-compose:latest
variables:
CI_JOB_TOKEN: ${CI_JOB_TOKEN}
stages:
- build
build:
stage: build
script:
- docker-compose build --build-arg CI_JOB_TOKEN=${CI_JOB_TOKEN}
- docker-compose push --arg CI_JOB_TOKEN=${CI_JOB_TOKEN}docker-compose.yml
services:
qa-service:
build:
context: .
args:
PORT: 3000
CI_JOB_TOKEN: ${CI_JOB_TOKEN}文档
FROM ubuntu:latest
ARG CI_JOB_TOKEN
RUN npm install \
"git+https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.example.com/xxx/yyy.git"我一直在犯这个错误
国家预防机制错误!执行时出错: npm ERR!/usr/bin/git ls-远程-h -t 令牌%7D@gitlab.example.com/xxx/yyy.git 国家预防机制错误!国家预防机制错误!远程: HTTP Basic:拒绝访问 国家预防机制错误!致命:“令牌%7D@gitlab.example.com/xxx/yyy.git/”的身份验证失败 国家预防机制错误!国家预防机制错误!与错误代码一起退出: 128
发布于 2018-11-21 11:42:29
不确定这是否仍然相关,但我已经发现,由于某种原因,还必须声明名为CI_JOB_TOKEN的ENV (在本例中是与maven结合使用),否则将出现身份验证失败,例如当试图访问GitLab maven存储库时。
作为解决办法,我建议使用多阶段构建,这样CI_JOB_TOKEN就不会出现在最终的映像中,即:
ARG CI_JOB_TOKEN
FROM maven:alpine as build
ENV CI_JOB_TOKEN=$CI_JOB_TOKEN
COPY . .
RUN mvn package -s ci_settings.xml
FROM java:8-jre-alpine
COPY --from=build PATH/TO/app.jar /app.jar
CMD exec java -jar /app.jar通过这种方式,CI_JOB_TOKEN被成功地识别为一个环境变量,并且在试图访问GitLab maven存储库时,我不再收到401错误。
我假设这也将解决您的问题,这可能不是对GitLab CI的限制,而是与在Docker中构建参数的方式有关。
当然,您必须根据特定的用例调整这些步骤。
https://stackoverflow.com/questions/50511278
复制相似问题