是否可以在 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_nameregistry、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_nameregistry 或其他任何东西都不是这样。这是一组单独的模板变量,仅供 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.

的文档