Travis CI:如何有条件地 运行 提供程序部署作业?
Travis CI: How to conditionally run provider deployment jobs?
我有一个基于 2 个条件部署到不同 S3 存储桶的 travis 脚本:
一、分行名称
2. $TRAVIS_BRANCH
环境变量
... travis stuff
deploy:
- provider: s3
... other config
bucket: my-staging-bucket
on:
repo: MyOrg/my-repo
branch: staging
condition: $TRAVIS_BRANCH = staging
- provider: s3
... other config
bucket: my-prod-bucket
on:
repo: MyOrg/my-repo
branch: production
condition: $TRAVIS_BRANCH = production
它按预期工作:
当我部署到暂存区时,第一个配置成功构建和部署,并且我在 Travis 的作业日志中收到了适当的消息。
它还尝试部署到生产环境,但因 on:
条件而停止,再次提供指示同样多的消息。生成的日志消息如下所示,前两行表示已成功部署到暂存,但未部署到生产。
-Preparing deploy
-Deploying application
-Skipping a deployment with the s3 provider because a custom condition was not met
情况反过来也是一致的:
-Skipping a deployment with the s3 provider because this branch is not permitted: production
-Skipping a deployment with the s3 provider because a custom condition was not met
...
-Preparing deploy
-Deploying application
这在团队中引起了一些混乱,因为消息似乎是误报,表明部署在实际按预期运行时失败了。 我想做的是设置 Travis,以便它只运行适合该分支和环境变量组合的部署脚本。
有没有办法做到这一点?我的印象是这是有条件部署的方法。
如果无法阻止这两个部署作业 运行,是否有办法抑制作业日志中的消息传递?
最好的方法是使用 Travis 的阶段和作业功能。阶段是作业组。阶段 运行 内的作业并行进行。 运行 个阶段,一个接一个。整个阶段可以是有条件的,阶段也可以包含有条件的工作。阶段中的作业也可以是部署作业(即 travis.yml 中的整个 deploy:
可以嵌套在条件阶段中。对于您的目标来说最重要的是, 条件阶段及其包含的作业如果不满足条件。
这与您已有的标准 deploy:
矩阵非常不同。也就是说,您当前的部署步骤包含 2 个部署,因此您收到消息说它正在跳过一个部署。
相反,您可以将其更改为具有条件作业的单独部署阶段。
使用这样的阶段的缺点是每个阶段 运行 都在其自己的 VM 中,因此您无法从一个阶段到下一个阶段共享数据。 (即来自先前阶段的构建工件不会传播到后续阶段)。例如,您可以通过 S3 共享冗长编译阶段的构建结果来解决这个问题。
可在此处找到更多信息:
https://docs.travis-ci.com/user/build-stages
我的 github 中有一个工作示例:https://github.com/brianonn/travis-test
jobs:
include:
- stage: compile
script: bash scripts/compile.sh
- stage: test
script: bash scripts/test.sh
- stage: deploy-staging
if: branch = staging
name: "Deploy to staging S3"
script: skip
deploy:
provider: script
script: bash scripts/deploy.sh staging
on:
branch: staging
condition: $TRAVIS_BRANCH = staging
- stage: deploy-prod
if: branch = production
name: "Deploy to production S3"
script: skip
deploy:
provider: script
script: bash scripts/deploy.sh production
on:
branch: production
condition: $TRAVIS_BRANCH = production
这会生成一个特定于暂存和生产的 Travis 作业日志:
我有一个基于 2 个条件部署到不同 S3 存储桶的 travis 脚本:
一、分行名称
2. $TRAVIS_BRANCH
环境变量
... travis stuff
deploy:
- provider: s3
... other config
bucket: my-staging-bucket
on:
repo: MyOrg/my-repo
branch: staging
condition: $TRAVIS_BRANCH = staging
- provider: s3
... other config
bucket: my-prod-bucket
on:
repo: MyOrg/my-repo
branch: production
condition: $TRAVIS_BRANCH = production
它按预期工作: 当我部署到暂存区时,第一个配置成功构建和部署,并且我在 Travis 的作业日志中收到了适当的消息。
它还尝试部署到生产环境,但因 on:
条件而停止,再次提供指示同样多的消息。生成的日志消息如下所示,前两行表示已成功部署到暂存,但未部署到生产。
-Preparing deploy
-Deploying application
-Skipping a deployment with the s3 provider because a custom condition was not met
情况反过来也是一致的:
-Skipping a deployment with the s3 provider because this branch is not permitted: production
-Skipping a deployment with the s3 provider because a custom condition was not met
...
-Preparing deploy
-Deploying application
这在团队中引起了一些混乱,因为消息似乎是误报,表明部署在实际按预期运行时失败了。 我想做的是设置 Travis,以便它只运行适合该分支和环境变量组合的部署脚本。
有没有办法做到这一点?我的印象是这是有条件部署的方法。
如果无法阻止这两个部署作业 运行,是否有办法抑制作业日志中的消息传递?
最好的方法是使用 Travis 的阶段和作业功能。阶段是作业组。阶段 运行 内的作业并行进行。 运行 个阶段,一个接一个。整个阶段可以是有条件的,阶段也可以包含有条件的工作。阶段中的作业也可以是部署作业(即 travis.yml 中的整个 deploy:
可以嵌套在条件阶段中。对于您的目标来说最重要的是, 条件阶段及其包含的作业如果不满足条件。
这与您已有的标准 deploy:
矩阵非常不同。也就是说,您当前的部署步骤包含 2 个部署,因此您收到消息说它正在跳过一个部署。
相反,您可以将其更改为具有条件作业的单独部署阶段。
使用这样的阶段的缺点是每个阶段 运行 都在其自己的 VM 中,因此您无法从一个阶段到下一个阶段共享数据。 (即来自先前阶段的构建工件不会传播到后续阶段)。例如,您可以通过 S3 共享冗长编译阶段的构建结果来解决这个问题。
可在此处找到更多信息: https://docs.travis-ci.com/user/build-stages
我的 github 中有一个工作示例:https://github.com/brianonn/travis-test
jobs:
include:
- stage: compile
script: bash scripts/compile.sh
- stage: test
script: bash scripts/test.sh
- stage: deploy-staging
if: branch = staging
name: "Deploy to staging S3"
script: skip
deploy:
provider: script
script: bash scripts/deploy.sh staging
on:
branch: staging
condition: $TRAVIS_BRANCH = staging
- stage: deploy-prod
if: branch = production
name: "Deploy to production S3"
script: skip
deploy:
provider: script
script: bash scripts/deploy.sh production
on:
branch: production
condition: $TRAVIS_BRANCH = production
这会生成一个特定于暂存和生产的 Travis 作业日志: