참고
Jenkins 소개 및 설치
NOTE
Jenkins는 CI/CD 작업에 있어서 시스템의 자동화 파이프라인 또는 Work flow 를 설계하는데 사용되는 도구이다.
젠킨스 주요 활용처( 빌드/배포, 배치 작업)
•
Jenkins는 Java가 실행될 수 있는 환경에서는 어디서든 실행가능하며 싱글 바이너리(Jenkins.war)기반 실행을 한다.
•
GIT뿐 아니라 대부분의 SCM을 사용할 수 있다.
•
Jenkinsfile이라는 DSL스크립트를 통해 빌드 스텝을 코드로 관리할 수 있다.
•
빌드 부하 분산 또는 다양한 빌드 환경 지원을 위해 다수개의 빌드 에이전트 연동(멀티노드)이 가능하다.
•
하나의 프로젝트를 다양한 환경 구성에 따라 여러번 빌드가 가능하다.
Vagrant_API_Version="2"
Vagrant.configure(Vagrant_API_Version) do |config|
# 새 노드 추가: jenkins
config.vm.define "jenkins" do |cfg|
cfg.vm.box = "generic/ubuntu2004"
cfg.vm.provider :virtualbox do |vb|
vb.name = "jenkins"
vb.cpus = 2
vb.memory = 4096
end
cfg.vm.hostname = "jenkins"
cfg.vm.synced_folder ".", "/vagrant"
cfg.vm.network "private_network", ip: "192.168.32.13"
cfg.vm.network "forwarded_port", guest: 22, host: 50022, auto_correct: false, id: "ssh"
cfg.vm.network "forwarded_port", guest: 80, host: 50080
cfg.vm.network "forwarded_port", guest: 8080, host: 58080
cfg.vm.network "forwarded_port", guest: 8088, host: 58088
cfg.vm.provision "shell", path: "sshd_config.sh"
end
end
Ruby
복사
vagrant 코드(실습환경 가상머신)
# 도커 설치
sudo apt update
sudo apt install docker.io -y
# 도커 설치확인 & 권한부여
sudo systemctl status docker
sudo chmod 666 /var/run/docker.sock
Bash
복사
# 자바 설치
sudo apt update
sudo apt install openjdk-17-jdk -y
java -version
# 자바 환경변수 설정
sudo vi /etc/environment
JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
source /etc/environment
echo $JAVA_HOME
Bash
복사
•
Jenkins는 기본적으로 Java 11, Java 17만 지원하며 Java 8을 사용하기 위해서는 Docker를 활용하거나 과거버전을 실행해야 한다.
젠킨스 스탠다드(로컬) 설치
NOTE
# 젠킨스 바이너리 설치
mkdir ~/practice/
cd ~/practice
curl -OL https://get.jenkins.io/war-stable/2.401.1/jenkins.war
# 젠킨스 시작
java -jar jenkins.war --httpPort=8080
cat /home/admin/.jenkins/secrets/initialAdminPassword # 패스워드 확인(최초 설치시에도 등장)
# (선택) - 젠킨스 홈 등록(해당 값이 변경되면 재설치가 됨)
export JENKINS_HOME=~/practice/jenkins_home # 젠킨스 변경후 재시작(export 환경변수 등록)
java -jar jenkins.war --httpPort=8080 # 다시 설치하는것처럼 됨(홈이 바뀌어서)
unset JENKINS_HOME # 환경변수 삭제(다시 원래 환경으로 돌아옴)
curl http://localhost:8080/restart # 젠킨스 재시작(브라우저에서 쳐도됨)
Bash
복사
젠킨스 도커 설치
NOTE
공식 이미지
docker pull jenkins/jenkins
PowerShell
복사
이미지 다운로드
# Jenkins 설치(11버전)
docker run -d \
-p 8080:8080 -p 50000:50000 \
--name jenkins-server \
--restart=on-failure \
jenkins/jenkins:lts-jdk11
# 컨테이너 접속
docker exec -it jenkins-server bash
PowerShell
복사
Jenkins 설치 1(단순 설치)
# 키값 생성, 도커 네트워크
# 키 값은 ./pracite/key 경로에 private.key, publck.key 2개저장
docker run --rm -it \
--entrypoint /keygen.sh linuxserver/openssh-server
docker network create practice
# 일반 실행(docker in docker)
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 \
--network practice \
--user root jenkins/jenkins:lts-jdk17
cat ~/.jenkins/secrets/initialAdminPassword # 패스워드 출력
# 지금까지 설정한 것을 향후에도 재사용 가능하도록 jenkins image 로 커밋
docker exec --user root -it jenkins apt-get update
docker exec --user root -it jenkins apt-get install -y docker.io
docker commit jenkins scofe/jenkins:latest
# 로컬의 젠킨스와 연결해서 사용 (이미지 저장해둬서 바로 써도됨)
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 scofe/jenkins:latest
Bash
복사
Jenkins 설치 2(내부에 도커를 설치한 이미지 생성)
젠킨스 폴더구조(workspace, jobs, ..)
NOTE
Jenkins는 현재 Jenkins의 상태를 XML 형태로 직렬화 하여 ${JENKINS_HOME} 폴더에 기록한다!
실제 경로에 있는 폴더들
workspcae
•
Job별 소스 코드를 체크아웃하고, 빌드를 수행하는 폴더
•
JENKINS 멀티 노드 환경에서는 workspcae폴더가 agent에 생성되어 빌드된다.
Jobs
•
config.xml: job 구성 사항이 저장되어 있음
•
nextBuildNumber: 다음 빌드번호가 지정되어 있다. (수정하고 싶다면 변경후 젠킨스 재시작)
•
builds: 빌드별 번호가 등록 (디스크가 모자라면 빌드적절히 삭제)
userContent
실제 출력
•
해당 폴더에 파일을 위치시키면 외부에서 접근가능하다.
•
http://[jenkins host]/userContent/[파일명]
war / users/ secrets
•
war 폴더: Jenkins.war의 압축을 풀어놓은 폴더
•
users 폴더: 유저별 이메일 등의 유저 정보를 보관하는 폴더
•
secrets 폴더: Jenkins 내부에서 사용하는 각종 secrets들을 저장하는 폴더