codeship - 是否可以在 codeship-steps.yml 文件中使用变量?
问题描述
我们目前使用 Codeship Pro 将 Docker 镜像推送到 AWS 上的私有注册表,并将这些镜像部署到 ECS 集群。
但是,该codeship-steps.yml
文件包含我要推送到的 AWS 区域的硬编码区域名称。例如:
- name: push_production
service: app
type: push
image_name: 123456789012.dkr.ecr.us-east-1.amazonaws.com/project/app-name
image_tag: "{{.Timestamp}}"
tag: master
registry: https://123456789012.dkr.ecr.us-east-1.amazonaws.com
dockercfg_service: aws_generator
我希望能够相当轻松地将其切换为部署到不同的 AWS 区域。因此问题:
是否可以在 codeship-steps.yml 文件中使用变量?
我知道某些属性可以使用 Codeship 提供的少数内置变量(例如{{.Timestamp}}
用于image_tag
属性的值),但我不知道例如来自 an 的值是否env_file
可以用于image_name
, registry
,和/或command
步骤的属性。
我在想象这样的事情......
codeship-steps.yml:
- name: push_production
service: app
type: push
image_name: "123456789012.dkr.ecr.{{.AWS_REGION}}.amazonaws.com/project/app-name"
image_tag: "{{.Timestamp}}"
tag: master
registry: "https://123456789012.dkr.ecr.{{.AWS_REGION}}.amazonaws.com"
dockercfg_service: aws_generator
...但这会导致在推送步骤中出现“在推送步骤中解析图像名称错误:无效的参考格式”。
我试过只是没有在image_name
...中指定注册表
image_name: project/app-name
...但我在推送步骤中收到“构建错误:没有基本的身份验证凭据”。在这一点上,我已经没有想法了。
解决方案
是否可以在 codeship-steps.yml 文件中使用 [环境] 变量?
虽然image_tag
可以利用Go 模板,但对于image_name
,registry
或其他任何东西都不是这样。这是一组单独的模板变量,只能由image_tag
一代访问。
至于一般的环境变量(CI 环境变量或服务配置中定义的那些),这些值可以在codeship-steps.yml
通过 shell 命令传递时在命令步骤中使用。例如:
- service: app
command: echo The branch name is: $CI_BRANCH
结果是:
The branch name is: $CI_BRANCH
- service: app
command: /bin/sh -c 'echo The branch name is: $CI_BRANCH'
结果是:
The branch name is: master
至于您的“没有基本身份验证凭据”错误消息,您如何检索基本身份验证凭据以访问您的图像注册表可能存在问题。如果您使用的是 MacOS 设备,我建议您查看我们关于如何生成 Docker 凭据的文档。
推荐阅读
- r - 在 R 中:当我在 for 循环中时,如何将函数的列表输出存储在同一个列表中?
- ios - sectionIndexTitles 不工作
- c# - 将根对象添加到 NJsonSchema 模式生成器
- python - 带假人的条形图
- chisel - 未找到黑盒异常
- kubernetes - 如何将 Kubernetes 机密指向 Configmap
- javascript - 使用 es6 为具有相同 id 的项目重新组织数组
- powershell - Install-PackageProvider 找不到 NuGet 提供程序
- javascript - 如何用新的替换 json 对象的属性
- python - 在一张图表上绘制两个图后,没有发现带有标签的句柄出现图例错误