728x90
pipeline {
// 스테이지 별로 다른 거
// 어떤 노예를 쓸 것인가
agent any
triggers {
pollSCM('*/3 * * * *')
}
environment {
AWS_ACCESS_KEY_ID = credentials('awsAccessKeyId')
AWS_SECRET_ACCESS_KEY = credentials('awsSecretAccessKey')
AWS_DEFAULT_REGION = 'ap-northeast-2'
HOME = '.' // Avoid npm root owned
}
stages {
// 레포지토리를 다운로드 받음
stage('Prepare') {
agent any
steps {
echo 'Pulling Repository'
git url: 'https://github.com/kim-jingyu/temp',
branch: 'master',
credentialsId: 'gittest'
}
post {
// If Maven was able to run the tests, even if some of the test
// failed, record the test results and archive the jar file.
success {
echo 'Successfully Pulled Repository'
}
always {
echo "i tried..."
}
cleanup {
echo "after all other post condition"
}
}
}
stage('Only for production'){
when {
branch 'production'
environment name: 'APP_ENV', value: 'prod'
anyOf {
environment name: 'DEPLOY_TO', value: 'production'
environment name: 'DEPLOY_TO', value: 'staging'
}
}
}
// aws s3 에 파일을 올림
stage('Deploy Frontend') {
steps {
echo 'Deploying Frontend'
// 프론트엔드 디렉토리의 정적파일들을 S3 에 올림, 이 전에 반드시 EC2 instance profile 을 등록해야함.
dir ('./website'){
sh '''
aws s3 sync ./ s3://namhoontest
'''
}
}
post {
// If Maven was able to run the tests, even if some of the test
// failed, record the test results and archive the jar file.
success {
echo 'Successfully Cloned Repository'
mail to: 'frontalnh@gmail.com',
subject: "Deploy Frontend Success",
body: "Successfully deployed frontend!"
}
failure {
echo 'I failed :('
mail to: 'frontalnh@gmail.com',
subject: "Failed Pipelinee",
body: "Something is wrong with deploy frontend"
}
}
}
stage('Lint Backend') {
// Docker plugin and Docker Pipeline 두개를 깔아야 사용가능!
agent {
docker {
image 'node:latest'
}
}
steps {
dir ('./server'){
sh '''
npm install&&
npm run lint
'''
}
}
}
stage('Test Backend') {
agent {
docker {
image 'node:latest'
}
}
steps {
echo 'Test Backend'
dir ('./server'){
sh '''
npm install
npm run test
'''
}
}
}
stage('Bulid Backend') {
agent any
steps {
echo 'Build Backend'
dir ('./server'){
sh """
docker build . -t server --build-arg env=${PROD}
"""
}
}
post {
failure {
error 'This pipeline stops here...'
}
}
}
stage('Deploy Backend') {
agent any
steps {
echo 'Build Backend'
dir ('./server'){
sh '''
docker rm -f $(docker ps -aq)
docker run -p 80:80 -d server
'''
}
}
post {
success {
mail to: 'frontalnh@gmail.com',
subject: "Deploy Success",
body: "Successfully deployed!"
}
}
}
}
}
젠킨스에서 내 구글 이메일로 알림 메시지 설정은 시스템 설정 -> E-mail Notification 을 설정하면 된다.
도커 사용을 위한 플러그인 설치
그리고 ec2 서버에 docker를 깔아주고, docker를 사용할 수 있게 해준 후, 실행해준다.
$ sudo usermod -aG docker $USER
$ sudo usermod -aG docker jenkins
$ sudo systemctl start docker
이제 create new item을 하여 pipeline script에 작성한 스크립트 파일을 넣어준다. 물론 git 으로 관리도 가능하다.
728x90
'Tech > CI CD' 카테고리의 다른 글
EC2에 젠킨스 설치하기 (0) | 2023.07.23 |
---|---|
Jenkins를 활용한 CI/CD (0) | 2023.07.23 |