You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Docker镜像在Gitlab CI中无法执行script脚本问题

GitLab CI 自定义镜像无法执行脚本问题排查

我制作了一个极简Docker镜像,在GitLab中通过.gitlab-ci.yml使用该镜像时,script部分始终无法执行,日志仅显示:

Executing "step_script" stage of the job script
Cleaning up project directory and file based variables

添加report字段到yml后,最后一行显示‘Uploading artifacts for failed job’。

本地执行docker run MyImage <command>能正常运行bash命令,但GitLab流水线会在最后一行后无限挂起,永不结束。使用官方gradle镜像则完全正常,怀疑是自定义镜像的bash权限或配置有问题,请问该如何解决?

我的.gitlab-ci.yml内容

image:
  name: <... My Image ...>

stages:
  - build

build-stage:
  stage: build

  script:    
    - echo "Testing echo"

我的Dockerfile内容

FROM ubuntu:20.10

CMD ["bash"]

问题原因及解决方法

  • 核心问题:GitLab CI运行作业时,会默认覆盖镜像的CMD指令,以bash -c '<script内容>'的方式执行脚本。但你的镜像仅设置CMD ["bash"],没有确保bash以非交互式非登录模式运行,加上终端环境配置缺失,导致脚本执行流程卡住。

  • 修复方案:

    1. 调整Dockerfile的指令:
      GitLab CI更适配用ENTRYPOINT指定默认shell,这样脚本参数能被正确传递。修改后的Dockerfile:

      FROM ubuntu:20.10
      ENTRYPOINT ["bash"]
      

      或者直接删除CMD指令——ubuntu镜像默认的ENTRYPOINT已经是/bin/sh -c,GitLab可以正常调用bash执行脚本。

    2. 确保bash环境完整且权限正确:
      虽然ubuntu自带bash,但可以显式安装并确认权限:

      FROM ubuntu:20.10
      RUN apt-get update && apt-get install -y --no-install-recommends bash
      RUN chmod +x /bin/bash
      
    3. 在CI配置中显式指定shell:
      在job里添加shell字段,强制用bash执行脚本:

      build-stage:
        stage: build
        shell: "/bin/bash"
        script:    
          - echo "Testing echo"
      

内容的提问来源于stack exchange,提问作者Jan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:05:21