티스토리 뷰
19 CI/CD Pipeline - Set Up a CI/CD Pipeline with a Jenkins Pod in Kubernetes (Part 2)
zerobig-k8s 2018. 9. 10. 07:43<출처>
이 시리즈의 Part 2는 Kr8sswordz Puzzle 애플리케이션을 동작시키는데 필요한 인프라의 마지막 조각을 쌓는 것이다.
Part 1에서 우리는 Docker Minikube 그리고 kubectl을 설치했다. 또한 빌드 프로세스를 테스트 해봤고 Hello-Kenzan 앱을 이용하여 이미지를 빌드하고 푸쉬하는 테스트도 했다.
시리즈의 모든 글을 읽어보자.
Set Up a CI/CD Pipeline with Kubernetes Part 1: Overview
Set Up a CI/CD Pipeline with a Jenkins Pod in Kubernetes (Part 2)
Run and Scale a Distributed Crossword Puzzle App with CI/CD on Kubernetes (Part 3)
Set Up CI/CD for a Distributed Crossword Puzzle App on Kubernetes (Part 4)
이번 글에서는, K8S에서 자체 파드로 Jenkins를 구동시켜 애플리케이션에 대한 지속적인 전달(체계)를 만들 것이다. Hello-Kenzan 이미지를 자동빌드하여, 레파지토리로 푸쉬하고 K8S 속으로 배포하는 Jenkins 2.0 파이프라인 스크립트을 이용하여 파이프라인을 생성할 것이다. 그렇다. 다른 파드를 이용하여 파드 레파지토리로부터 파드를 배포하려는 것이다. 말을 빙빙 돌려한 듯 들리겠지만, 일단 인프라와 애플리케이션 컴포넌트 모두를 K8S 위에서 가동 중인 상태로 만들게 되면, 그것들 모두 하나의 에코시스템이 되므로 관리가 수월해지게 된다.
혹자는 Part 1에서 공개해 보이기로 했던 Kr8sswordz 퍼즐 앱 동작시키기로 언제 되돌아 가는 것인지에 대해 물을지도 모르겠다. 좋은 질문이다! Part 2를 통해 Part 3 에서 Kr8sswordz 앱을 동작시키기 위해 필요한 인프라의 마지막 조각을 쌓게 되는 것이다.
Exercise 1: Creating and Building a Pipeline in Jenkins
시작하기 전에, Part 1을 통해 거쳐왔던 단계들에 대해 확인하고 싶을 것이다. 거기서 우리는 하나의 파드 내 동작하는 이미지 레파지토리를 설치했다. 앞서 Minikube 를 중지시켰다면, 다시 구동하는 것이 필요할 것이다. 다음 터미널 명령어를 입력하고 클러스터가 구동되기를 기다린다.
(원문의 "minikube start --memory 8000 --cpus 2 --kubernetes-version v1.6.0" 는 구동이 안 될것이다. 다음과 같이 "--kubernetes-version v1.10.0" 으로 변경하여 구동한다.)
1 2 3 4 5 6 7 8 9 10 11 | root@zerobig-vm-u:~# minikube start --memory 8000 --cpus 2 --kubernetes-version v1.10.0 Starting local Kubernetes v1.10.0 cluster... Starting VM... Getting VM IP address... Moving files into cluster... Setting up certs... Connecting to cluster... Setting up kubeconfig... Starting cluster components... Kubectl is now configured to use the cluster. Loading cached images from config file. | cs |
클러스터 상태를 확인하고 모든 파드를 확인해 보고 싶다면, 다음명령을 수행해본다.
1 2 3 4 5 | root@zerobig-vm-u:~# kubectl cluster-info Kubernetes master is running at https://192.168.99.100:8443 KubeDNS is running at https://192.168.99.100:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. | cs |
(다음과 같이 STATUS가 Running 상태에 이르는데 수분이 소요될 수 있다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | root@zerobig-vm-u:~# kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE default hello-kenzan-95cf9ff98-sj4fz 1/1 Running 1 1d default nginx-768979984b-p6hl2 1/1 Running 1 1d default registry-95c457bdb-hcvsd 2/2 Running 2 1d kube-system default-http-backend-59868b7dd6-b9rqt 1/1 Running 1 1d kube-system etcd-minikube 1/1 Running 0 1m kube-system heapster-vpztx 1/1 Running 1 1d kube-system influxdb-grafana-84vm6 2/2 Running 2 1d kube-system kube-addon-manager-minikube 1/1 Running 1 1d kube-system kube-apiserver-minikube 1/1 Running 0 1m kube-system kube-controller-manager-minikube 1/1 Running 0 1m kube-system kube-dns-86f4d74b45-cqpr4 3/3 Running 4 1d kube-system kube-proxy-66nvj 1/1 Running 0 1m kube-system kube-scheduler-minikube 1/1 Running 0 1m kube-system kubernetes-dashboard-5498ccf677-dcbwc 1/1 Running 3 1d kube-system nginx-ingress-controller-5984b97644-n8lmr 1/1 Running 2 1d kube-system storage-provisioner 1/1 Running 3 1d | cs |
다음 터미널 명령으로 Part 2를 위한 대화형 튜토리얼을 시작해보자.
(먼저 각자 상황에 맞게 "kubernetes-ci-cd" 디렉토리로 이동한다.)
1 2 | root@zerobig-vm-u:~# cd /home/study/k8s/kubernetes-ci-cd/ | cs |
1 2 3 4 5 6 7 | root@zerobig-vm-u:/home/study/k8s/kubernetes-ci-cd# npm run part2 > kubernetes-ci-cd@1.0.0 part2 /home/study/k8s/kubernetes-ci-cd > node start.js part2.yml ? Welcome to the Linux.com interactive Kubernetes tutorial by Kenzan. Press enter to begin (Y/n) | cs |
아래 명령을 타이핑 할 필요가 없음을 상기하자. -- 각 단계에서 엔터만 치면 스크립트가 그 명령을 대신 입력해 줄 것이다!
1. 자동화된 CI/CD 파이프라인을 생성하기 위해 사용할 Jenkins를 설치한다. 처리되어 준비하는데 약 1,2분 소요될 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Part 2 Step: 1 Install Jenkins, which we’ll use to create our automated CI/CD pipeline. It will take the pod a minute or two to roll out. kubectl apply -f manifests/jenkins.yml; kubectl rollout status deployment/jenkins Press enter to run the above command for the step. Yes persistentvolume/jenkins created persistentvolumeclaim/jenkins-claim created service/jenkins created deployment.extensions/jenkins created Waiting for deployment spec update to be observed... Waiting for deployment "jenkins" rollout to finish: 0 out of 1 new replicas have been updated... Waiting for deployment "jenkins" rollout to finish: 0 of 1 updated replicas are available... deployment "jenkins" successfully rolled out | cs |
두번 째 터미널 창을 열고 다음 명령을 입력하여 모든 파드상태를 검사해 볼 수 있다. 이제 Jenkins에 대한 파드를 볼 수 있을 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | root@zerobig-vm-u:~# kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE default hello-kenzan-95cf9ff98-sj4fz 1/1 Running 1 1d default jenkins-c5d9b4944-mb6pk 1/1 Running 0 7m default nginx-768979984b-p6hl2 1/1 Running 1 1d default registry-95c457bdb-hcvsd 2/2 Running 2 1d kube-system default-http-backend-59868b7dd6-b9rqt 1/1 Running 1 1d kube-system etcd-minikube 1/1 Running 0 31m kube-system heapster-vpztx 1/1 Running 1 1d kube-system influxdb-grafana-84vm6 2/2 Running 2 1d kube-system kube-addon-manager-minikube 1/1 Running 1 1d kube-system kube-apiserver-minikube 1/1 Running 0 31m kube-system kube-controller-manager-minikube 1/1 Running 0 31m kube-system kube-dns-86f4d74b45-cqpr4 3/3 Running 4 1d kube-system kube-proxy-66nvj 1/1 Running 0 30m kube-system kube-scheduler-minikube 1/1 Running 0 31m kube-system kubernetes-dashboard-5498ccf677-dcbwc 1/1 Running 3 1d kube-system nginx-ingress-controller-5984b97644-n8lmr 1/1 Running 2 1d kube-system storage-provisioner 1/1 Running 3 1d | cs |
2. 웹 브라우져에서 Jenkins UI 를 오픈한다.
1 2 3 4 5 6 7 | Part 2 Step: 2 Open the Jenkins UI in a web browser. minikube service jenkins Press enter to run the above command for the step. Yes Opening kubernetes service default/jenkins in default browser... | cs |
3. Jenkins 관리자 패스워드를 전시하고 오른 쪽 클릭하여 복사하다. 스크립트가 종료될 수 있으니, 패스워드 복사를 위해 CTRL-C를 누르지 않도록 조심하자.
1 2 3 4 5 6 7 | Part 2 Step: 3 Display the Jenkins admin password with the following command, and right-click to copy it. IMPORTANT: BE CAREFUL NOT TO PRESS CTRL-C TO COPY THE PASSWORD AS THIS WILL STOP THE SCRIPT. kubectl exec -it `kubectl get pods --selector=app=jenkins --output=jsonpath={.items..metadata.name}` cat /root/.jenkins/secrets/initialAdminPassword Press enter to run the above command for the step. Yes bc55dd8ebe1e40acbb5b90a36537fd5d | cs |
4. 박스 내 Jenkins 관리자 패스워드를 붙여넣고 Continue 를 클릭한다. Install suggested plugins 을 클릭하고 처리가 완료되기를 기다린다.
1 2 3 4 5 6 | Part 2 Step: 4 Switch back to the Jenkins UI. Paste the Jenkins admin password in the box and click Continue. Click Install suggested plugins and wait for the process to complete. echo '' Press enter to run the above command for the step. Yes | cs |
Jenkins 플러그 인 설치 관련
원문의 Jenkins의 버전이 낮아(2.60.3) 플로그 인 설치가 정상적으로 완료되지 않았다. 이로 인해 파이프라인을 구성할 수가 없다.
Jenkins 관리를 선택하여 버전을 업그레이드 하는 것이 필요하다.
다음과 같이 정상적으로 업그레이드가 이루어졌으니, 계속 실습을 진행할 수 있다.
5. 관리용 사용자와 자격증명(credentials)을 생성하고 Save and Finish를 클릭한다. (반복적인 로그인이 필요하게 될 것이니, 이 credentials을 기억하자.) Start using Jenkins를 클릭한다.
1 2 3 4 5 6 | Part 2 Step: 5 Create an admin user and credentials, and click Save and Finish. (Make sure to remember these credentials as you will need them for repeated logins.) Click Start using Jenkins. echo '' Press enter to run the above command for the step. Yes | cs |
6. 이제 Hello-Kenzan 앱을 가지고 이용할 새로운 파이프라인을 생성하고 싶을 것이다. 좌측에서 "새로운 Item"을 클릭한다.
1 2 3 4 5 6 | Part 2 Step: 6 We now want to create a new pipeline for use with our Hello-Kenzan app. On the left, click New Item. Enter the item name as "Hello-Kenzan Pipeline", select Pipeline, and click OK. echo '' Press enter to run the above command for the step. Yes | cs |
Hello-Kenzan Pipeline 이라 아이템 이름을 입력하고, Pipeline을 선택하고 OK 를 클릭한다.
7. 아래 파이프라인 섹션에서, Definition을 Pipeline script from SCM으로 선택한다.
1 2 3 4 5 6 | Part 2 Step: 7 Under the Pipeline section at the bottom, change the Definition to be "Pipeline script from SCM". echo '' Press enter to run the above command for the step. Yes | cs |
8. SCM 을 Git으로 변경한다.
1 2 3 4 5 6 | Part 2 Step: 8 Change the SCM to Git. echo '' Press enter to run the above command for the step. Yes | cs |
9. Repository URL을 fork 했던 레피지토리의 URL로 변경한다. https://github.com/[Git User Name]/kubernetes-ci-cd 가 같은 형태가 될 것이다.
1 2 3 4 5 6 | Part 2 Step: 9 Change the Repository URL to be the URL of your forked Git repository, such as https://github.com/[GIT USERNAME]/kubernetes-ci-cd. Click Save. On the left, click Build Now to run the new pipeline. echo '' Press enter to run the above command for the step. Yes | cs |
저장 을 클릭한다. 좌측에 , 새로운 파이프라인을 동작시키기 위해 Build Now 를 클릭한다. 수 초이내 빌드, 푸쉬, 그리고 배포 단계를 통해 진구동되는 것을 볼 수 있어야 한다.
빌드 에러가 발생한다면,
첫 번째 빌드는 실패가 났다. 당황하지 말고 콘솔 출력부터 살펴본다.
User "system:serviceaccount:default:default" cannot get deployments.extensions in the namespace "default"
"default" 네임스페이스에 배포 권한이 없다는 내용으로 보여진다. 일단 튜토리얼 실습 진행을 위해 다음의 조치를 실시한다.
(이 부분의 근본적인 대책은 좀 더 Study가 필요하다. 더 나은 방법과 좋은 가이드가 있다면 공유를 부탁한다.)
1 2 3 4 5 6 | root@zerobig-vm-u:~# kubectl create clusterrolebinding permissive-binding \ > --clusterrole=cluster-admin \ > --user=admin \ > --user=kubelet \ > --group=system:serviceaccounts clusterrolebinding.rbac.authorization.k8s.io/permissive-binding created | cs |
(다행히 다음과 같이 정상 빌드가 이루어진다.)
10. 이제 Hello-Kenzan 애플리케이션을 확인해 본다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Part 2 Step: 10 Now view the Hello-Kenzan application. minikube service hello-kenzan Press enter to run the above command for the step. Yes Opening kubernetes service default/hello-kenzan in default browser... /usr/bin/xdg-open: 778: /usr/bin/xdg-open: www-browser: not found /usr/bin/xdg-open: 778: /usr/bin/xdg-open: links2: not found /usr/bin/xdg-open: 778: /usr/bin/xdg-open: elinks: not found /usr/bin/xdg-open: 778: /usr/bin/xdg-open: links: not found /usr/bin/xdg-open: 778: /usr/bin/xdg-open: lynx: not found /usr/bin/xdg-open: 778: /usr/bin/xdg-open: w3m: not found xdg-open: no method available for opening 'http://192.168.99.100:31740' | cs |
Exercise 2: Pushing Code Changes Through the Pipeline
지난 실습에서 행했던 작업 덕택으로, Jenkins 파이프라인이 올라가 구동 중이다. 이번 실습에서, K8S와 CI/CD 파이프라인으로 변경 코드를 푸쉬하고 배포하는 것이 얼마나 용이한 것인지에 대해 알게 될 것이다.
다시 튜토리얼로 되돌아 가기 전에, Hello-Kenzan 앱에서 index.html 을 변경해 보자. 그리고 Jenkins 빌드 프로세스 작업을 검증하기 위해 다시 빌드해보자. 하나의 터미널 창에서 수행중인 튜토리얼은 남겨두고, 새로운 터미널 창을 열어 다음을 따라 작업한다.
a. 텍스트 편집기로 ~/kubernetes-ci-cd/applications/hello-kenzan/index.html 을 연다.
1 2 | root@zerobig-vm-u:~# cd /home/study/k8s/kubernetes-ci-cd/applications/hello-kenzan/ root@zerobig-vm-u:/home/study/k8s/kubernetes-ci-cd/applications/hello-kenzan# nano index.html | cs |
b. 파일 마지막 부분에 다음 html(또는 좋아하는 임의의 html)을 추가한다. (팁: nano 에서 우클릭하여 Paste를 선택할 수 있다.)
1 2 3 4 5 6 | <p><h2 style="font-family:sans-serif">Hello from Kenzan! You've successfully bu$ <p style="font-family:sans-serif">The Hello-Kenzan app is a modified version of$ <img src="DockerFileEx.jpg"> <p style="font-family:sans-serif">For more from Kenzan, check out our <a href="http://http://zerobig-k8s.tistory.com//">blog</a>.</p> | cs |
c. Ctrl+X 를 눌러 파일을 종료한다. – 변경을 저장하는 프롬프트가 뜰 것이다.
d. Git repo에 변경된 파일을 커밋한다. (GitHub credentials을 입력해야 한다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | root@zerobig-vm-u:/home/study/k8s/kubernetes-ci-cd# git remote -v origin https://github.com/zer0big/kubernetes-ci-cd.git (fetch) origin https://github.com/zer0big/kubernetes-ci-cd.git (push) root@zerobig-vm-u:/home/study/k8s/kubernetes-ci-cd# git commit -am "Added message to index.html" 현재 브랜치 master 브랜치가 'origin/master'보다 1개 커밋만큼 앞에 있습니다. (로컬에 있는 커밋을 제출하려면 "git push"를 사용하십시오) 추적하지 않는 파일: minikube.ERROR minikube.INFO minikube.WARNING minikube.zerobig-vm-u.root.log.ERROR.20180906-225258.10366 minikube.zerobig-vm-u.root.log.INFO.20180906-223900.9594 minikube.zerobig-vm-u.root.log.INFO.20180906-225150.10366 minikube.zerobig-vm-u.root.log.INFO.20180906-225407.10876 minikube.zerobig-vm-u.root.log.INFO.20180906-230926.11737 minikube.zerobig-vm-u.root.log.INFO.20180907-075102.15069 minikube.zerobig-vm-u.root.log.INFO.20180907-080014.15723 minikube.zerobig-vm-u.root.log.INFO.20180907-080015.15748 minikube.zerobig-vm-u.root.log.INFO.20180907-081356.16583 minikube.zerobig-vm-u.root.log.INFO.20180907-083139.16908 minikube.zerobig-vm-u.root.log.INFO.20180907-084742.17491 minikube.zerobig-vm-u.root.log.INFO.20180907-085221.17706 minikube.zerobig-vm-u.root.log.INFO.20180907-085227.17744 minikube.zerobig-vm-u.root.log.INFO.20180907-085625.18123 minikube.zerobig-vm-u.root.log.INFO.20180908-114912.7075 minikube.zerobig-vm-u.root.log.INFO.20180908-133308.8157 minikube.zerobig-vm-u.root.log.INFO.20180908-134332.8447 minikube.zerobig-vm-u.root.log.WARNING.20180906-223900.9594 minikube.zerobig-vm-u.root.log.WARNING.20180906-225150.10366 minikube.zerobig-vm-u.root.log.WARNING.20180906-225407.10876 minikube.zerobig-vm-u.root.log.WARNING.20180906-230926.11737 minikube.zerobig-vm-u.root.log.WARNING.20180907-075102.15069 minikube.zerobig-vm-u.root.log.WARNING.20180907-080014.15723 커밋할 사항을 추가하지 않았지만 추적하지 않는 파일이 있습니다 root@zerobig-vm-u:/home/study/k8s/kubernetes-ci-cd# git push warning: push.default를 설정하지 않았습니다. 묵시적 값은 깃 2.0에서 'matching'에서 'simple'로 바뀌었습니다. 이 메시지를 표시하지 않고 과거의 동작을 유지하려면 다음과 같이 하십시오: git config --global push.default matching 이 메시지를 표시하지 않고 새 동작을 받아들이려면 다음과 같이 하십시오: git config --global push.default simple push.default가 'matching'으로 설정되면, 로컬 브랜치를 이미 같은 이름이 있는 리모트 브랜치로 푸시합니다. 깃 2.0부터 더 보수적인 'simple' 동작이 기본값입니다. 여기서는 현재 브랜치를 'git pull'에서 현재 브랜치를 업데이트할 때 사용하는 해당 리모트 브랜치로 푸시합니다. 더 자세한 정보는 'git help config'에서 'push.default' 설명을 보십시오. ('simple' 모드는 깃 1.7.11에 추가되었습니다. 과거 버전의 깃을 사용하게 되면 비슷한 'current' 모드를 사용하십시오.) Username for 'https://github.com': zer0big Password for 'https://zer0big@github.com': 오브젝트 개수 세는 중: 6, 완료. Delta compression using up to 4 threads. 오브젝트 압축하는 중: 100% (6/6), 완료. 오브젝트 쓰는 중: 100% (6/6), 603 bytes | 0 bytes/s, 완료. Total 6 (delta 5), reused 0 (delta 0) remote: Resolving deltas: 100% (5/5), completed with 5 local objects. To https://github.com/zer0big/kubernetes-ci-cd.git 553a954..a6ab982 master -> master | cs |
e. Jenkins UI에서, 다시 빌드를 수행하기 위해 Build Now 를 클릭한다.
html 파일 내 오타 발견!!
이 부분은 따라할 필요가 없다. 참고용으로만 확인한다.
빌드 이후 확인해 보니, html 파일 내 다음과 같은 오타를 발견하였다.
"check out our <a href="http://http://zerobig-k8s.tistory.com//">blog</a>.</p>"
이 부분을 정정하고, 내친김에 안내 문구도 다음과 같이 수정하려 한다.
1 2 3 4 5 6 | <p><h2 style="font-family:sans-serif">Hello from Kenzan! You've successfully bu$ <p style="font-family:sans-serif">The Hello-Kenzan app is a modified version of$ <img src="DockerFileEx.jpg"> <p style="font-family:sans-serif">Searching for Korean K8S Tutorial? check out zerobig's <a href="http://zerobig-k8s.tistory.com/">blog</a>.</p> | cs |
수정하였으니, 다시 Git에 반영한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | root@zerobig-vm-u:/home/study/k8s/kubernetes-ci-cd# git commit -am "Corrected message to index.html" [master fca8c7e] Corrected message to index.html 1 file changed, 2 insertions(+), 2 deletions(-) root@zerobig-vm-u:/home/study/k8s/kubernetes-ci-cd# git push warning: push.default를 설정하지 않았습니다. 묵시적 값은 깃 2.0에서 'matching'에서 'simple'로 바뀌었습니다. 이 메시지를 표시하지 않고 과거의 동작을 유지하려면 다음과 같이 하십시오: git config --global push.default matching 이 메시지를 표시하지 않고 새 동작을 받아들이려면 다음과 같이 하십시오: git config --global push.default simple push.default가 'matching'으로 설정되면, 로컬 브랜치를 이미 같은 이름이 있는 리모트 브랜치로 푸시합니다. 깃 2.0부터 더 보수적인 'simple' 동작이 기본값입니다. 여기서는 현재 브랜치를 'git pull'에서 현재 브랜치를 업데이트할 때 사용하는 해당 리모트 브랜치로 푸시합니다. 더 자세한 정보는 'git help config'에서 'push.default' 설명을 보십시오. ('simple' 모드는 깃 1.7.11에 추가되었습니다. 과거 버전의 깃을 사용하게 되면 비슷한 'current' 모드를 사용하십시오.) Username for 'https://github.com': zer0big Password for 'https://zer0big@github.com': 오브젝트 개수 세는 중: 5, 완료. Delta compression using up to 4 threads. 오브젝트 압축하는 중: 100% (5/5), 완료. 오브젝트 쓰는 중: 100% (5/5), 525 bytes | 0 bytes/s, 완료. Total 5 (delta 4), reused 0 (delta 0) remote: Resolving deltas: 100% (4/4), completed with 4 local objects. To https://github.com/zer0big/kubernetes-ci-cd.git a6ab982..fca8c7e master -> master | cs |
다음과 같이 원하는 내용으로 잘 적용되었다.
다시 Jenkins 빌드를 실시한다.
짱이다. 이제 대화형 튜토리얼로 되돌아 가자. 다음 단계를 시행하기 위해 엔터를 입력한다.
11. 업데이트된 Hello-Kenzan 애플리케이션을 확인해 본다. index.html에서 추가한 메시지를 볼 수 있어야 한다.(만약 안보인다면, Shift를 누른 상태에서 강제로 다시 로딩되도록 브라우져를 새로고침 한다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Part 2 Step: 11 Push a change to your fork. Run job again. View the changes. minikube service hello-kenzan Press enter to run the above command for the step. Yes Opening kubernetes service default/hello-kenzan in default browser... /usr/bin/xdg-open: 778: /usr/bin/xdg-open: www-browser: not found /usr/bin/xdg-open: 778: /usr/bin/xdg-open: links2: not found /usr/bin/xdg-open: 778: /usr/bin/xdg-open: elinks: not found /usr/bin/xdg-open: 778: /usr/bin/xdg-open: links: not found /usr/bin/xdg-open: 778: /usr/bin/xdg-open: lynx: not found /usr/bin/xdg-open: 778: /usr/bin/xdg-open: w3m: not found xdg-open: no method available for opening 'http://192.168.99.100:31740' complete | cs |
(다음과 같이, 원했던 내용의 결과를 얻게 되었다.)
이게 전부다! Git 레파지토리에서 최신 코드를 자동으로 가져오고, 클러스터에 컨테이너 이미지를 푸쉬해서파드에 배포하기 위해 성공정으로 파이프라인을 이용한 것이다. 한번의 클릭으로 모든 것이 동작했다 – 이것이 바로 CI/CD 파이프라인의 힘이다.
현재 Minikube에서 작업을 수행해왔다면, 다음 명령을 입력하여 클러스터를 계속 동작시킬 수도 있고 중지시킬 수도 있다.
Up Next
Part 2에서, 파드에 Jenkins를 동작시켜 CI/CD를 설치했고, 이제 Jenkins 파이프라인을 이용하여 이미지 레파지토리로부터 성공적으로 빌드, 푸쉬 그리고 배포하고 있다. 약속했던 Kr8sswordz Puzzle 앱을 동작시키고 빌드하기 위한 기초를 세웠다.
Part 3 과 4에서, 앱을 작동시켜 약속을 이행할 것이다. etcd로 캐싱하고 K8S API로 부하를 위해 앱을 스케일링 하는 것과 같은 특성들을 시연해 보일 것이다.