CI CD/JenKins

Jenkins(Mac m1) 17 CI/CD 자동화 프로세스 만들기

svdjcuwg4638 2023. 6. 30. 10:47

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/들어가보면 수정한대로 잘 배포된 모습을 확인하자.