Eld*_*ldy 5 gitlab docker gitlab-ci gitlab-ci-runner
我正在尝试调试 GitLab CI 管道中的一些问题。我有一个步骤 B,它使用了步骤 A 中的一些工件。
步骤 A 很长(并且在 CI 中工作),所以我不想在本地运行它:我只是从 GitLab 下载生成的工件。所以我有一个artifacts.zip,我提取它以获得一个output和一个logs目录。到现在为止还挺好。
我想在本地运行步骤 B,使用gitlab-runner. 请注意,我使用的是 9.5 版(https://docs.gitlab.com/runner/install/old.html)。
我正在使用这个命令:
gitlab-runner exec docker step-b
Run Code Online (Sandbox Code Playgroud)
正如我所解释的,step-b需要来自step-a. 这是我尝试过的:
gitlab-runner exec docker --docker-volumes ~/Downloads/output step-b
Run Code Online (Sandbox Code Playgroud)
在步骤 B 中执行的脚本之一正在执行类似mv ../output /some/where/else. 但是,此脚本失败并出现以下错误:
mv: cannot stat '../output': No such file or directory
Run Code Online (Sandbox Code Playgroud)
出现此错误后,我有两个问题:
这个脚本在哪里执行?它是这样调用的.gitlab-ci.yml:
./scripts/my_script.sh.
Run Code Online (Sandbox Code Playgroud)
什么是.在这种情况下?
--docker-volumes ~/Downloads/output将目录安装在正确的位置以便我的脚本可以找到它?编辑
根据要求,这里是步骤 A 的描述。
script:
- mkdir -p /usr/local/compil_result
- ./scripts/compil.sh
- mv /usr/local/compil_result ./output
artifacts:
paths:
- output
- logs
Run Code Online (Sandbox Code Playgroud)
由于您没有提到您使用的 docker 映像,我假设它是您或您的同事制作的自定义映像。我认为您需要检查 docker 映像的 Dockerfile,以确保该脚本的工作目录在哪里。
或者你也可以尝试进入外壳内部,首先查看容器内部的结构,
docker run --rm -it --entrypoint /bin/bash your-image-name
Run Code Online (Sandbox Code Playgroud)
要挂载 Docker 卷,您需要将主机目录和容器目录用冒号分隔,并为它们使用完整路径目录。
像这样的事情,
gitlab-runner exec docker --docker-volumes '/home/username/Downloads/output:/output' step-b
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1170 次 |
| 最近记录: |