Jenkins(Mac m1) 17 CI/CD 자동화 프로세스 만들기
ansible서버에 yml파일 생성
[root@4c58ae1e9b26 ~]# vi create-cicd-project-image-playbook.yml
[root@4c58ae1e9b26 ~]# cat create-cicd-project-image-playbook.yml
- hosts: all
# become: true
tasks:
- name: create a docker image with deployed waf file
command: docker build -t kdhdaehyun/cicd-project-ansible .
args:
chdir: /root
- name: push the image on Docker Hub
command: docker push kdhdaehyun/cicd-project-ansible
- name: remove the docker image from the ansible server
command: docker rmi kdhdaehyun/cicd-project-ansible
ignore_errors: yes
나의 dockerhub계정명을 넣어주셔야합니다 kdhdaehyun자리에
ansible서버의 Dockerfile
[root@4c58ae1e9b26 ~]# cat Dockerfile
FROM tomcat:9.0
LABEL org.opencontainers.image.authors="edowon0623@gmail.com"
COPY ./hello-world.war /usr/local/tomcat/webapps
kubernetes서버 (내pc의) 의 목록
➜ ~ kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29h
위와같이 kubernetes서버만 남기고 모두 삭제
실행전 docker login으로 로그인이 안되어있다면 로그인해줍시다.
현재 ansible서버의 images입니다. 위 yml에서 push할 kdhdaehyun/cicd-project-ansible 있어야함
자신의 이름태그 붙이는법
- docker tag cicd-project-ansible [본인 docker 계정]/cicd-project-ansible
cicd-project-ansible은 여기서가져오자 없다면
docker pull edowon0623/cicd-project-ansible:latest
jenkins에서 새로운 item생성
item이름 My-K8s-Project-for-CI
참조는 My-K8s-Project-using-Ansible
모든설정 그대로에 Exec command만 위와같이 설정
빌드 시작하게되면 에러가 발생하게되는데
unstable상태로 완료되어서 터미널에서 명령을 직접 실행해봤습니다.
업로드가 성공적으로 완료되었고 도커허브사이트에도 몇초전 생성되었다고 확인
빌드전 My-K8s-Proejct-Using-Ansible에서 Poll SCM을 꺼주도록합시다.
확인됬다면 빌드 후 조치 추가해주기
이전에 완성해놨던 My-K8s-Project-Using-Ansible 프로젝트를 끝난후에 실행하도록 설정하고 저장한뒤 빌드해봅시다.
빌드가 성공이라고 확인될것이고 현재 실행한 item My-K8s-Project-for-CI 실행되고 My-K8s-proeject-Using-Ansible도 실행되었을것이니 빌드 시간을확인해보면 같이 실행된것을 확인할 수 있다.
그렇다 이제 Poll SCM으로 자동 빌드가 되게되어있으니 코드를 수정하고 수정됨에 따라 잘 CI/CD가 되는지 확인해보겠습니다.
나의 github사이트에 index 즉 표시될 페이지를 수정하고 commit를 해보니 알아서 빌드가 되는모습이다.
그러나 kubectl 로 kubernetes에 잘 생성되었는지 확인했는데 13분전에 만들었다고 표시되어있다 즉 새로 만들어지지 않았다는 뜻이된다 yml파일을 수정해보자.
ansible서버의 yml파일을 밑과같이 수정해줍시다 vi를 이용해서
[root@4c58ae1e9b26 ~]# cat k8s-cicd-deployment-playbook.yml
- name: Create pods using deployment
hosts: kubernetes
# become: true
# user: ubuntu
tasks:
- name: delete the previous deployment
command: /usr/local/bin/kubectl delete deployment.apps/cicd-deployment
ignore_errors: yes
- name: create a deployment
command: /usr/local/bin/kubectl apply -f /Users/daehyunkim/cicd-devops-deployment.yml
delete문을 추가해주고 만약 delete할때 해당 파일이없으면 에러가 발생할 수 있으니 ignore_errors로 예외처리를 해줍시다.
다시 github에 commit를 하게되면 잘 생성되고 수정한대로 localhost:32000/hello-world/들어가보면 수정한대로 잘 배포된 모습을 확인하자.