AWS Codepipeline批准/审核阶段不是建立最新的提交,而是建立每个提交

时间:2018-10-24 21:55:03

标签: amazon-web-services aws-code-deploy aws-codepipeline aws-codebuild

我有一个用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),而不是仅构建最新的提交:(

2 个答案:

答案 0 :(得分:0)

恰好一个活动的管道执行可以占据一个阶段。当与C1对应的管道执行进入Approval阶段时,该阶段将被锁定,直到您拒绝或批准管道执行,并且C2将等待Approval阶段( C1对应的管道执行失败或退出阶段)。如果您希望以后的版本赶上来,请拒绝等待批准的早期版本。

您应将登台操作和批准操作置于同一阶段。这使您可以完全批准所测试的内容。否则,不同的流水线执行可能会占据每个阶段,并且您不一定要批准所测试的内容。

这是一个结合了DevApproval阶段的示例(基于您的示例):

    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次提交上启用阶段转换,并且只有最新的修订版才在生产阶段运行,并且仅批准即将投入生产的修订版的操作。