是否可以在codeship-steps.yml文件中使用变量?

时间:2018-10-02 20:15:18

标签: codeship

我们当前使用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和/或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

...但是在推送步骤中出现“构建错误:没有基本身份验证凭据”。在这一点上,我的想法不多了。

1 个答案:

答案 0 :(得分:2)

  

是否可以在codeship-steps.yml文件中使用[environment]变量?

虽然image_tag可以利用Go templates的优势,但image_nameregistry或其他任何事物都不是这样。这是一组单独的模板变量,仅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的文档。