Search
Duplicate
📒

[Jenkins] 01-2. Jenkins 설치 & 구조

상태
완료
수업
Jenkins
주제
기본개념
4 more properties
참고

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들을 저장하는 폴더