기간 | 230828 - 230831 |
배운 내용 | 젠킨스 |
◎ 젠킨스
1. 젠킨스란?
CI/CD 도구로, 소프트웨어 개발 프로세스의 빌드, 테스트, 배포 등을 자동화하고 관리할 수 있게 함.
소스코드 만들었을 때, 수정했을 때 바로 빌드할 수 있는 환경까지 자동으로 해 줌.
2. 젠킨스 파이프라인
-> 자동화 위해 필요
젠킨스 파일 작성해서 지속적인 빌드와 배포를 할 수 있게 해 줌
코드형식으로 작성하는 것
* 선언적 파이프라인 - 어떤 상태를 원한다는 것을 작성해 두는 형태
* 스크립팅된 파이프라인 - 초기방식. 하나하나 명령어 실행되도록 작성
깃에서 파일 가져오고 빌드하고 테스트하고 배포하도록 작성
- 키워드
1. pipeline : 전체적인 작업
2. node : 빌드작업하는 대상 지정(agent : 어떤 노드에서 작업하겠다 지정해 주는 부분.)
3. stage : 거기서 작업할 하나의 작업단위
4. step : 스테이지 안에 하나하나 설정해서 그 작업을 위해 필요한 동작들. 하나의 스테이지 안에는 하나 이상의 스텝 있음
stage : 깃에서 파일 가져오기
step : 그걸 위한 동작 하나하나. git clone, git pull 등등
pipeline script from scm
git 통해서 저장소에 있는 젠킨스 파일 가져와서 쓰겠다.
agent {label "abc"} -> label이 abc인 노드에서 실행하겠다
agent {docker {image "이미지이름"}}
agent {kubernetes {"yml 파일 내용/이름"}}
3. 서술적 파이프라인 지시문
- environment 지시문 - 파이프라인 내의 모든 단계에서 사용할 환경변수정의. 크리덴셜, 깃허브 주소 등등
* disableConcurrentBuilds : 파이프라인 동시 빌드 금지. 순서대로 하나씩 하겠다
* newContainerPerStage : 도커에서 단계마다 새로운 컨테이너 생성
* skipStages??unstable: 빌드상태불안정하면 단계 건너뜀
* retry : 파이프라인 재시도 횟수 지정. 이 횟수 지나면 포기
* timeout : 파이프라인 실행에 대한 타임아웃 지정
* timestsamps : 콘솔 출력에 시간정보추가
- triggers 지시문 - 파이프라인 자동실행할 트리거
* cron : 파이프라인이 트리거 돼야 하는 주기
-> triggers {cron(분시일월요일)} 요일은 1~5까지가 월~금
=> cron('H * /4 * * 1-5') -> 평일동안 4시간 간격으로
* pollSCM : 새 소스 변경사항이 있는지 확인하는 주기
H(ash)는 균일한 부하를 생성하기 위함
* upstream: 특정 파이프라인 잡이 실행되면 후속으로 파이프라인 잡을 실행할 수 있음(=선행작업이 실행되면 현재 작업도 실행하겠다.)
triggers{upstream(upstreamProjects: 'job1, job2', thresholdLhudson.model.Result.SUCCESS)} -> job1이 실행되면 job2도 실행하겠다.
* githubPush : 깃헙 저장소의 웹훅에 의해 트리거
웹훅 사전 설정 필요
triggers{githubPush()}
- tools 지시문 - 젠킨스의 글로벌 도구에서 정의된 도구를 파이프라인에서 사용할 도구로 명시
- when 지시문 - stage에서 step을 실행하기 위한 조건 정의. 조건 맞으면 작업하겠다.
4. 첫 번째 실습
◎ 초기 설정
① jenkins 가상머신 실행
vagrant up
vagrant ssh jenkins
② 자바설치
sudo apt update
sudo apt install openjdk-11-jdk
③ 젠킨스 설치
curl -fsSL https://pkg.jenkins.io/debian/jenkins.io-2023.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt update
sudo apt-get intall jenkins -y
④ http://192.168.56.11:8080/ 들어가서
첫 연결 시 sudo cat /var/lib/jenkins/secrets/initialAdminPassword로 초기 패스워드 확인 및 입력 후 설치
첫 연결이 아니라면 아이디 비번 입력
◎ 실습 1 - fileA.txt에 hello 저장하기
① 프로젝트 생성
새로운 아이템에서 freestyle project 생성 후
② 명령어 입력
configuration > execute shell에
echo "hello">>fileA.txt 입력 후 저장 & 빌드
③ 결과 확인
console output에서도 확인 가능하고
cd /var/lib/jenkins/workspace/first_project
하면 fileA.txt 생성된 것도 확인 가능
fileA.txt안에 hello 저장되어 있음
◎ 실습 2 - git clone 후 hello-world.war 파일 실행
① git 클론해오기
git clone https://github.com/Yejin-Moon/source-maven-java-spring-hello-webapp
cd source-maven-java-spring-hello-webapp
mvn package
② maven 프로젝트 생성하기
1) 로컬시스템에서 명령어로 패키지 설치
sudo apt install maven -y => 젠킨스에서 maven 사용 시 필수
2) 대시보드에서 작업
a) maven integration 플러그인 설치(대시보드 > 젠킨스관리 > 플러그인 설치 > availiable)
b) 환경변수 설정(대시보드> 젠킨스관리> tool)
- Jdk 설정항목
이름 : jdk-11
경로 : /usr/lib/jvm/java-11-openjdk-amd64/
- Maven 설정항목
이름 : mvn-3
경로 : /usr/share/maven
3) 프로젝트 생성
a) maven 프로젝트 선택
b) 소스코드 항목에서 깃저장소 주소 및 브랜치 main으로 지정
c) 빌드항목에서 pom.xml, clean package 입력
③ 톰캣인스턴스 접속
- 톰캣설정
1) 톰캣 패키지 설치
sudo apt update
sudo apt install tomcat9 tomcat9-admin
2) 설정파일 편집
sudo nano /etc/tomcat9/tomcat-users.xml
<tomcat-users>
<role rolename = "manager-gui"/>
<role rolename = "manager-script"/>
<role rolename = "manager-jmx"/>
<role rolename = "manager-status"/>
<user username = "admin" password="m8749627" roles="manager-gui, manager-script, manager-jmx, manager-status"/>
</tomcat-users>
3) 젠킨스와 8080 포트가 겹치므로 바꿔주기 -> 8088로
sudo nano /etc/tomcat9/server.xml
파일 안에서
<Connector port="8088" protocol="HTTP/1.1" 로 변경
후 sudo systemctl restart tomcat9
-> http://192.168.56.11:8088/ 접속 시 it works! 뜨면 톰캣 연결성공
④ 배포
1) 플러그인 설치
Deploy to container 설치(톰캣서버배포 시 사용)
2) credential 추가
Jenkins 관리 > 보안 > Credentials > global > add credential
xml에 설정한 유저네임과 패스워드 입력
id = 젠킨스 안에서 쓸 이름 아무거나
3) 프로젝트 생성
배포하려면 새 아이템 생성해서 빌드 후조치에서 Deploy war/ear to a container 선택
빌드되는 파일 이름 war files에 적어주기(hello-world.war)
container에서 톰캣 9.x remote 선택해서 credentials에서 아까 만든 거 선택
tomcat url엔 http://192.168.56.11:8088
http://192.168.56.11:8088/hello-world/ 하면 hello world 페이지 뜸
5. 두 번째 실습
◎ 젠킨스 파이프라인
1) 깃에 젠킨스파일 push
nano Jenkinsfile
git add .
git commit -m "create Jenkinsfile"
git push
(이때 pw입력 란에 access 키 입력)
2) 파이프라인 프로젝트 생성
pipeline script from scm에서 git 으로 설정하고
레포 주소, 브랜치 메인으로, jenkins file 있는 script path 지정하고
저장 & 빌드
◎ 첫 번째 실습을 파이프라인으로
sh 뒤에 사용할 명령어 작성
mvn 명령어에 테스트 포함. 따라서 'Test' 스테이지 필요 없음
deploy 부분 명령어 모르겠으면 코드 스니펫
(코드 스니펫은 configure > Pipeline 하단에 파란색 Pipeline Syntax에서 할 수 있음)
Jenkins파일:
pipeline {
agent any
stages {
stage('Chekcout') {
steps {
git branch: 'main',
url: 'https://github.com/Yejin-Moon/source-maven-java-spring-hello-webapp.git'
}
}
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Deploy') {
steps {
deploy adapters: [tomcat9(credentialsId: 'tomcat', path: '', url: 'http://192.168.56.11:8088')], contextPath: null, war: 'target/hello-world.war'
}
}
}
}
==> 첫번째 실습을 jenkins 파일로 빌드 자동화가능
'클라우드 스쿨 > 강의 정리' 카테고리의 다른 글
16주차 - 특강 (0) | 2023.12.05 |
---|---|
15주차 - 쿠버네티스, 특강 (0) | 2023.12.04 |
14주차 - 쿠버네티스 (0) | 2023.12.01 |
13주차 - 리눅스, 도커 (0) | 2023.11.30 |
11주차 - AWS (0) | 2023.11.29 |