Jenkins pipeline을 통한 AWS Elastic Beanstalk 에 배포하기 샘플
21 Feb 2019 | Jenkins Git Maven AWS Elastic Beanstalk필자 본인이 기억하기 위한 용도로 짧게 작성하였다.
pipeline 에 대한 대략적인 내용 참고 : https://www.youtube.com/watch?v=56jtwSrNvrs
사전 준비되어 있는 부분
- Github 사용.
- jenkins 2.x 이상이 필요하며 파이프라인 플러그인 설치가 필요하다.
- Elastic Beanstalk로 환경구성이 이미 되어 있다고 가정한다.
1. Jenkins 새로운 아이템 선택.
2. Jenkins 에서 아이템 네임 입력 후 Pipeline 선택.
3. General 탭에서 깃헙 프로젝트 선택 후 프로젝트 url 입력.
4. Build Trigger 탭에서 언제 빌드가 되게 할 것인지 선택
Github hook trigger GITSem polling을 선택함.
5. Pipeline 설정.
5.1. Repositories 에 URL 및 계정 추가.
5.2. 레포지토리의 branch 선택
ex) */master
5.3. 실행될 파이프라인 스크립트 경로 설정.
이 프로젝트에선 프로젝트 root 경로에 Jenkinsfile 이름의 파일에 스크립트를 지정하였다.
6. Jenkinsfile 스크립트 작성 후 git commit 후 push
6.1. 환경관련 이미지 참고용
-
s3 버킷명 (여기선 S3버킷이름으로 표시)
-
Beanstalk 어플리케이션이름 및 환경이름 참고 (해당 경로에 있는 이름대로 아래 스크립트에 포함시키면 된다.)
6.2. 작성한 Jenkinsfile 스크립트 파일
pipeline {
agent any
environment {
// Slack configuration
SLACK_COLOR_DANGER = '#E01563'
SLACK_COLOR_INFO = '#6ECADC'
SLACK_COLOR_WARNING = '#FFC300'
SLACK_COLOR_GOOD = '#3EB991'
} // environment
stages {
// WAR 파일로 빌드 (테스트 부분 스킵..)
stage('Build War') {
steps {
sh 'pwd'
sh 'mvn -B -DskipTests clean package'
}
}
stage('Test') {
steps {
echo 'Testing'
}
}
// S3에 먼저 업로드 후 Deploy 진행
stage('Upload S3') {
steps {
echo 'Uploading'
sh 'aws s3 cp /var/lib/jenkins/workspace/프로젝트명/target/프로젝트.war s3://S3버킷이름/${JOB_NAME}-${GIT_BRANCH}-${BUILD_NUMBER}.war \
--acl public-read-write \
--region ap-northeast-2' //서울리전
}
}
stage('Deploy') {
steps {
echo 'Deploying'
sh 'aws elasticbeanstalk create-application-version \
--region ap-northeast-2 \
--application-name 어플리케이션이름 \
--version-label ${JOB_NAME}-${BUILD_NUMBER} \
--description ${BUILD_TAG} \
--source-bundle S3Bucket="S3버킷이름",S3Key="${JOB_NAME}-${GIT_BRANCH}-${BUILD_NUMBER}.war"'
sh 'aws elasticbeanstalk update-environment \
--region ap-northeast-2 \
--environment-name 환경이름 \
--version-label ${JOB_NAME}-${BUILD_NUMBER}'
}
}
}
post {
always {
echo 'This will always run'
}
// 성공 시 슬랙 #tickets 채널에 성공 메세지 보내기
success {
echo 'This will run only if successful'
echo 'Pushing EBS'
slackSend (color: "${env.SLACK_COLOR_GOOD}",
channel: "#tickets",
message: "*SUCCESS:* Job ${env.JOB_NAME} build ${env.BUILD_NUMBER} by ${env.USER_ID}\n More info at: ${env.BUILD_URL}")
}
// 실패 시 슬랙 #tickets 채널에 성공 메세지 보내기
failure {
echo 'This will run only if failed'
//슬랙 #tickets 채널에 실패 메세지 보내기
slackSend (color: "${env.SLACK_COLOR_DANGER}",
channel: "#tickets",
message: "*FAILED:* Job ${env.JOB_NAME} build ${env.BUILD_NUMBER} by ${env.USER_ID}\n More info at: ${env.BUILD_URL}")
}
unstable {
echo 'This will run only if the run was marked as unstable'
}
changed {
echo 'This will run only if the state of the Pipeline has changed'
echo 'For example, if the Pipeline was previously failing but is now successful'
}
}
}
Comments