젠킨스로 배우는 CI/CD 파이프라인 구축 - 코드형 파이프라인 이해

2025. 9. 13. 22:34·Study/젠킨스로 배우는 CI,CD 파이프라인 구축
1. API 인증의 개념 및 깃 허브 리포지터리에서의 설정 방법, API 인증이 설정된 젠킨스와의 통합 방법에 대해 알아보자!
2. 코드형 파이프라인의 개념과 깃 허브에 이벤트가 발생할때 웹 훅을 사용해 깃 허브에서 파이프라인을 시작하는 방법을 알아보자!

📂 API 인증 

  • 깃 원격 리포지터리에 접속하려면 비밀번호 대신 사용할 수 있는 API 액세스 토큰이라는 보안 텍스트를 생성해야 한다.

📂 깃허브 리포지터리에 API 인증 적용 

  • 깃허브 리포지터리에서 API 인증 기술을 적용하려면 깃허브에서 API 토큰을 생성해야 한다.

💡 깃허브에서 API 액세스 토큰을 생성하는 과정

1단계 : 깃허브 로그인 : 깃허브 사용자 이름과 비밀번호를 사용해 로그인하고 대시보드로 이동한다.

2단계 : API 액세스 토큰 생성 : 대시보드 오른쪽 상단 사용자 아이콘 → Settings 메뉴 선택 → 설정페이지에서 Developer Settings 클릭 → 깃허브 Apps 페이지 → Personal aceess tokens → Tokens > Generate new Token → Generate new Token  (classic) 

→ 액세스 토큰 발급으로 Note필드를 입력하고, Select Scopes 섹션에 repo 체크박스를 선택해 비공개 리포지터리에 대한 모든 권한을 갖는다. 

→  토큰 발급이 되면 토큰을 복사한다. (보안상의 문제로 다시 표시되지 않기때문)

📂 API 토큰으로 비공개 깃허브 리포지터리에 접속

  • 리포지터지를 복제하고, 코드를 변경하고, 변경사항을 원격 리포지터지로 푸시할때 앞에서 생성한 API토큰을 사용해보자!

1단계 : JenkinsBookCalcualtorWepApplication 리포지터리 복제 : 리포지터리를 복제할 빈 폴더를 생성 

a. C:\CloningRepoUsingAPIToken 폴더 생성

b. git clone

c. 리포지터리 복제 성공

d. 시작메뉴 > 자격증명 관리자 → 자격증명이 저장된 것 확인

2단계 : 코드 변경 및 깃허브 원격 리포지터리로 푸시 : 복제된 리포지터리의 src/main/webapp 디렉터리의 Calulator.html 파일 오픈 → 소스를 변경 후 변경사항 저장 → 로컬 리포지터리로 커밋 → 원격 리포지터리로 푸시

git add .
git commit -m "commit msg"
git push 원격리포지터리주소 Master

📂 깃랩에서 API 액세스 토큰 생성

  • 깃랩 리포지터리에서 API 액세스 토큰을 생성하는 방법

1단계 : 깃랩 로그인 > 대시보드 이동

2단계 : API 액세스 토큰생성 → preferences >  Access Tokens → 토큰 생성 

write_Repository : 비공개 리포지터리에 대한 모든 권한을 가짐

📂 API 토큰으로 비공개 깃랩 리포지터리에 접속

1단계 : 리포지터리 복제 : 복제할 빈폴더 생성 → git clone

2단계 : 코드 변경 및 깃랩 원격 리포지터리로 푸시 

📂 젠킨스에서 API 토큰으로 깃허브/깃랩 리포지터리에 접속

1단계 : 젠킨스에서 메이븐 설정

2단계 : 젠킨스 대시보드에서 프리스타일 작업 생성

Item 생성 후 작업구성화면 → 소스 코드관리 → git 선택하여 자격증명을 입력한다.(필자는 gitlab 기준으로 작성)

  • username : 깃랩 사용자 이름 
  • password : 깃랩 API 토큰 
  • id : 자격증명 항목을 식별할 수 있는 문자열 

자격증명 입력 성공 !

추가로 빌드스텝도 지정후 저장한다.

3단계 : pom.xml에 버전을 8.0으로 변경 후 저장한다.

 

4단계 : 로컬 리포지터리에서 변경사항을 커밋하고 깃랩 중앙 리포지터리로 푸시한다.

📂 API 토큰으로 깃랩 리포지터리에 접속하는 프리스타일 작업 실행 

  • 젠킨스 작업을 실행 후 버전8.0을 확인한다.

💡코드형 파이프라인 이해

  • 코드형 파이프라인 : 젠킨스 UI 외부의 Jenkinsfile파일에서 파이프라인을 작성하는 방법

