본문 바로가기
IT 잡지식/DevOps

[Jenkins+Ansible] Jenkins에 Ansible 연동하기

by 쯀리♥️ 2023. 9. 22.

 

안녕하세요, 쯀리입니다.

오늘은 Jenkins에서 Ansible을 연동해보겠습니다.

 


 

SSH 설정

Jenkins 서버에서 ansible 서버로 SSH 연결이 되는지 확인 해보겠습니다.

 

Jenkins-server : 172.17.0.2

 

ansible-server : 172.17.0.4

더보기

password : P@ssw0rd

 

잘 연결이 됩니다. 

 

Jenkins에서 SSH를 연결해주겠습니다.

우선 Plugins가 잘 설치되어있는지 확인해보겠습니다.

 

Dashboard > Jenkins 관리 > Plugins

Publish Over SSH

 

 

 

Dashboard > Jenkins 관리 > System

 

Publish over SSH > SSH Servers 추가

 

Name : ansible-server

Hostname : 172.17.0.4(내 Ansible서버의 IP주소)

 

Use Password authentiaction, or use a different key 를 체크해줍니다.

 

밑에 Test Configuration을 눌러보았을때 Success가 뜨면 성공입니다.


Ansible Test 프로젝트 생성

war파일을 복사해서 ansible 서버에 복사해서 

다른 서버에 playbook을 사용해서 배포할 수 있도록 해보겠습니다. 

 

 

소스코드 관리

Git > Repository 에서 내 깃허브와 연동해주겠습니다.

 

 

아래에 빌드 후 조치 추가

 Send build artifacts over SSH

 

SSH publishers

Name : ansible server

 

Source files

target/*.war => 모든 war파일을 복사하겠다

 

Remove prefix : target
Remote directory : .

저장해보겠습니다. 

 

 

지금 빌드 해보겠습니다.

 

 

콘솔을 확인해보니 Success로 잘 찍히는 것을 확인 할 수 있습니다.


Ansible playbook으로 다른 서버에 배포

build 가 완료됐다면 ansible-server에 와르  파일이 들어갔는지 확인 해보겠습니다.

 

ls | grep hello-world.war

 

jenkins 서버에 연동할 playbook을 생성해보겠습니다.

vi jenkins-devops-playbook.yml

 

 

cicd-project-ansible이라는 이미지를 만들어주겠습니다.

 

- hosts: all
  tasks:
  - name: build a docker image with deployed war file
    command: docker build -t cicd-project-ansible .
    args: 
        chdir: /root

 

 

우선 빌드 전에 hosts파일에  현재 작업중인 ansible 서버에만 배포해보겠습니다.

간단하게 hosts 파일을 임의로 만들어주겠습니다.

 

hosts 파일이 생성이 되었다면 실행해보겠습니다. 

ansible-playbook -i [만들어준 임시 hosts파일] [내가 만든 playbook.yml]

 

 

Permission denied 에러 발생 시▼

더보기

 

 

아직 내 서버에 연동하는 것은 ssh가 연동이 안되어있기 때문에 key를 추가해줍니다.

 

 다시 playbook 실행 : ansible-playbook -i testhosts jenkins-devops-playbooks.yml

 

 

docker images가 생긴 것을 확인해보겠습니다.  


이미지를 이용해서 Container 생성

jenkins-devops-playbook.yml 파일 수정 

- hosts: all
#   become: true

  tasks:
  - name: build a docker image with deployed war file
    command: docker build -t cicd-project-ansible if Dockerfile .
    args:
        chdir: /root

  - name: create a container using cicd-project-ansible image
    command: docker run -d --name my_cicd_project -p 8080:8080 cicd-project-ansible

 

ansible-playbook -i testhosts jenkins-devops-playbooks.yml

 

컨테이너가 잘 생성되었는지 확인해보겠습니다. 

docker ps -a

 

우선 image와 container를 삭제해주고 

다시 jenkins로 돌아가서 ansible-playbook을 실행하도록 설정해주겠습니다.

 

ansible-playbook -i testhosts jenkins-devops-playbooks.yml

 

이미지 삭제 + war파일 이름변경

 

저장을 하고 빌드해보겠습니다.

 

 


빌드 할때마다 이미지와 컨테이너를 삭제해줘야하는게 불편한데, 

 

Playbook을 수정해보겠습니다.

- hosts: all
#   become: true  

  tasks:
  - name: stop current running container
    command: docker stop my_cicd_project
    ignore_errors: yes

  - name: remove stopped cotainer
    command: docker rm my_cicd_project
    ignore_errors: yes

  - name: remove current docker image
    command: docker rmi cicd-project-ansible
    ignore_errors: yes

  - name: build a docker image with deployed war file
    command: docker build -t cicd-project-ansible .
    args: 
        chdir: /root

  - name: create a container using cicd-project-ansible image
    command: docker run -d --name my_cicd_project -p 8080:8080 cicd-project-ansible

 

 

다시한번 빌드해보겠습니다.

 

8081서버로 접근해 보겠습니다.

 


참조

'IT 잡지식 > DevOps' 카테고리의 다른 글

[Docker] React + Nginx  (0) 2023.11.09
Ubuntu 22.04 Docker 설치  (0) 2023.10.29
[Ansible] Ansible Playbook  (0) 2023.09.21
[Ansible] Ansible 의 기본 명령어  (0) 2023.09.20
[Jenkins] IaC & Ansible 의 이해  (0) 2023.09.19