我们当前使用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
值),但是我不知道是否,例如,来自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
...但是在推送步骤中出现“构建错误:没有基本身份验证凭据”。在这一点上,我的想法不多了。
答案 0 :(得分:2)
是否可以在codeship-steps.yml文件中使用[environment]变量?
虽然image_tag
可以利用Go templates的优势,但image_name
,registry
或其他任何事物都不是这样。这是一组单独的模板变量,仅image_tag
代可以访问。
对于一般的环境变量(CI环境变量或在服务配置中定义的环境变量),通过shell命令传递时,可以在命令步骤的codeship-steps.yml
中使用这些值。例如:
- 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设备,则建议您阅读有关如何generate Docker credentials的文档。