💊Jenkinsfile 이해

  • 파이프라인 스크립트 코드로 구성된 텍스트 파일 
  • 애플리케이션의 소스코드처럼 소스코드 리포지터리로 체크인된다
  • 스크립트형 구문이나 선언형 구문으로 작성할 수 있다.

💊코드형 파이프라인의 장점

  • 단 하나의 Jenkinsfile에서 모든 브랜치의 파이프라인을 생성하고 풀-리퀘스트를 실행할 수 있다.
  • 애플리케이션의 소스 코드 리뷰와 동일한 방식으로 Jenkinsfile 코드를 리뷰할 수 있다.
  • 파이프라인 코드를 별개의 파일에 작성해 SVN이나 깃과 같은 소스 제어 시스템에 체크인하면 빌드 프로세스의 변경 사항을 지속적으로 추적할 수 있다.
  • Jenkinsfile은 파이프라인 코드의 단일 소스 역할을 하므로 여러 개발자가 공유할 수 있다.
  • 애플리케이션 개발자가 소스 코드를 변경하는 중에 빌드 프로세스의 수정이 필요한 경우, 자신이 직접 Jenkinsfile에서 빌드 프로세스를 구현할 수 있다

💊 Jenkinsfile에서 파이프라인 작성

Jenkinsfile에서 파이프라인을 작성하는 방법을 알아보자!
Jenkinsfile에서 작성하는 파이프라인은 스크립트형 구문 또는 선언형 구문을 사용한다.

💊스크립트 형 구문과 선언형 구문 비교

  • 선언형 구문은 젠킨스에서 비교적 최근에 추가된 기능이다.
  • 스크립트형 파이프라인은 기존에 사용하던 방식이다.
  • 스크립트형 파이프라인은 엄격한 그루비 기반 구문을 사용한다.
  • 선언형 파이프라인은 간단한 그루비 구문을 제공하고자 도입되었다.
  • 스크립트형 파이프라인은 node라는 블록 내에 정의한다.
  • 선언형 파이프라인은 pipeline이라는 블록 내에 정의한다.

💊 Jenkinsfile을 실행하는 젠킨스 작업 생성

CalculatorAPI의 빌드 프로세스를 실행할 파이프라인 작업을 생성해보자!
  • 동일한 목적으로 작성한 이전의 작업과의 차이점은 선언적 구문으로 파이프라인을 작성하는 것이다.
  • 파이프라인은 젠킨스 UI를 이용하지 않고, Jenkinsfile에서 작성한다. 이를 위해서 먼저 Pipeline 플러그인을 설치해야 한다.

1단계 : 파이프라인 작업 생성 : 파이프라인 작업을 생성하려면, 젠킨스 대시보드에서 아이템을 새로 생성한다.

  • 구성 페이지 > Pipeline 섹션 > 스크립트 편집기에서 파이프라인 스크립트를 직접 입력하고, 그 내용을 Jenkinsfile에 복사하는 식으로 진행할 수 있다.
  • GitHub+Maven 옵션의 스크립트 템플릿을 사용하여 수정하고, environment 블록을 사용해서 파이프라인의 모든 스테이지에서 공유할 수 있는 변수를 정의한다.

첫번째로 작성할 스테이지는 CalculatorAPI 리포지터리를 복제하는 작업이다.

해당 스크립트는 스니펫 생성기에 작성된 스텝을 가져온다. 템플릿을 수정해서 Cloning Calculator API repository 스테이지를 추가했고, 스니펫으로 생성한 git 스텝을 넣었다.

또한, 해당 스테이지에서 파이프라인 환경변수 FAILED_Stage를 현재 스테이지의 이름으로 할당하는 스크립트 블록도 포함되어 있다.

현재 스테이지 이름은 젠킨스의 환경변수인 STAGE_NAME을 이용한다.

stage('Cloning Calculator API repository')
    {
        steps
        {
            script
            {
                FAIED_Stage = env.STAGE_NAME
            }
            git branch: 'Master', credentialsId: 'gitlab_APIToken',
            url: 'https://gitlab.com/pranodayb_test/jenkinsbookcalculatorapi.git'
        }
    }

배치 명령 mvn deploy가 포함된 Deploying CalculatorAPI라는 스테이지를 추가한다.
여기에서도 스테이지 이름을 환경 변수에 저장한다.

stage('Deploying Calculator API')
    {
        steps
        {
            script
            {
                FAILED_Stage = env.STAGE_NAME
            }
            bat 'mvn deploy'
        }
    }

현재 작업의 요구 사항은 프로세스가 실패로 끝나는 경우 이메일 알람을 보내는 것이고, 프로세스가 성공한다면 아티팩트를 저장해야 한다.

