이번년도를 시작하면서 하고싶었던 프로젝트들이 몇가지가 있다. 그 중에 하나가, 프로젝트 배포까지 끝마쳐 보는 거였는데, 이 기회에 배포에서 멈추는게 아니라 젠킨스든 다른 툴이든 뭐든 이용해서 빌드 및 배포 자동화를 시도해보는게 좋을 것 같았다.
그래서 고른게 젠킨스. 젠킨스는 사실상 CI/CD 에서 de facto, 사실상 표준인 상황이다.
사실상 표준인 프로그램을 사용함으로서 다양한 케이스의 응용과 오류 상황에 대한 대처, 오픈소스이지만 지금까지의 사용량에 따른 신뢰성 또한 확보할 수 있기 때문에 젠킨스를 사용해보기로 했다.
사용 환경은 OS Debian buster CPU AMD A4-4020 Memory 8 GB
리눅스에 자바 설치해서 젠킨스 인스턴스를 올리기는 싫으니, 도커를 이용해서 올려보자
일단 도커 설치와 도커 인스턴스와 공용으로 사용할 볼륨을 생성해 준다.
user@violoet~$ mkdir docker
user@violoet~$ mkdir docker/volumns
user@violoet~$ chmod -R 777 docker/volumns/
user@violoet~$ docker pull jenkins/jenkins:lts-jdk11
user@violoet~$ sudo docker run -d --name jenkins -p 8081:8080 -p 50000:50000 -v ~/docker/volumes/jenkins:/var/jenkins_home jenkins/jenkins:lts-jdk11
user@violoet~$ sudo ufw allow 8081
8080은 도커 접속을 위한 포트로, 호스트의 8081 포트로 들어오는 패킷을 도커 인스턴스의 8080포트로 포워딩 해주고, 50000번 포트는 젠킨스 확장을 위한 포트로, 차후에 사용할 일이 있을때 사용하도록 한다. 또한 8081 포트를 외부에서 접속할 것이기 때문에, 8081포트를 방화벽에서 열어준다.
그 다음, 로컬에서 작업하시는 분은 localhost:8081로, 외부에서 작업하시는 분들은 포트포워딩 등 필요한 일련의 작업을 한 후 xxx.xxx.xxx.xxx:8081로 접속한다.
그러면 다음과 같은 페이지가 나타난다.
)
(사진은 미리 캡쳐해놓지 못해서 퍼왔습니다출처)
docker의 경우, 컨테이너의 로그를 확인하면 금방 패스워드를 확인할 수 있다.
user@violoet~$ docker logs jenkins-docker
WARNING: All illegal access operations will be denied in a future release
2022-04-17 14:51:19.061+0000 [id=31] INFO jenkins.install.SetupWizard#init:
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
3e002261c79a466dacfc3&&&&&&&&&&
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
– 문자 몇개는 특수문자로 가렸어요!
이후 패스워드를 입력해주면, 다음과 같은 페이지로 넘어간다
)
우리는 아직 정확하게 뭘 해야할지 모르니… 추천으로!
그러면 이렇게 설치가 진행된다.
)
설치가 모두 완료되면, 다음과 같은 화면이 나타난다!
설치가 길었따. 이제 프로젝트 가져와서 자동으로 빌드를 실행해보자.
스프링 기반이고, 빌드 툴은 gradle을 사용할거다!

new item버튼을 누르면, 위 사진과 같은 화면이 나타난다. 사용할 이름은… 적당히 마음껏 적으시고, 우선은 프리스타일로 시작해보자
프로젝트 빌드에 대한 설명을 적고, 밑에 체크박스에서
밑에서 소스코드 관리 부분에서는, 우선 none이 아니라 git을 누르고, git 주소를 github에서 제공하는 링크를 복사해서 가져온다.
웹 후크를 통해서 깃에 푸쉬되는 이벤트를 캐치해서 자동으로 빌드 할 수 있도록 크리덴셜을 등록해 주자.
이 중에서 시크릿 텍스트로 설정하고, 웹 후크를 사용할 깃의 페이지로 이동하자. 이 프로젝트에서는 깃허브를 사용하고 있으니, 깃허브를 예시로 들겠다.
깃허브의 계정-> setting에 들어가면 다음과 같은 페이지가 나온다.
이 중에서 Developer setting의 Personal access token에 들어가서,
우선 만료 기한은 테스트를 위해서 만료되지 않게 설정하자.
그리고 아래의 체크박스에서 레포와 훅의 체크박스를 설정하면 키 값이 나온다.
이 값은 다시 확인할 수 없으니, 잘 복사해서 어딘가에 기록해놓도록 하자.
이전으로 돌아가서, 크리덴셜에 시크릿은 이전에 복사한 값을 넣고, ID는 깃허브의 아이디를 입력한다. 입력이 끝났다면, 크리덴셜 아래 테스트 커넥션 버튼을 눌러 잘 연결이 됐는지 확인해보도록 하자.
다음은 깃에서 가져올 브랜치를 설정하고,
add build step을 추가한 다음 이전에 설정하였던 gradle과, 빌드할 때 사용할 명령어를 입력한다.
나는 그래들 스크립트에 등록된 bootJar이라는 스크립트를 통해 배포용 빌드를 만들도록 하였기 떄문에, 다음과 같은 스크립트를 입력하였다.
이제 완료를 누르면 잘 설정하였다는 가정 하에 모든 빌드가 정상적으로 끝났다고 된다.
만세!