본문 바로가기

개발/Linux & DevOps

자체 진행한 도커 젠킨스 해커톤 후기 ㅎㅎ

사내 Devops 스터디

사내 스터디 5인이서 데브옵스 스터디를 진행했다.
강의와 책을 통해서 지식을 쌓은 우리는,
가시적인 결과를 만들기 위해 단합하여 해커톤을 진행하기로 했다.


해커톤 개요

목적 : 참가자 개인마다 도커 + 젠킨스 + 깃허브 프로젝트를 1개씩 구축한다.
요구사항 :

  1. git push 실행
  2. 깃허브에서 웹훅을 발송
  3. 젠킨스는 웹훅을 받아서 빌드를 실행
  4. 도커 이미지가 생성되며 배포 성공

git 프로젝트는 자신이 임의로 구성하면 된다.


내 프로젝트는

나는 과거에 만들었던 내 php 프로젝트를 dockerize 시키기로 했다.
php + db 연동이 되어 있었고,
이 기회에 둘 다 컨테이너로 띄워서
docker-compose 를 사용해봤다.


스펙은 아래와 같다.
php : 7.3
mysql : 5.7
os : ubuntu 18.04
vm : oracle cloud infrastructure (oci) free-tier
docker client : 20.10.20
docker engine : 20.10.20


시작은 지원금으로 든든한 저녁식사 !

모자이크 안된 사람이 접니다 호


작업 순서

  1. 도커를 먼저 깔아준다.
    sudo apt install docker
  2. 도커로 젠킨스를 깔아준다.
    주의할 점은, docker image jenkins는 만료됐다 ㄷㄷ
    jenkins/jenkins 로 해야한다.
  3. 적절한 옵션으로 호출해준다.
    설정파일은 유지되야하기 때문에, 볼륨 바인딩은 필수!
    docker run -p 8080:8080 -p 50000:50000 --name jenkins --rm -v ~/jenkins_home/:/var/jenkins_home jenkins/jenkins
  4. 젠킨스 세팅을 해준다.
    홈페이지로 들어가서 초기 비밀번호 입력, 플러그인 고르기 등등....
  5. 젠킨스 프로젝트 생성. 이때 git 프로젝트 정보와 로그인 정보를 입력한다.
    Repository URL : https://gogoonbuntu@github.com/gogoonbuntu/HelloDanal.git
  6. 깃허브 프로젝트 webhook 설정, 해당 정보로 젠킨스 프로젝트에 연동한다.

    여기까지가 젠킨스 - git 연동이다.
  7. 이제 프로젝트를 dockerize 해야한다.
    Dockerfile 을 작성해준다. (프로젝트 to docker image)
    docker-compose.yml 을 작성해준다. (image to container)

  8. 젠킨스 프로젝트 파이프라인 작성
    git pull, docker-compose build, docker push, deploy(docker-compose up -d)

  9. 완성! git push 로 작동 확인

 

열심히 진행중인 팀원들


결과

당일 내에 완성한 사람은 없었지만, 나를 포함한 대다수 인원이 지속적으로 프로젝트를 완성시켰다.
며칠 뒤 나름 내부에서 1등을 선정한 결과,
내 후임 친구가 선정되었다 (스프링 프로젝트, 젠킨스로 JUnit 테스트까지 파이프라인에 모두 포함시킴)


배운 점

  • cp 명령어 기본값은 덮어씌워버린다.
  • jenkins workspace 속 프로젝트 전체를 도커 바인딩한 볼륨으로 덮어쓸 때,
    cp -r dir1 dir2 를 하면, dir2/dir1 이 되버린다.
    cp dir1/* dir2 로 해야한다.
  • 도커로 띄운 jenkins는 파일 시스템이 완전 격리된 독립적 시스템이다.
    만약 파이프라인에서 cp 명령어를 쓴다면 이 점을 유의해야 한다...
  • docker-compose : 정리한 글
  • https://blog.betaman.kr/m/100  아주 잘 정리된 글

소감

강의를 들으면서 배워도 뭔가 시작할만한 계기가 없었는데,
이번 기회에 제대로 시작하게 되서 지금까지 즐겁게 작업하고 있고,
여태 배웠던 것들을 제대로 종합하여 적용해보고 있다.
빨리 완성시키고 운영 경험을 쌓을 필요가 있다!

반응형