我想将我的前端上传到哨兵,但我需要使用docker
命令获取文件夹。但是当我使用image: getsentry/sentry-cli
docker 不起作用,例如before_script
我收到 docker 不存在的错误
sentry_job:
stage: sentry_job
image: getsentry/sentry-cli
services:
- docker:18-dind
before_script:
- docker login -u gitlab-ci-token -p "$CI_JOB_TOKEN" registry.gitlab.cz
script:
# script...
. # Get the dist folder from the image
- mkdir frontend_dist
- docker run --rm -v $PWD/frontend_dist:/mounted --entrypoint="" $IMAGE /bin/sh -c "cp /frontend/dist /mounted"
- ls frontend_dist
tags:
- dind
我该如何解决这个问题?
要实现您想要的,您需要使用单个作业(具有相同的构建上下文(并将docker:stable
指定为作业image
(以及docker:stable-dind
作为service
(。
此设置称为 docker-in-docker,这是允许 GitLab CIscript
运行docker
命令的标准方法(请参阅文档(。
因此,您可以像这样稍微调整.gitlab-ci.yml
代码:
sentry_job:
stage: sentry_job
image: docker:stable
services:
- docker:stable-dind
variables:
IMAGE: "${CI_REGISTRY_IMAGE}:latest"
before_script:
- docker login -u gitlab-ci-token -p "${CI_JOB_TOKEN}" registry.gitlab.cz
script:
- git pull "$IMAGE"
- mkdir -v frontend_dist
- docker run --rm -v "$PWD/frontend_dist:/mounted" --entrypoint="" "$IMAGE" /bin/sh -c "cp -v /frontend/dist /mounted"
- ls frontend_dist
- git pull getsentry/sentry-cli
- docker run --rm -v "$PWD/frontend_dist:/work" getsentry/sentry-cli
tags:
- dind
注意:git pull
命令是可选的(它们确保 Docker 将使用最新版本的映像(。
此外,您可能需要更改变量IMAGE
的定义。