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

Kay*_*Kay 7 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
Run Code Online (Sandbox Code Playgroud)

这在 deploy/test.yml 文件中说它应该用 $CI_COMMIT_REF_NAME 的值替换 $TAG 吗?

部署/测试.yml

image: git.<removed>.com:5005/eng/my-group/my-image:$TAG
Run Code Online (Sandbox Code Playgroud)

小智 10

在 sed 中使用双引号 ( ") 而不是单引号'( ),并且还要注意正斜杠 ( /) 也需要转义(如\/)。

因此给出以下内容(假设您正在使用 docker hub)

$CI_COMMIT_REF_NAME=docker_user/repo:v1
Run Code Online (Sandbox Code Playgroud)

您首先需要先转义“/”字符,如下所示

$CI_COMMIT_REF_NAME=docker_user\/repo:v1
Run Code Online (Sandbox Code Playgroud)

然后最后在sed命令中使用双引号

sed -i "s/$TAG/$CI_COMMIT_REF_NAME/g" deploy/test.yml
Run Code Online (Sandbox Code Playgroud)

注意:除此之外,如果转义次数太多,您也可以选择使用|而不是。/

喜欢:

sed -i "s|$TAG|$CI_COMMIT_REF_NAME|g" deploy/test.yml
Run Code Online (Sandbox Code Playgroud)