CI/CD 그대로 따라하기 4편

강재민·2022년 6월 9일
0

ansible 가상머신에 docker 설치

ansible 터미널로 오셔서..

https://velog.io/@repush/Docker-%EC%84%A4%EC%B9%98%ED%95%98%EB%8A%94%EB%B2%95
도커 설치하는 법..

위 링크를 마무리하고나서 아래 명령어를 실행시켜보자.

docker ps

다음과 같은 결과가 나오면 정상적으로 설치가 된것이다.


ansible 가상머신에 ansible 설치

sudo apt install -y ansible

ansible 에서 docker vm ssh 연결

ssh-keygen									#그냥 엔터 계속 치면 된다
ssh-copy-id vagrant@192.168.59.12			# yes 하고 비밀번호는 vagrant
ssh-copy-id vagrant@192.168.59.13			# yes 하고 비밀번호는 vagrant

ansible 인벤토리파일 만들기

vi .ansible.cfg

아래 파일을 복사해서 붙여넣어주면 된다.
이제는 혼자서 하실 수 있겠죠..?

[defaults]
inventory = hosts.ini
vi hosts.ini

아래 내용을 붙여넣어주면 된다.

[ansible_host]
192.168.59.13

[docker_host]
192.168.59.12
ansible all -m ping

아래 사진과 같이 나오면 성공


Jenkins에 ansible ssh추가하기

크롬에 192.168.59.10:8080주소로 들어가서

대쉬보드에서 왼쪽에 Jenkins관리클릭

왼쪽에 시스템 설정 클릭

스크롤 맨 아래로 내려서 추가 클릭

이런 화면이 나오는데

아래 사진과 표 참고해서 채워주시고

항목설정값
Nameansible-host
Hostname192.168.59.13
Usernamevagrant

오른쪽 아래 고급버튼 클릭

User password authentication, or use a different key 왼쪽에 있는 체크박스 활성화

활성화 하면 스크롤이 자동으로 내려갈겁니다 스크롤 다시 올려서 해당 항목 찾아주세요
Passphase / Password 에는 vagrant라고 써주시거나 붙여넣어주시면 됩니다.

스크롤 가장 아래로 내려서 Tes Configuration 클릭

Success나오면 성공한겁니다.

apply클릭하고 저장 클릭


github 본인 리포지토리에 플레이북 추가하기

jenkins 터미널로 오셔서..
Git 리포지토리랑 연결되어있는 디렉토리로 오셔서 작업하실겁니다.

mkdir playbook
cd playbook
vi docker_build_and_push.yaml

아래 내용 붙여넣어주시면 됩니다

- name: Docker Image Build
  hosts: ansible_host
  gather_facts: false
  
  tasks:
    - command: docker image build -t java-hello-world java-hello-world/
cd ..
git add .
git commit -m 'make Playbook'
cat ~/.ssh/token
git push				#계정 이름 입력하시고 비밀번호는 토큰값 넣어주시면 됩니다.

아래 사진과 같이 나오면 성공

본인 레포지토리에도 playbook이 추가 되었을 겁니다.


Jenkins에서 프로젝트 만들기

크롬에 192.168.59.10:8080주소로 들어가거나
또는 왼쪽 위에 Dashboard 버튼으로 대쉬보드로 들어갑니다.

왼쪽 메뉴바에 새로운 Item을 클릭해서 새로운 프로젝트를 만들어보자.

이름은 build-image-and-deploy-with-ansible로 하고 Mavenproject 클릭하고 OK클릭해준다.

Git활성화시켜주고 본인 git 주소 넣으시면 됩니다 ~

master를 main으로 바꿔주시고

clean package 넣어주시고

맨 아래로 스크롤 내려서 빌드 후 조치 추가클릭

Send build artifacts over SSH클릭

이렇게 Name에 ansible-host잘 나오는거 확인

아래에 이렇게 나오실텐데

아래 사진과 표를 참고해서 채워주세요

항목설정값
Source fileswebapp/target/webapp.war
Remove prefixwebapp/target/
Remote directoryjava-hello-world

Add Transfer Set 클릭

이런게 하나 더 나오게 된다.

아래 사진과 표를 참고해서 붙여넣어주고

항목설정값
Source filesdocker/Dockerfile
Remove prefixdocker/
Remote directoryjava-hello-world

Add Transfer Set 클릭

이런게 하나 더 나오게 된다.

아래 사진과 표를 참고해서 붙여넣어주세요

항목설정값
Source filesplaybook/docker_build_and_push.yaml
Remove prefixplaybook
Remote directoryjava-hello-world
Exec commandansible-playbook java-hello-world/docker_build_and_push.yaml

Apply누르고 저장클릭

왼쪽 메뉴바에서 Build Now 클릭

ansible 터미널로 가셔서.. 아래 사진과 같이 나오면 성공

docker images


멱등성 해결하기

