是否可以在 codeship-steps.yml 文件中使用变量?
Is it possible to use variables in a codeship-steps.yml file?
我们目前使用 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
、and/or 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
...但这会在推送步骤中导致 "error parsing image name during push step: invalid reference format"。
我尝试过不在 image_name
...
中指定注册表
image_name: project/app-name
...但是我在推送步骤上得到了 "Build Error: no basic auth credentials"。在这一点上,我 运行 没主意了。
Is it possible to use [environment] variables in a codeship-steps.yml file?
虽然 image_tag
可以利用 Go templates,但 image_name
、registry
或其他任何东西都不是这样。这是一组单独的模板变量,仅供 image_tag
一代访问。
至于一般的环境变量(CI 环境变量或服务配置中定义的变量),这些值可以在通过 [=36] 传递时在命令步骤的 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
至于您的 'no basic auth credentials' 错误消息,可能是您检索用于访问图像注册表的基本身份验证凭据的方式存在问题。如果您使用的是 MacOS 设备,我建议您查看我们关于如何 generate Docker credentials.
的文档
我们目前使用 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
、and/or 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
...但这会在推送步骤中导致 "error parsing image name during push step: invalid reference format"。
我尝试过不在 image_name
...
image_name: project/app-name
...但是我在推送步骤上得到了 "Build Error: no basic auth credentials"。在这一点上,我 运行 没主意了。
Is it possible to use [environment] variables in a codeship-steps.yml file?
虽然 image_tag
可以利用 Go templates,但 image_name
、registry
或其他任何东西都不是这样。这是一组单独的模板变量,仅供 image_tag
一代访问。
至于一般的环境变量(CI 环境变量或服务配置中定义的变量),这些值可以在通过 [=36] 传递时在命令步骤的 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
至于您的 'no basic auth credentials' 错误消息,可能是您检索用于访问图像注册表的基本身份验证凭据的方式存在问题。如果您使用的是 MacOS 设备,我建议您查看我们关于如何 generate Docker credentials.
的文档