aws этап одобрения / проверки codepipeline не строит последний коммит, а строит каждый коммит - PullRequest
0 голосов
/ 25 октября 2018

У меня есть угловой сайт, который я строю с 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 голосов
/ 31 октября 2018

Я бы переместил действие «pushToProd», чтобы оно стало первым действием на стадии «Prod», и отключил бы переходы на стадию «Prod».Таким образом, даже несмотря на то, что у вас было 100 коммитов до нажатия на prod, вам нужно будет только включить этап перехода на 100-м коммите, и только последняя ревизия проходит через стадию prod и одобрить действие только для ревизии, которая поступает в производство.

0 голосов
/ 25 октября 2018

Ровно один активный конвейер может занять стадию.Когда выполнение конвейера, соответствующее C1, входит в стадию Approval, эта стадия блокируется до тех пор, пока вы не отклоните или не утвердите выполнение конвейера, и C2 будет ожидать стадию Approval (либо выполнение конвейера, соответствующее * 1005)* терпит неудачу или покидает сцену).Если вы хотите, чтобы более поздние сборки наверстывали упущенное, отклоните более раннюю сборку, ожидающую утверждения.

Поместить подготовительное действие и действие утверждения на одну и ту же стадию.Это позволяет вам утверждать именно то, что вы тестировали.В противном случае различные конвейерные исполнения могут занимать каждый этап, и вы не обязательно подтверждаете то, что тестировали.

Вот пример (на основе вашего примера), который объединяет этапы 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
...