如何使用sed用gitlab ci管道变量替换yml文件中的变量

时间:2019-02-19 15:02:20

标签: sed gitlab gitlab-ci

我想用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

2 个答案:

答案 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

这里我使用 % 作为分隔符,因为我的字符串都没有该字符,您可以根据字符串中使用的符号使用任何其他字符。