小编Jac*_*ann的帖子

在Gitlab CI期间,Sed无法替换引号中的字符串

我正在尝试在Dockerrun.aws.json文件中动态设置AWS Elastic Beanstalk的映像名称和标记:

"Image": {
  "Name": "IMAGETAG",
  "Update": "true"
}
Run Code Online (Sandbox Code Playgroud)

使用以下sed命令作为我的GitLab CI文件中的脚本:

sed -i.bak "s|IMAGETAG|$CONTAINER_TEST_IMAGE|" Dockerrun.aws.json && rm Dockerrun.aws.json.bak; eb deploy Production
Run Code Online (Sandbox Code Playgroud)

哪里$CONTAINER_TEST_IMAGE是经过验证的良好环境变量(通过echo $CONTAINER_TEST_IMAGE作为脚本进行测试).$CONTAINER_TEST_IMAGE包含以下内容的结构(其中...是完整ID):

gitlab.company.com:123/my-group/my-project:core_7de09851...8f_testing
Run Code Online (Sandbox Code Playgroud)

我面临的问题是sed在CI管道中不起作用.我无法理解为什么考虑如果我在本地设置环境变量并运行相同的命令,它将成功地将值替换Name为相同的结构URL.该测试在Macbook上完成.

我知道它没有更新文件,因为Gitlab CI日志报告

WARN: Failed to pull Docker image IMAGETAG:latest, retrying...
Run Code Online (Sandbox Code Playgroud)

我尝试了一些不起作用的东西:

  • 将sed和eb deploy命令作为单独的脚本运行(CI文件中的两个不同的行)
  • 切换我想在Dockerrun.aws.json中替换的变量 <IMAGE>
  • 虽然它是在<IMAGE>运行sed -i='' "s|<IMAGE>|$CONTAINER_RELEASE_IMAGE|" Dockerrun.aws.json而不是运行.bak然后运行它(我在某处看到,在OSX上使用-i =''版本的sed存在不一致)

有没有人对问题可能是什么以及如何解决有任何想法?

bash sed gitlab gitlab-ci amazon-elastic-beanstalk

5
推荐指数
1
解决办法
2613
查看次数

标签 统计

amazon-elastic-beanstalk ×1

bash ×1

gitlab ×1

gitlab-ci ×1

sed ×1