Я пытаюсь настроить конвейер для 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. Я бы предпочел видеть все в Дженкинс.
Какие варианты я вижу:
Забудьте о Codepipeline, используйте только команды из плагина AWS Steps для развертывания стеков тестирования и выполнения сквозных тестов с помощью сценариев.
Выполните Учебное пособие по четырехшаговому конвейеру AWS . Если я правильно понимаю, это решение потребует активного опроса SCM и перетаскивания кода в AWS.
Я что-то упустил?