【发布时间】:2018-05-17 00:29:28
【问题描述】:
我正在尝试在我的 Dockerrun.aws.json 文件中动态设置 AWS Elastic Beanstalk 的图像名称和标签:
"Image": {
"Name": "IMAGETAG",
"Update": "true"
}
在我的 GitLab CI 文件中使用以下 sed 命令作为脚本:
sed -i.bak "s|IMAGETAG|$CONTAINER_TEST_IMAGE|" Dockerrun.aws.json && rm Dockerrun.aws.json.bak; eb deploy Production
其中$CONTAINER_TEST_IMAGE 是经过验证的良好环境变量(通过将echo $CONTAINER_TEST_IMAGE 作为脚本进行测试)。 $CONTAINER_TEST_IMAGE 包含以下内容的结构(其中 ... 是完整的 id):
gitlab.company.com:123/my-group/my-project:core_7de09851...8f_testing
我面临的问题是 sed 在 CI 管道期间不起作用。我不明白为什么考虑如果我在本地设置环境变量并运行相同的命令,它将成功地将 Name 的值替换为相同的结构 URL。此测试是在 Macbook 上完成的。
我知道它没有更新文件,因为 Gitlab CI 日志报告
WARN: Failed to pull Docker image IMAGETAG:latest, retrying...
我尝试了一些不起作用的方法:
- 将
sed和eb deploy命令作为单独的脚本运行(CI 文件中的两行不同) - 将我要在 Dockerrun.aws.json 中替换的变量切换为
<IMAGE> - 当它在
<IMAGE>时,运行sed -i='' "s|<IMAGE>|$CONTAINER_RELEASE_IMAGE|" Dockerrun.aws.json而不是执行 .bak 然后 rm'ing (我在某处读到 sed 在 OSX 上与 -i='' 版本不一致)
有人对问题可能是什么以及如何解决有任何想法吗?
【问题讨论】:
-
我面临着完全相同的问题。我正在尝试替换 gitlab ci 中的 java 文件中的一行。同样的作品在当地绝对没问题。您找到解决方案了吗?
-
@DineshKumar 我刚刚发布了解决方案,希望对您有所帮助!
标签: bash sed gitlab amazon-elastic-beanstalk gitlab-ci