Gitlab 16.0 CE 在简单的 gitlab-ci 文件上返回错误

问题描述 投票:0回答:2

今天我将 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

gitlab gitlab-ci gitlab-ci-runner gitlab-omnibus gitlab-ci.yml
2个回答
0
投票

您的错误消息“未找到 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。


0
投票

我忘记了 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"
© www.soinside.com 2019 - 2024. All rights reserved.