Можно ли таким образом интегрировать AWS Codepipeline и Jenkins?

Я пытаюсь настроить конвейер для CI для проекта, который активно использует стек AWS. У нас уже есть серверы Bitbucket и Jenkins, поэтому в идеале я бы хотел избежать создания компонентов инфраструктуры с дублирующими функциями.

Что я хотел бы получить: Jenkins выполняет модульные / интеграционные тесты, создает артефакты, а затем запускает Codepipeline, который развертывает стеки CF и выполняет сквозные тесты. Мне удалось создать примитивный конвейер с комбинацией плагина шагов AWS , S3 и Codepipeline.

Jenkinsfile:

#!groovy

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building..'
                sh "mvn clean package"
            }
        }
        stage('S3upload') {
            steps {
                withAWS(region:'us-east-1',credentials:'JENKINS') {
                    s3Upload(bucket: 'somebucket', workingDir:'target', includePathPattern:'some.jar');

                }
            }
        }
    }
}

Кодовый конвейер:

{
    "pipeline": {
        "name": "SomePipeline",
        <...>
        ,
        "stages": [
            {
                "name": "Source",
                "actions": [
                    {
                        "name": "Source",
                        "actionTypeId": {
                            "category": "Source",
                            "owner": "AWS",
                            "provider": "S3",
                            "version": "1"
                        },
                        "runOrder": 1,
                        "configuration": {
                            "PollForSourceChanges": "false",
                            "S3Bucket": "somebucket",
                            "S3ObjectKey": "some.jar"
                        },
                        "outputArtifacts": [
                            {
                                "name": "SourceArtifact"
                            }
                        ],
                        "inputArtifacts": [],
                        "region": "us-east-1"
                    }
                ]
            },
            {
                "name": "DeployCognitoStack",
                "actions": [
                    {
                        "name": "DeployCognitoStack",
                        "actionTypeId": {
                            "category": "Deploy",
                            "owner": "AWS",
                            "provider": "CloudFormation",
                            "version": "1"
                        },
                        "runOrder": 1,
                        "configuration": {
                            "ActionMode": "CREATE_UPDATE",
                            "Capabilities": "CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND",
                            "RoleArn": "arn:aws:iam::*:role/CloudFormationRole",
                            "StackName": "cognitostacktest",
                            "TemplatePath": "SourceArtifact::cognito-stack.yaml"
                        },
                        "outputArtifacts": [],
                        "inputArtifacts": [
                            {
                                "name": "SourceArtifact"
                            }
                        ],
                        "region": "us-east-1"
                    }
                ]
            },
            {
                "name": "DeployLambdaStack",
                "actions": [
                    {
                        "name": "DeployLambdaStack",
                        "actionTypeId": {
                            "category": "Deploy",
                            "owner": "AWS",
                            "provider": "CloudFormation",
                            "version": "1"
                        },
                        "runOrder": 1,
                        "configuration": {
                            "ActionMode": "CREATE_UPDATE",
                            "Capabilities": "CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND",
                            "RoleArn": "arn:aws:iam::*:role/CloudFormationRole",
                            "StackName": "lambdatest",
                            "TemplatePath": "SourceArtifact::lambda-stack.yaml"
                        },
                        "outputArtifacts": [],
                        "inputArtifacts": [
                            {
                                "name": "SourceArtifact"
                            }
                        ],
                        "region": "us-east-1"
                    }
                ]
            },
            <here should be test stage>
        ],
        "version": 5
    }
}

Что мне не нравится, так это то, что мне нужно отдельно смотреть на результаты выполнения задания Jenkins и результаты выполнения Codepipeline. Я бы предпочел все видеть в Дженкинсе.

Какие варианты я вижу:

  1. Забудьте о Codepipeline, используйте только команды из плагина AWS Steps для развертывания тестовых стеков и выполнения сквозных тестов с помощью скриптов.

  2. Следуйте четырехэтапному руководству по конвейеру AWS. Если я правильно понимаю, это решение потребует активного опроса SCM и загрузки кода в AWS.

Я что-то упускаю?


person quietbird    schedule 05.06.2019    source источник


Ответы (1)


Поскольку теперь CodePipeline имеет прямую поддержку облака Bitbucket [1], а также поддерживает jenkins как настраиваемую стадию напрямую [2], вы можете настроить CodePipeline, который будет использовать bitbucket как исходную стадию, а действия jenkins как часть стадии, чтобы мы по-прежнему могли использовать jenkins за все тестирование, и как только jenkis добьются успеха, мы можем продолжить и выполнить развертывание в CloudFormation.

[1] https://aws.amazon.com/about-aws/whats-new/2019/12/aws-codepipeline-now-supports-atlassian-bitbucket-cloud/

[2] https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-four-stage-pipeline.html.

person Jatin    schedule 19.02.2020