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

GitLab CI中./deploy.sh执行失败:文件未找到问题求助

解决GitLab CI中运行bash脚本提示“./deploy.sh: not found”的问题

别担心,这个问题和GitLab CI本身支持不支持bash没关系——核心问题出在你用的docker:latest镜像上,我来一步步帮你搞定:

问题根源

你使用的docker:latest镜像基于Alpine Linux,这个发行版默认有两个关键特点:

  1. 自带的默认shell是sh,并没有预装bash
  2. 如果你的deploy.sh开头写了#!/bin/bash的shebang,直接执行时系统找不到bash,就会抛出“not found”的错误(有时候脚本权限不足也会触发类似提示,这个我们后面也会处理)

解决方案

这里给你几个可行的方案,你可以根据自己的情况选择:

方案1:在CI环境中安装bash

既然镜像没装bash,那我们就在CI的初始化步骤里装上它,Alpine用apk包管理器很方便:

image: docker:latest
variables:
  IMAGE_NAME: registry.gitlab.com/$PROJECT_OWNER/$PROJECT_NAME
  DOCKER_DRIVER: overlay
services:
  - docker:dind
stages:
  - deploy
before_script:
  - apk add --no-cache bash  # 新增:安装bash
  - chmod +x ./deploy.sh     # 新增:给脚本加可执行权限,避免权限问题
  - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
  - docker pull $IMAGE_NAME:$CI_BUILD_REF_NAME
deploy:
  stage: deploy
  script:
    - bash ./deploy.sh  # 用bash明确执行脚本

方案2:修改脚本适配默认的sh

如果你的deploy.sh没有用到bash独有的语法(比如数组的特殊写法、[[ ]]判断等),可以直接修改脚本开头的shebang:
把脚本第一行的#!/bin/bash改成#!/bin/sh,这样用镜像自带的sh就能直接执行,不需要额外安装bash,更轻量化。

方案3:先确认脚本是否存在

有时候错误提示“not found”可能是脚本路径不对,你可以在before_script里加一行ls -la,看看当前工作目录下有没有deploy.sh:

before_script:
  - ls -la  # 查看当前目录文件,确认脚本存在
  - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
  - docker pull $IMAGE_NAME:$CI_BUILD_REF_NAME

额外提示

记得在本地也给deploy.sh加上可执行权限(chmod +x deploy.sh),然后提交到Git仓库,这样CI拉取代码后脚本本身就有权限执行,避免不必要的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:04:51