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

如何在GitLab CI中运行带参数的Bash脚本及传递变量?

GitLab CI 执行本地脚本与变量传递问题

1. 能不能直接在GitLab CI的script段里跑本地脚本?

当然可以,但得注意两个关键点:

  • 脚本得有可执行权限:如果脚本没开执行权限,CI跑的时候会报错。你可以本地先执行chmod +x scripts/hello.sh,然后把权限变更提交到仓库;也可以在CI的script里先加权限再运行:
    chmod +x ./scripts/hello.sh && ./scripts/hello.sh
    
  • 路径要写对:你的项目里脚本在scripts/hello.sh,CI运行时的工作目录是仓库根目录,所以你当前配置里的./scripts/hello.sh路径是正确的,这么写没问题。

2. 能不能从GitLab CI给脚本传变量?

完全没问题,常用的有三种方式:

方式一:CI配置里定义变量,脚本直接读

在CI配置里加variables块定义变量,脚本里用$变量名就能读取:

image: docker:latest

stages:
  - build

build:
  stage: build
  variables:
    GREET_NAME: "Alice"
    MESSAGE_PREFIX: "Hi"
  script:
    - ./scripts/hello.sh

修改hello.sh:

#!/usr/bin/env bash
echo "$MESSAGE_PREFIX, $GREET_NAME!"

方式二:执行脚本时直接传参数

和普通bash脚本传参一样,在CI的script里给脚本传参数就行:

build:
  stage: build
  script:
    - ./scripts/hello.sh "Bob" "Hello"

修改hello.sh用位置参数读取:

#!/usr/bin/env bash
echo "$2, $1!"

方式三:用GitLab预定义变量或项目级变量

GitLab CI自带一堆预定义变量(比如CI_PROJECT_NAME项目名、CI_COMMIT_BRANCH分支名),或者你在GitLab项目设置里配的自定义变量,脚本都能直接通过$变量名读取,不用额外配置。比如:

#!/usr/bin/env bash
echo "当前运行项目:$CI_PROJECT_NAME,分支:$CI_COMMIT_BRANCH"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:03:31