Можно ли таким образом интегрировать AWS Codepipeline и Jenkins? - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь настроить конвейер для 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');

                }
            }
        }
    }
}

Codepipeline:

{
    "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.

Я что-то упустил?

...