#java #amazon-web-services #docker #gradle #aws-code-deploy
#java #amazon-веб-сервисы #docker #gradle #aws-code-deploy
Вопрос:
В настоящее время я с нетерпением жду переноса моего собственного проекта на AWS, и я уже загрузил его в CodeCommit. Следующий шаг — использовать CodePipeline amp; CodeBuild для целей сборки и тестирования.
У меня есть простые микросервисы, написанные на Java с этим build.gradle
buildscript {
repositories {
mavenCentral()
gradlePluginPortal()
}
dependencies {
classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.1.1.RELEASE'
classpath 'com.bmuschko:gradle-docker-plugin:4.2.0'
}
}
apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'com.bmuschko.docker-spring-boot-application'
compileJava {
sourceCompatibility = 11
targetCompatibility = 11
}
group 'com.polubentcev.messenger'
version '1.0'
docker {
springBootApplication {
baseImage = 'openjdk:11-jre-slim'
}
}
repositories {
mavenLocal()
mavenCentral()
jcenter()
}
def messengerVersion = '1.0'
def springBootVersion = '2.1.2.RELEASE'
dependencies {
compile 'com.polubentcev.messenger:messenger-util-model:' messengerVersion
compile 'org.springframework.boot:spring-boot-starter-web:' springBootVersion
compile 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:2.1.0.RELEASE'
compile 'org.springframework.cloud:spring-cloud-starter-config:2.1.0.RELEASE'
compile 'org.springframework.boot:spring-boot-starter-data-jpa:' springBootVersion
compile 'org.springframework.boot:spring-boot-starter-security:' springBootVersion
compile 'org.springframework.kafka:spring-kafka:2.2.3.RELEASE'
compile 'org.springframework.cloud:spring-cloud-starter-oauth2:2.1.0.RELEASE'
compile 'org.springframework.security.oauth:spring-security-oauth2:2.3.4.RELEASE'
compile 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.2.RELEASE'
compile 'org.postgresql:postgresql:42.2.5'
compileOnly 'org.projectlombok:lombok:1.18.4'
annotationProcessor 'org.projectlombok:lombok:1.18.4'
testCompile 'org.springframework.boot:spring-boot-starter-test:' springBootVersion
}
Я хотел бы иметь buildspec.yml
файл для CodeDeploy, чтобы запускать модульные тесты и создавать из него образ docker.
У кого-нибудь есть подобный опыт и он может помочь мне создать файл?
Ответ №1:
Вот файл buildspec.yml, который я использовал в одном проекте для сборки и отправки образа Docker в ECR:
version: 0.2
phases:
pre_build:
commands:
- $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
- COMMIT_HASH="$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)"
- IMAGE_TAG="${COMMIT_HASH:=latest}"
- printenv
build:
commands:
- docker build -f infrastructure/Dockerfile -t $REPOSITORY_URI:latest .
- docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
commands:
- docker push $REPOSITORY_URI:latest
- docker push $REPOSITORY_URI:$IMAGE_TAG
- export IMAGE_NAME='projectName'
- export IMAGE_URI=$REPOSITORY_URI:$IMAGE_TAG
- "printf '[{"name":"%s","imageUri":"%s"}]' "$IMAGE_NAME" "$IMAGE_URI" > imagedefinitions.json"
artifacts:
files:
- imagedefinitions.json
Я надеюсь, что это поможет вам начать. Очевидно, вам нужно будет изменить его в соответствии с вашими потребностями. Проверьте синтаксис buildspec, если хотите добавить больше этапов.
Я использую aws/codebuild/docker:17.09.0
изображение для проекта CodeBuild. Я передаю $REPOSITORY_URI
переменную окружения из моего CodePipeline. Это выглядит примерно так 123456789012.dkr.ecr.us-east-1.amazonaws.com/projectName
.
imagedefinitions.json затем используется на более поздних этапах CodePipeline для развертывания образа в Fargate.