如何在GitLab CI中运行镜像内脚本并传递Git环境变量参数?
解决方案
1. 先确认脚本路径(可选但稳妥)
你的脚本在镜像的$WORKDIR目录下,GitLab CI默认会把项目代码挂载到/builds/<命名空间>/<项目名>目录,所以如果当前工作目录不是镜像的$WORKDIR,先切换过去就行。可以在脚本里加一行cd $WORKDIR,或者直接用绝对路径调用脚本(比如知道WORKDIR是/app的话,就写ruby /app/run_log.rb)。
2. 修改CI配置运行脚本并传参
GitLab CI自带一堆预定义的Git环境变量,比如提交哈希CI_COMMIT_SHA、分支名CI_COMMIT_BRANCH、项目名CI_PROJECT_NAME这些,直接拿来当参数用就行。
修改后的config.yml如下:
stages: - collect image: name: usd3221/log-stats:latest entrypoint: [""] default: tags: - local job: stage: collect script: - pwd # 切换到镜像的WORKDIR目录 - cd $WORKDIR # 执行脚本并传递Git环境变量作为参数 - ruby run_log.rb "$CI_COMMIT_SHA" "$CI_COMMIT_BRANCH"
3. 几个注意点
- 变量要用双引号包起来:如果变量值带空格或特殊字符,不加引号会解析出错。
- 要是想用自定义参数名(比如你原来写的
${argone}、${arg_2}),可以先在CI里定义变量再传:job: stage: collect variables: ARGONE: "$CI_COMMIT_SHA" ARG_TWO: "$CI_COMMIT_BRANCH" script: - cd $WORKDIR - ruby run_log.rb "$ARGONE" "$ARG_TWO" - 不用特意给脚本加执行权限:因为是用
ruby命令直接调用脚本文件,只要文件存在、镜像里有Ruby环境就能跑。 - 不确定
$WORKDIR具体路径的话,先在script里加echo $WORKDIR或者pwd看看当前目录,确认脚本位置。
内容的提问来源于stack exchange,提问作者Umair Shahid
相关产品推荐
相关产品推荐