= 빌드나우 여러 번 해도 정상적으로 작동하게 만들기
다시 jenkins 터미널로 와서..
깃허브랑 연결된 디렉토리로 다시 와보자

cd playbook
vi docker_build_and_push.yaml

아래 내용대로 만들어주시면 됩니다.
편집기에서 dd 계속 누르시면 삭제 편하게 하실 수 있고 아래 내용 붙여넣으시면 됩니다.

- name: Docker Image Build
  hosts: ansible_host
  gather_facts: false
  
  tasks:
    - command: docker image build -t java-hello-world java-hello-world/
    - command: docker container rm -f java-hello-world
      ignore_errors: yes
    - command: docker container run --name java-hello-world -d -p 8080:8080 java-hello-world
git add .
git commit -m 'Modify Playbook'
cat ~/.ssh/token
git push					#이제 하시는 방법 알겠죠..?

본인 레포지토리 가셔서 잘 바뀌었는지 확인 가능하십니다.

다시 젠킨스로 돌아가셔서..

Build Now 클릭 해보시면

다시 엔서블 터미널로 오셔서..

docker ps

했을 때 아래처럼 잘 나오고

curl localhost:8080/webapp/

했을 때 아래처럼 나오면 성공


도커 계정의 token 받아오기

오른쪽에 계정을 눌러서 Account Settings클릭

왼쪽 메뉴에서 Security클릭

New Access Token클릭

for jenkins고 입력하고 Generate클릭

토큰 복사하고

Jenkins 터미널로 오셔서..

vi ~/.ssh/token-for-docker

하고 편집기에 해당 토큰 붙여넣고 esc :wq

cat ~/.ssh/token-for-docker

했을 때 토큰값이 잘 나오면 성공


docker 레지스트리에 자동으로 업로드하기

Jenkins 대쉬보드로 와서..

build-image-and-deploy-with-ansible 이름 클릭

구성클릭

이 빌드는 매개변수가 있습니다 왼쪽의 체크박스 활성화

매개변수 추가 클릭

Password Parameter클릭

매개변수 명은 PASS Default Value에는 아까 받은 토큰값 붙여넣으시면 됩니다.
토큰 받는 명령어는 jenkins 터미널창에서 cat ~/.ssh/token-for-docker

스크롤 맨 아래로 내리셔서

아래 사진처럼 수정하시면 됩니다!

PASS=`echo $PASS` ansible-playbook java-hello-world/docker_build_and_push.yaml

Apply누르시고 저장


Git에 새로운 playbook push하기

그리고 이제 Git에 새로운 ansible playbook을 수정해줄건데요

시작하기 전에 본인 도커 계정이름과 repository 이름 확인해주세요

jenkins 터미널에 git과 연동된 디렉토리로 오셔서..

cd playbook
vi docker_build_and_push.yaml

아래 내용대로 완선하시면 됩니다.
이전 내용 제거하시려면 d 누르고 계시면 편하게 지울 수 있습니다.

###########		 본인docker계정이름
### 주의 ###		본인docker레포지토리 이름
###########		꼭 확인해주세요 !!! 복붙하시고 수정 꼭 하셔야합니다.

- name: Docker Image Build and Push
  hosts: ansible_host
  gather_facts: false

  tasks:
    - command: docker image build -t repush/cicdproject java-hello-world/
    - command: docker login -u repush -p "{{ lookup('env', 'PASS') }}"
    - command: docker push repush/cicdproject
    - command: docker logout

- name: Docker Run
  hosts: docker_host
  gather_facts: false
  
  tasks:
    - command: docker container rm -f java-hello-world
      ignore_errors: yes
    - command: docker container run -d -p 8080:8080 --name java-hello-world repush/cicdproject
git add .
git commit -m 'Modify 3rd Playbook'
cat ~/.ssh/token
git push				#이제 git push 하는거는 아시겠죠..?

docker 명령어 설치

docker 가상머신의 터미널로 와서..

docker 명령어를 실행시키기 위한 패키지를 설치해주어야합니다.
아래 명령어 실행해주세요

sudo apt install -y python3-pip
sudo pip3 install docker

프로젝트 실행해보기

젠킨스 홈페이지로 와서..
Maven project build-image-and-deploy-with-ansible
이라는 프로젝트로 들어가신다음에
왼쪽 메뉴에서
Build with Parameters를 클릭해주세요

바로 다음 나오는 페이지에서도 빌드하기 클릭


검증해보기

docker 가상머신 터미널로 오셔서..

docker ps
docker images

docker hub의 본인 리포지토리를 보시면..

이미지가 추가된 것을 확인할 수 있고
다시 docker 가상머신 터미널로 오셔서..

curl localhost:8080
curl localhost:8080/webapp/

하시면 아래와같은 결과를 확인하실 수 있습니다.

확인 다 하셨으면 성공


docker container 비우기

docker rm -f `docker ps -a -q`
docker ps

0개의 댓글