이름을 넣고 맨 밑 copy from에 이전에 했던 jen_pipeline_github_ex를 넣어준다.

밑에 2212 → 2213으로 블루그린 스크립트가 있는 주소로 바꿔준 후 저장을 누른다.

빌드를 누르고 터미널에서 버전 조회 api를 호출한다.
while true; do curl http://192.168.56.30:32213/version; sleep 1; echo ''; done;

빌드가 되기전에는 에러메세지가 나오다가 빌드가 되면 v1이 호출 된다.
젠킨스 에서 수동배포 시작을 누르게 되면

쿠버네티스 대시보드에서 v2가 만들어지고

파드가 생성이 되면 v1과 v2가 동시에 존재하고 되고
curl http://192.168.56.30:32223/version
명령어를 실행하면 v2버전이 호출되는걸 볼 수 있다.
이때 사용자들은 v1을 이용하지만 개발자는 변경된 v2 버전을 미리 테스트 해볼 수 있게 된다.
테스트 후 문제가 없으면 green 전환 버튼의 yes를 누르게 되면

트래픽이 v1에서 v2로 가게 된다.

만일 문제가 생겨 다시 v1으로 돌아가야 된다면

롤백버튼을 누르면 다시 v2에서 v1으로 돌아가게 된다.

새로운 아이템 만들기 copy from에 저번에 만들었던 아이템 추가

새로운 스크립트가 있는 2213 → 2214로 변경

지금 빌드를 누르게 되면 파이프라인이 생성되는데 자동배포 yes를 누르게 되면

그린배포가 실행이 되고

v2로 트래픽이 바뀌게 되면서 블루배포를 삭제하게 된다.

배포 리소스 설명
- Green deploy 생성
- green 파드에서 ready 상태 확인
- service의 selector를 2로 변경하여 green으로 변경
- blue deploy 삭제 및 관련 리소스 레이블 정보 변경
pipeline {
agent any
environment {
~~~~~
}
stage('자동배포 시작') {
steps {
input message: '자동배포 시작', ok: "Yes"
}
}
//1번 설명
stage('쿠버네티스 Green배포') {
steps {
sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/green/deployment.yaml"
}
}
//2번 설명 true true = ready상태 확인
stage('Green 배포 확인중') {
steps {
script {
def returnValue
while (returnValue != "true true"){
returnValue = sh(returnStdout: true, encoding: 'UTF-8', script: "kubectl get -n anotherclass-221 pods -l instance='api-tester-2214',blue-green-no='2' -o jsonpath='{.items[*].status.containerStatuses[*].ready}'")
echo "${returnValue}"
sleep 5
}
}
}
}
//3번 service의 blue-green-no를 변경하는 부분
stage('Green 전환 완료') {
steps {
sh "kubectl patch -n anotherclass-221 svc api-tester-2214 -p '{\"spec\": {\"selector\": {\"blue-green-no\": \"2\"}}}'"
}
}
//4번 삭제하는 부분
stage('Blue 삭제') {
steps {
sh "kubectl delete -f ./${CLASS_NUM}/deploy/k8s/blue/deployment.yaml"
sh "kubectl patch -n anotherclass-221 svc api-tester-2214 -p '{\"metadata\": {\"labels\": {\"version\": \"2.0.0\"}}}'"
sh "kubectl patch -n anotherclass-221 cm api-tester-2214-properties -p '{\"metadata\": {\"labels\": {\"version\": \"2.0.0\"}}}'"
sh "kubectl patch -n anotherclass-221 secret api-tester-2214-postgresql -p '{\"metadata\": {\"labels\": {\"version\": \"2.0.0\"}}}'"
}
}
}
}
