【发布时间】:2019-02-19 15:02:20
【问题描述】:
我想用 gitlab ci 管道中的变量替换 .yml 文件中的变量。
gitlab-ci.yml
deploy_test:
stage: deploy
script:
- sed -i 's/$TAG/$CI_COMMIT_REF_NAME/g' deploy/test.yml
- kubectl apply -f deploy/test.yml
when: manual
only:
- master
- tags
这在 deploy/test.yml 文件中说它应该将 $TAG 替换为 $CI_COMMIT_REF_NAME 的值?
部署/test.yml
image: git.<removed>.com:5005/eng/my-group/my-image:$TAG
【问题讨论】:
-
这些变量在脚本命令的环境中是否可用:如果是,您可能想要执行
sh -c 'sed -i "s/$TAG/$CI_COMMIT_REF_NAME/g" deploy/test.yml'-- 专门调用 shell 可以让您知道变量替换将起作用,并且在正文中使用双引号将允许替换变量。 -
@glennjackman ye $CI_ 变量在我的管道中可用,但不是用变量的值替换 $TAG,而是用名称替换它
-
哦,我明白了,字符串
$TAG出现在yaml 文件中。试试这个:sed -i 's/$TAG/'"$CI_COMMIT_REF_NAME"'/g' deploy/test.yml——单引号和双引号的组合将保留$TAG文字,并且 $CI... 变量被替换。 -
@glennjackman 被替换是指它将使用变量 $CI_COMMIT_REF_NAME 的值?而不是变量名?
-
这正是我的意思。