符号* 1或& 2在Travis CI部署脚本中的含义是什么?

时间:2017-04-07 09:49:14

标签: travis-ci

我遵循了将Travis用于deploy to AWS CodeDeploy的指南。在这些文档中,他们指向.travis.yml example,其中包含以下代码:

deploy:
  - provider: s3
    access_key_id: AKIAJ4XZHIMNKP3WGGHQ
    secret_access_key: &1
      secure: <key>
    local_dir: dpl_cd_upload
    skip_cleanup: true
    on: &2
      repo: travis-ci/cat-party
    bucket: catparty-codedeploy
  - provider: codedeploy
    access_key_id: AKIAJ4XZHIMNKP3WGGHQ
    secret_access_key: *1
    bucket: catparty-codedeploy
    key: latest.zip
    bundle_type: zip
    application: CatPartyDemoApplication
    deployment_group: ProductionDemoFleet
    on: *2

我已经完成了这项工作并了解了流程(首先将zip文件上传到S3,然后将该文件部署到CodeDeploy)。我挣扎的是语法:具体是on: &2部分中的s3行和on: *2部分中的codedeploy部分。这些线路在做什么?

我问,因为我想修改此配置以部署到不同的CodeDeploy组,具体取决于提交是否具有给定标记,例如:

on:
  tags: true
  all_branches: true
  condition: "$TRAVIS_TAG =~ ^release.*$"

...但是因为我不清楚on: *2正在做什么(并且无法在文档中找到它),所以我不确定如何继续。有什么提示吗?

1 个答案:

答案 0 :(得分:4)

这些符号及其带来的功能是YAML本身的一部分。支持它们以减少YAMl文件中的重复工作。

例如,以&为前缀的此部分将后续结构存储为名称为2的引用。因此2现在引用了repo: travis-ci/cat-party

on: &2 repo: travis-ci/cat-party

引用名称也可以是一个字母数字字符集,以使事物更具表现力。

另一方面,然后使用*来解析您想要重用它的引用。

因此,在以下部分中,YAML解析器会将*2解析为先前存储的结构:repo: travis-ci/cat-party

on: *2

此功能可以节省您的重复,这在.travis.yml文件的多个方面都很方便。