首页 > 解决方案 > 是否可以在 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

解决方案


是否可以在 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 凭据的文档。


推荐阅读