如何在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
相关产品推荐
相关产品推荐

