클라우드 스쿨/강의 정리

17주차 - 젠킨스

qqlzzb 2023. 12. 6. 11:13
기간 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