今天我将 Gitlab CE 更新到最新版本 16.0.4,但之后我无法在旧项目上运行管道。
安装类型: 自我管理(sudo apt install gitlab-ce)
跑步者的版本: 16.0.2
执行人: 码头工人
默认图片: Python 3.8
我使用 docker a runner。
我在变量中设置 CI_DEBUG_TRACE: "true" 并获取以下详细信息:
未找到外壳
清理项目目录和基于文件的变量
- 设置-o
- grep 管道失败
- 设置-o管道故障
- 设置-o errexit
- 设置+o noclobber
- :
- 评估 '$'''rm''' -f /builds/xx/xxxxx.tmp/CI_SERVER_TLS_CA_FILE ' ++ rm -f /builds/xx/xxxxx.tmp/CI_SERVER_TLS_CA_FILE
- 出口0 错误:作业失败:退出代码 1
我的 gitlab-ci 文件如下:
stages:
- build
- test
variables:
CI_DEBUG_TRACE: "true"
build the car:
stage: build
script:
- ls
artifacts:
paths:
- build/
test the car:
stage: test
script:
- ls
我尝试在新项目上运行此文件,它运行良好。
我认为 Gitlab 无法运行以下命令: rm -f /builds/xx/xxxxx.tmp/CI_SERVER_TLS_CA_FILE
您的错误消息“未找到 shell”是主要线索。
问题是您的默认图像
python:3.8
没有定义ENTRYPOINT
,但有一个CMD
定义为python3
当 GitLab 尝试运行此容器时,它不会获取 POSIX shell,而是运行
python
解释器。因此会出现缺少 shell 的错误消息。
您可以通过以下方式解决此问题:
test-job:
image:
name: python:3.8-alpine
entrypoint: [ '/bin/sh', '-c' ]
...
或者,您可以使用不同的图像来定义
ENTRYPOINT
或 CMD
,这是一个有效的 shell。
我忘记了 gitlab-ee 和 gitlab-runner 与 docker 网络中的相同
https://docs.gitlab.com/runner/executors/docker.html#configure-a-network-with-container-links
所以我把
network_mode
bridge(default)
改为 host
[runners.docker]
network_mode = "host"