선언형 파이프라인의 post 블록으로 구현할 수 있으며, 파이프라인을 사용하기 전에 post 블록에 대해 알아보자!

post블록에는 파이프라인 스크립트의 위치에 따라 특정 스테이지 또는 모든 스테이지가 끝나면 실행되는 스텝이 포함되어 있다.

post 블록은 다른 조건부 블록도 포함되며, 이런 조건부 블록을 사용해 전체 또는 특정 단계의 완료 상태에 따른 스텝을 실행할 수 있다.

stage('Display welcome message on console')
{
  bat 'echo Hi'
}
post
{
 success
 {
  bat 'echo stages is successful'
 }
 failure
 {
  bat 'echo stage is not successful'
 }
}

> 해당 스테이지가 완료되면 success블록, failure블록이 실행된다.

stages
{
 stage('Display welcome message on console')
 {
  bat 'echo Hi'
 }
 stage('Display good bye message on console')
 {
  bat 'echo Good Bye'
 }
}
post
{
 success
 {
  bat 'echo Both stages are successful'
 }
 failure
 {
  bat 'echo some stage is not successful'
 }
 always
 {
  bat 'echo It will always get executed'
 }
}

always 블록은 스테이지의 상태와 관계없이 무조건 실행된다.

파이프라인에서 2개의 스테이지를 모두 통과하면, 아티팩트가 생성되며 이를 보관해야 한다.
반대로 통과하지 못하면, 실패한 단계의 이름과 빌드의 콘솔 로그를 첨부한 내용을 이메일 알림으로 보내야 한다.
이를 post 블록으로 구현하면 다음과 같다.

post
    {
        success
        {
            archiveArtifacts 'target/*.jar'
        }
        failure
        {
            emailtext attachLog: .....
        }
    }

failure블록에 있는 emailtext 스텝에서 콘솔 로그를 이메일로 보내도록 attachLog:true를 설정한다.
그리고 이메일 본문에 실패한 스테이지 이름을 포함하기 위해 본문 매개변수에 파이프라인의 환경 변수를 사용한다.
success 블록에 있는 archiveArtifacts 스텝을 살펴보자!

빌드 아티팩트는 워크스페이스 내에 생성되며 빌드가 실행되면 삭제될 수 있기 때문에,만약 빌드의 아티팩트를 보존하려면 워크스페이스 외부에 복사해야 한다. archiveArtifacts 스텝은 빌드의 아티팩트를 ${JENKINS_HOME} 디렉터리에 저장한다.

pipeline {
    environment {
        FAILED_Stage = ''
    }
    agent any

    stages {
        stage('Cloning Calculator API repository') {
            steps {
                script {
                    FAILED_Stage = env.STAGE_NAME
                }
                // GitLab에서 소스코드 클론
                git branch: 'Master', 
                    credentialsId: 'MyGitlabAPIToken', 
                    url: 'https://gitlab.com/Pranoday/jenkinsbookcalculatorapi.git'
            }
        }

        stage('Deploying Calculator API') {
            steps {
                script {
                    FAILED_Stage = env.STAGE_NAME
                }
                bat 'mvn deploy'
            }
        }
    }

    post {
        success {
            archiveArtifacts 'target/*.jar'
        }
        failure {
            emailext attachLog: true,
                body: "Stage: ${FAILED_Stage} from Build: ${BUILD_NUMBER} of ${JOB_NAME} failed. " +
                      "Hence release of new build could not be done on Nexus repository. " +
                      "Please find detailed console log attached with this email.",
                subject: "CalculatorAPI details: ${DEFAULT_SUBJECT}",
                to: 'pranoday.dingare@gmail.com'
        }
    }
}

💊파이프라인 코드를 jenkinsfile에 저장하고 깃랩 리포지터리로 푸시

  • 파이프라인 스크립트 생성은 젠킨스 UI를 이용하고, 코드는 깃랩 리포지터리에서 관리 할수도 있다.
  • 이렇게 하려면 jenkinsfile이라는 이름의 파일을 생성하고, 스크립트를 붙여 넣는다.

1. 파이프라인 스크립트

2. 폴더에 jenkinsfile파일 생성

3. 깃랩 푸시

4. 깃랩 리포지터리에 파일이 추가된 것 확인

5. 젠킨스 작업 > Configure > pipeline 설정

💡깃랩 웹훅으로 젠킨스 작업 시작 

젠킨스 작업을 시작하는 새로운 방법을 배워보자!

