我有一个用ng build
构建的角度站点。
我的管道如下所示:source code -> Build -> Staging -> Approval -> Prod
我有一个问题,如果将2个提交推送到仓库中,例如,提交1(c1)和提交2(c2),则批准步骤的行为如下:
它将批准c1,这将进入Prod阶段,在该阶段我们进行另一个ng build --prod
这样的构建(以最小化js文件),然后批准阶段将自动为C2启动第二个构建。
Expected behavior
:
在这种情况下,我希望批准只会获取最新的提交,比方说C2是最新的,并且只能构建C2,因为C1被C2取代了。
这是我的批准阶段在模板中的样子:
Stages:
- Name: Source
Actions:
- Name: Source
ActionTypeId:
Category: Source
Owner: AWS
Version: 1
Provider: CodeCommit
Configuration:
RepositoryName: !Ref ProjectName
BranchName: master
OutputArtifacts:
- Name: checkout
RunOrder: 1
RoleArn:someRole
- Name: Dev
Actions:
-
Name: staging
ActionTypeId:
Category: Build
Owner: AWS
Version: 1
Provider: CodeBuild
Configuration:
ProjectName: !Ref CodeBuildProject
RunOrder: 1
InputArtifacts:
- Name: checkout
OutputArtifacts:
- Name: buildOutput
- Name: Approval
Actions:
-
InputArtifacts: []
Name: pushToProd
ActionTypeId:
Category: Approval
Owner: AWS
Version: '1'
Provider: Manual
OutputArtifacts: []
Configuration:
NotificationArn: arn:aws:sns:us-east-1:########:myApprovalTopic
ExternalEntityLink: http://myWebsite.s3-website-us-east-1.amazonaws.com/index.html
CustomData: Approving changes to Prod
RunOrder: 1
- Name: Prod
Actions:
-
Name: Prod
ActionTypeId:
Category: Build
Owner: AWS
Version: 1
Provider: CodeBuild
Configuration:
ProjectName: !Ref CodeBuildProd
RunOrder: 1
InputArtifacts:
- Name: checkout
OutputArtifacts:
- Name: OutputArtifactsProd
任何人都知道为什么我的批准阶段不会选择最新的提交,而是仅在单击该批准/审阅按钮后才构建为仅PROD吗?而是将提交排队,然后单击批准按钮,它会构建所有排队的提交(在这种情况下为C1和C2),而不是仅构建最新的提交:(
答案 0 :(得分:0)
恰好一个活动的管道执行可以占据一个阶段。当与C1
对应的管道执行进入Approval
阶段时,该阶段将被锁定,直到您拒绝或批准管道执行,并且C2
将等待Approval
阶段( C1
对应的管道执行失败或退出阶段)。如果您希望以后的版本赶上来,请拒绝等待批准的早期版本。
您应将登台操作和批准操作置于同一阶段。这使您可以完全批准所测试的内容。否则,不同的流水线执行可能会占据每个阶段,并且您不一定要批准所测试的内容。
这是一个结合了Dev
和Approval
阶段的示例(基于您的示例):
Stages:
- Name: Source
Actions:
- Name: Source
ActionTypeId:
Category: Source
Owner: AWS
Version: 1
Provider: CodeCommit
Configuration:
RepositoryName: !Ref ProjectName
BranchName: master
OutputArtifacts:
- Name: checkout
RunOrder: 1
RoleArn:someRole
- Name: Dev
Actions:
-
Name: staging
ActionTypeId:
Category: Build
Owner: AWS
Version: 1
Provider: CodeBuild
Configuration:
ProjectName: !Ref CodeBuildProject
RunOrder: 1
InputArtifacts:
- Name: checkout
OutputArtifacts:
- Name: buildOutput
-
InputArtifacts: []
Name: pushToProd
ActionTypeId:
Category: Approval
Owner: AWS
Version: '1'
Provider: Manual
OutputArtifacts: []
Configuration:
NotificationArn: arn:aws:sns:us-east-1:########:myApprovalTopic
ExternalEntityLink: http://myWebsite.s3-website-us-east-1.amazonaws.com/index.html
CustomData: Approving changes to Prod
RunOrder: 2
- Name: Prod
Actions:
-
Name: Prod
ActionTypeId:
Category: Build
Owner: AWS
Version: 1
Provider: CodeBuild
Configuration:
ProjectName: !Ref CodeBuildProd
RunOrder: 1
InputArtifacts:
- Name: checkout
OutputArtifacts:
- Name: OutputArtifactsProd
答案 1 :(得分:0)
我将“ pushToProd”动作移到“ Prod”阶段的第一个动作 并禁用过渡到Prod阶段。 这样,即使在推送到生产之前您已经进行了100次提交,您只需要在第100次提交上启用阶段转换,并且只有最新的修订版才在生产阶段运行,并且仅批准即将投入生产的修订版的操作。