
On-premise Java-based CI/CD Tools
- CI/CD 도구 중, 가장 오래되었다.
- 그로 인해 매우 다양한 plug-In이 있어 온갖 것에 붙을 수 있다는 장점.
- 조금 레거시한 기업은 Jenkins를 다수 사용한다.
차례
1. Jenkins가 JVM 위에서 구동하기에, Java를 설치해야한다.
2. Java 설치 후에 Jenkins를 설치한다.
3. 이후 Container 환경으로 설치하는 방법까지 소개한다.
다만, Java의 버전은 11을 더이상 지원하지 않으므로... 17 이상을 설치한다.
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null

sudo apt update
sudo apt install jenkins
아래의 명령을 입력해 Jenkins를 데몬 프로세스로 만듭니다.
sudo systemctl enable jenkins
그 다음 아래의 명령어로 Jenkins를 실행해봅시다.

sudo systemctl start jenkins
실행한 후, http://<컴퓨터 IP 주소>:8080 주소로 접속하면 아래와 같은 초기화면이 나타납니다.

Jenkins의 기본 포트 번호는 8080번입니다.
다른 서비스와 충돌이 날 수 있으므로 변경 방법을 소개
sudo systemctl edit jenkins
또는
sudo vi /usr/lib/systemd/system/jenkins.service

해당 설정을 변경하면 Jenkins Port 변경 가능

해당 경로에 비밀번호가 있으므로 파악 후 입력한다.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

입력 결과

처음이니까 기본 플러그인만 설치 시도 (Install suggested plugins 선택)

설치 중...

관리자 계정을 생성

외부 연결 주소 설정인데, 기본값으로 두고 끝내기

설치 및 설정 완료


원리만 간단하게 말하자면, Docker Container 안에 Docker를 설치하여 실행한다는 말이다.
Jenkins를 Docker In Docker(DinD) 환경에서 실행하는 이유는 주로
- 빌드 환경을 격리하고,
- 배포 파이프라인에서의 일관성 유지,
- 그리고 효율적인 CI/CD 파이프라인 구현을 위해서입니다.
docker run -d --name jenkins --hostname=jenkins \
--restart=on-failure \
-e TZ=Asia/Seoul \
-p 8080:8080 -p 50000:50000 \
-v ${HOME}/practice/key:/key \
-v ${HOME}/.jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
--network practice \
--user root \
jenkins/jenkins:lts-jdk17
Jenkins Docker Container내에서Docker가 실행 가능하도록Host의Docker환경과 연결한다.- 실습용으로
Jenkins Docker Container를Root 권한으로 실행
docker exec --user root -it jenkins apt-get update
docker exec --user root -it jenkins apt-get install -y docker.io
Jenkins Docker Container내부에Docker설치
docker commit jenkins jenkins/jenkins:my-version
- 지금까지 설정한 것을 향후에도 재사용 가능하도록 Jenkins image로 Commit
docker rm -f jenkins
docker run -d --name jenkins --hostname=jenkins \
--restart=on-failure \
-e TZ=Asia/Seoul \
-p 8080:8080 -p 50000:50000 \
-v ${HOME}/practice/key:/key \
-v ${HOME}/.jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
--network practice \
--user root \
jenkins/jenkins:my-version
- my-version 으로
Jenkins Docker Container재시작