💊 웹훅이란

  • 서버에서 어떤 이벤트가 발생할 때 그 결과를 HTTP POST요청으로 알리는 기능
  • 젠킨스 작업을 가르키는 URL로 웹룩을 구성했다면 깃랩 리포지터리에서 이벤트가 발생했을때 젠킨스 작업빌드를 시작할 수 있도록 만들 수 있다. 이를 위해서 깃랩 리포지터리에서 웹훅을 생성하고 깃랩에서 젠킨스 빌드를 시작할 수 있도록 구성해야 한다.

💊 공인IP

  • 네트워크에 연결된 장치는 두 종류의 IP를 갖는다.
  • 로컬IP는 근거리 통신망내의 장치들이 통신할 때 사용된다.
  • 공인IP는 외부장치와 통신할 때 사용된다. 
  • 곰퓨터 공인IP 확인 
    • 젠킨스 서버를 운영하는 시스템에서 해당 웹사이트에 접속하면 서버의 공인 IPv4주소가 표시돤다.

https://www.whatismyip.com/

 

What Is My IP?

What is my IP? Instantly check your public IP address. My IP address location information shows city, state, postal code, country, and ISP.

www.whatismyip.com

💊 포드 포워딩

  • LAN IP 주소에서 젠킨스 서버를 시작하고 지정된 포트를 리스닝(수신)한다.
  • gitlab.com에서는 이벤트가 발생하면 젠킨스 서버의 공인 IP가 포함된 URL을 호출하는 식으로 젠킨스 서버에게 요청을 보낸다.이 요청은 젠킨스의 로컬 IP 주소로 전달되어야 한다.
  • 공인 IP로 보낸 요청을 로컬 IP로 전달하는 것을 포트 포워딩 또는 포트 개방이라고 한다.
🔖 깃랩 웹훅 URL을 사용해 시작하는 젠킨스 작업을 생성( GitLab → Jenkins 자동 빌드 연동 절차 )
1단계: Jenkins 서버 실행
- 로컬 또는 원격 서버에서 Jenkins 실행
- 브라우저에서 http://localhost:8080 (또는 Jenkins 설치된 서버의 IP) 접속
2단계: Jenkins URL 설정• Manage Jenkins → Configure System 이동
- Jenkins URL필드에 Jenkins 서버의 공개 URL 입력
3단계: GitLab 플러그인 설치
4단계: Jenkins Job 생성 및 GitLab Trigger 설정
- Build Triggers → Push Events 체크 (다른 이벤트는 해제)
- Advanced 옵션 클릭 → Secret Token 생성 (Generate 버튼 클릭)
5단계: GitLab Webhook 생성
- Webhook URL → Jenkins에서 확인한 URL 입력
- Secret Token → Jenkins에서 생성한 토큰 입력
- Trigger 옵션에서 Push Events 체크
- 특정 브랜치(master)에만 동작시키려면 Wildcard 패턴으로 master 지정
6단계: pom.xml 변경 후 푸시

'Study > 젠킨스로 배우는 CI,CD 파이프라인 구축' 카테고리의 다른 글

젠킨스로 배우는 CI/CD 파이프라인 구축 - 젠킨스 분산 빌드  (0) 2025.09.13
젠킨스로 배우는 CI/CD 파이프라인 구축 - 파이프라인  (3) 2025.08.03
젠킨스로 배우는 CI/CD 파이프라인 구축 - SSH  (5) 2025.08.03
젠킨스로 배우는 CI/CD 파이프라인 구축 - 넥서스 설치 및 적용  (3) 2025.07.06
젠킨스로 배우는 CI/CD 파이프라인 구축 - 깃과 깃랩  (0) 2025.07.06
'Study/젠킨스로 배우는 CI,CD 파이프라인 구축' 카테고리의 다른 글
  • 젠킨스로 배우는 CI/CD 파이프라인 구축 - 젠킨스 분산 빌드
  • 젠킨스로 배우는 CI/CD 파이프라인 구축 - 파이프라인
  • 젠킨스로 배우는 CI/CD 파이프라인 구축 - SSH
  • 젠킨스로 배우는 CI/CD 파이프라인 구축 - 넥서스 설치 및 적용
happy_dev
happy_dev
복사하고 붙여넣기 잘하고 싶어요
  • happy_dev
    happy의 개발일지
    happy_dev
  • 전체
    오늘
    어제
    • 전체 (43)
      • Java (0)
      • React (1)
      • DB (1)
      • Study (41)
        • 친절한 SQL 튜닝 (9)
        • 모던 리액트 Deep Dive (18)
        • 젠킨스로 배우는 CI,CD 파이프라인 구축 (14)
        • Studyd (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    조인
    젠킨스
    SQL
    DB
    oracle
    toad
    인덱스의기본
    Jenkins
    리액트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
happy_dev
젠킨스로 배우는 CI/CD 파이프라인 구축 - 코드형 파이프라인 이해
상단으로

티스토리툴바