본문 바로가기
AyoProject/DevOps

[DevOps] 8. jenkins를 통한 GitHub 소스배포 및 Docker build, run 자동화(2) - 성공

by 청양호박이 2022. 4. 9.

지난 시간에 이어서 jenkins를 통한 GitHub소스를 자동으로 배포하고 해당 서버에서 Docker build 및 run을 자동화 해보겠습니다. 이번에는 성공한 케이스에 대해서 쭉 정리해서 말씀드리겠습니다. 중간에 똑같이 진행해 보시다가 잘 안되신다면 해당 글을 참조해주시면 되겠습니다. 혹시 해당 error에 없는 경우가 있다면 공유해주시면 같이 찾아보시죠~

2022.04.08 - [AyoProject/DevOps] - [DevOps] 7. jenkins를 통한 GitHub 소스배포 및 Docker build, run 자동화(1) - 실패 및 Error에 관한 정리

 

1. SpringBoot Project root 폴더에 Dockerfile 생성


project root폴더에 아래와 같이 Dockerfile을 생성해 줍니다. 그리고 git으로 commit해보겠습니다. 위의 1번 절차와 동일하기 때문에 신속하게 진행해 보겠습니다. git status로 상태를 보니 이전의 실패 케이스와는 다르게 1개 파일이  Untracked 됬다고 알려줍니다.

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        Dockerfile

nothing added to commit but untracked files present (use "git add" to track)

$ git add .

$ git commit -m "Dockerfile commit"
[master 4e9ad4f] Dockerfile commit
 1 file changed, 4 insertions(+)
 create mode 100644 Dockerfile

$ git push -u origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 390 bytes | 390.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/ssayoung/ayoteradockertest.git
   8e99698..4e9ad4f  master -> master
branch 'master' set up to track 'origin/master'.

GitHub에서 확인해보면 정상적으로 push가 된 것을 볼 수 있습니다. 이제는 jenkins에서 다시 build해보도록 하겠습니다. 

Dockerfile이 정상적으로 들어왔네요!!! 그럼 이제 jenkins의 Post Steps로 시도를 해보도록 하겠습니다.

 

2. jenkins Post Steps 사용하기


이제 jenkins에서 build이후 명령을 통해서 docker로 build 및 실행을 해보도록 하겠습니다. 그 작업을 위해서는 설정을 수정해 주어야 합니다. jenkins > Dashboard 에서 item name을 선택하면 아래의 그림과 같이 여러가지 메뉴가 나오는데 [구성]에 들어가서 설정을 변경합니다.

구성으로 들어가보면 기존에 jenkins에 item을 초기에 설정할때 보던 화면이 나옵니다. 여기서 Build옆에 위치하고있는 Post Steps를 선택해 줍니다. Post Steps에는 총 3가지 옵션을 제공합니다.

1) Run only if build succeeds - 빌드가 성공하면 실행
2) Run only if build succeeds or is unstable - 빌드가 성공하거나 불안정할 때 실행
3) Run regardless of build result - 빌드결과에 상관없이 실행

저는 Run only if build succeeds을 선택하고 [Add post-build step]을 눌러줍니다. 여기에도 아래와 같이 7개의 선택지를 주지만... 저는 Execute shell 로 선택하고 명령을 쭉 작성해 보겠습니다.

 


 

 


3. Docker 권한 조정


지금까지 도커와 관련된 명령어는 항상 sudo를 추가했습니다. 왜냐하면 도커는 항상 Root로 실행되기 때문에 사용자 권한으로 접속한 경우, 반드시  permission denied 가 발생하기 때문입니다. 이제 자동화를 해야하는 상황이 되어서 사용자를 docker 그룹에 추가하고자 합니다. 그렇게 되면 sudo를 사용하지 않고 가능하게 됩니다. 

갑자기 이제와서 docker의 권한을 조정하는 이유는 이후 자동화를 위한 Post Steps작업 시 문제가 발생하기 때문입니다 ㅎㅎㅎ

$ sudo usermod -aG docker [사용자]

이제 docker를 재시작해 줍니다. 아직 권한이 반영되기 전이기 때문에 sudo를 추가해 줍니다.

$ sudo service docker restart

그다음은 유저도 로그아웃하고 다시 로그인해줍니다!! 이제 docker ps도 퍼미션 제약없이 바로 확인이 가능합니다.

 

 

4. Docker build 및 run 자동화


이제 Post Steps에 전체단계 script를 추가하여 자동화 동작을 진행해 보겠습니다. 이제 할 절차는 다음과 같습니다.

1) Docker container가 중복되기 때문제 기존 container 삭제 (강제)
2) 신규 Maven build 된 jar파일을 가지고 Docker container 생성 및 실행

이를 명령으로 구현하면 아래와 같습니다.

cd /var/jenkins_home/workspace/ayotera_docker_test
cp Dockerfile target/
cd target
docker rm ayotest -f
docker run -d -p 8080:8080 --name ayotest ayoteralab-docker-test:0.0.1

이제 이전글에서 겪었던 error상황을 다 겪었으면, 아래와 같이 정상적으로 동작이 가능할 것 같습니다. jenkins web으로 들어가서 해당 item을 다시 build해줍니다. 자... 과연 아무런 문제없이 post steps가 실행되었을까요?? 두근두근

하아... 여러번의 build 실패 후 드디어 정상적으로 성공!!!

+ cd /var/jenkins_home/workspace/ayotera_docker_test
+ cp Dockerfile target/
+ cd target
+ docker rm ayotest -f
ayotest
+ docker run -d -p 8080:8080 --name ayotest ayoteralab-docker-test:0.0.1
4f174e8b1438a74871bb69fbe3f4c689b2f3fb14ef31f2f2e4f9bf1f515f27d3
Finished: SUCCESS

이 말은 ayotest docker container가 자동으로 build되고 실행도 되었다는 뜻 입니다. 그렇다면 docker ps로 현재 실행중인 container를 확인해 보고 localhost:8080으로 hello world가 보이는지 확인해 보겠습니다.

이거참 눈물이 앞을가리네요;; 이제 로컬에서 개발해서 GitHub에 반영 후 jenkins를 구동하면 자동으로 빌드 및 배포가 가능하도록 구성이 완료 되었습니다. 다음시간에 실제로 잘 되는지 확인해 보겠습니다.

 

- Ayotera Lab -

댓글