我想用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文件中,应该用$ CI_COMMIT_REF_NAME的值替换$ TAG吗?
deploy / test.yml
image: git.<removed>.com:5005/eng/my-group/my-image:$TAG
答案 0 :(得分:0)
在sed中使用双引号(“)而不是单引号('),并请注意,也必须转义正斜杠(/)。
因此给出以下信息(假设您正在使用docker hub)
$CI_COMMIT_REF_NAME=docker_user/repo:v1
首先,您需要先转义'/'字符,像这样
$CI_COMMIT_REF_NAME=docker_user\/repo:v1
然后最终在sed命令中使用双引号
sed -i "s/$TAG/$CI_COMMIT_REF_NAME/g" deploy/test.yml
答案 1 :(得分:0)
如果您的字符串由 / 组成,作为一种解决方法,您可以使用不同的分隔符代替 / 例如,
sed -i -E "s%BASE_URL: '.*'%BASE_URL: '\$BACKEND_URL'%g" $FRONTEND_PATH/app/config/index.js
这里我使用 % 作为分隔符,因为我的字符串都没有该字符,您可以根据字符串中使用的符号使用任何其他字符。