如何在gitlab上的Dockerfile中包含CI_作业_令牌?

如何在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/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-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中构建参数的工作方式有关

当然,您必须使这些步骤适应您的特定用例