如何在gitlab上的Dockerfile中包含CI_作业_令牌?
我遇到了一个问题,我似乎很难在我的CI/CD流中传递如何在gitlab上的Dockerfile中包含CI_作业_令牌?,docker,gitlab,gitlab-ci-runner,Docker,Gitlab,Gitlab Ci Runner,我遇到了一个问题,我似乎很难在我的CI/CD流中传递CI\u JOB\u令牌,这样我就可以从我的Dockerfile下载私有gitlab npm模块 我的文件如下所示: gitlab ci.yml image: tmaier/docker-compose:latest variables: CI_JOB_TOKEN: ${CI_JOB_TOKEN} stages: - build build: stage: build script: - docker-c
CI\u JOB\u令牌
,这样我就可以从我的Dockerfile
下载私有gitlab npm模块
我的文件如下所示:
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}
services:
qa-service:
build:
context: .
args:
PORT: 3000
CI_JOB_TOKEN: ${CI_JOB_TOKEN}
docker compose.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}
services:
qa-service:
build:
context: .
args:
PORT: 3000
CI_JOB_TOKEN: ${CI_JOB_TOKEN}
Dockerfile
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错误!执行时出错:
npm错误/usr/bin/git ls remote-h-t
npm错误
npm错误!远程:HTTP基本:访问被拒绝
npm错误!致命:验证“”失败
npm错误
npm错误!已退出,错误代码:128
从您的CI脚本中可以看出,变量语法应该是:
image: tmaier/docker-compose:latest
variables:
CI_JOB_TOKEN: $CI_JOB_TOKEN
ie$CI\u JOB\u TOKEN
,而不是${CI\u JOB\u TOKEN}
您也不需要使用变量
部分来定义CI\u JOB\u令牌
,只要在需要的地方使用$CI\u JOB\u令牌
,因为它已经是一个标记
从.开始,我不确定这是否仍然相关,但我发现,出于某种原因,还必须声明一个名为CI_JOB_TOKEN的ENV(在本例中与maven结合使用),否则将出现身份验证失败,例如,在尝试访问GitLab maven存储库时 作为一种解决方法,我建议使用多阶段构建,这样CI_JOB_令牌就不会出现在最终映像中,即:
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_令牌被成功地识别为环境变量,在尝试访问GitLab maven存储库时,我再也没有收到401错误
我认为这也会解决您的问题,这可能不是GitLab CI的限制,而是与Docker中构建参数的工作方式有关
当然,您必须使这些步骤适应您的特定用例