[LG CNS AM Inspire CAMP 1기] MSA (12) - Jenkins Pipeline

니니지·2025년 3월 24일

LG CNS AM Inspire Camp 1기

목록 보기
44/47

INTRO

[pipeline]
C:\Work\git\jenkins_pipeline_script

[ssh docker-server, run-server]
ssh root@127.0.0.1 -p 10022
ssh root@127.0.0.1 -p 20022

1. 플러그인 설치

2. view 생성



3. item 수정


4. My-CICD-Project View Pipeline 생성 (예제)

CD-Project 에서 수정 필요.

위와 같이 해야 포트 충돌이 안나는데, 이미지가 없는 초기에 오류난다.
일단은 수작업으로 삭제 진행.

[trouble-shooting]
SSH: EXEC: completed after 5,406 ms
SSH: Disconnecting configuration [run-server] ...
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]]
Build step 'Send build artifacts over SSH' changed build result to UNSTABLE
Finished: UNSTABLE
--> 원격 서버에서 도커 로그아웃됐어서 로그인 후 다시 시도하니 성공했다.

5. Pipeline project 생성

git clone https://github.com/joneconsulting/jenkins_pipeline_script.git
위의 프로젝트는 groovy 언어 기반임.

- 아이템 생성


아래엔 script 를 직접 명시했지만 git으로 버전 관리하며 적용 시킬 수 있음.
위에서 pipeline syntax 누르면 문법 몰라도 신택스를 생성해준다.

- 빌드 및 결과 확인


6. 실습

  • CI/CD 배포 파이프 (자동화 배포/무중단 배포)
  • Jenkins Pipeline 생성 (Groovy)
    Step 1) https://github.com/joneconsulting/cicd-web-project 에서 코드 가져와서 빌드
    Step 2) 빌드 된 결과물을 docker-server로 전송
    Step 3) docker-server에 전송 된 빌드 결과물(hello-world.war)을 이미지 생성

pipeline {
    agent any;

    tools {
        maven 'maven3.8.8'
    }

    stages {
        stage('Git Clone') {
            steps {
                git branch: 'main', url: 'https://github.com/joneconsulting/cicd-web-project.git';
            }
        }

        stage('Maven Build') {
            steps {
                sh '''
                    echo build start;
                    mvn clean compile package -DskipTests=true;
                '''
            }
        }

        stage('Transfer') {
            steps {
                sshPublisher(publishers: [
                    sshPublisherDesc(
                        configName: 'docker-server',
                        transfers: [
                            sshTransfer(
                                cleanRemote: false,
                                excludes: '',
                                execCommand: '',
                                execTimeout: 600000,
                                flatten: false,
                                makeEmptyDirs: false,
                                noDefaultExcludes: false,
                                patternSeparator: '[, ]+',
                                remoteDirectory: '.',
                                remoteDirectorySDF: false,
                                removePrefix: 'target',
                                sourceFiles: 'target/*.war'
                            )
                        ],
                        usePromotionTimestamp: false,
                        useWorkspaceInPromotion: false,
                        verbose: false
                    )
                ])
            }
        }

        stage('Image Build') {
            steps {
                sshPublisher(publishers: [
                    sshPublisherDesc(
                        configName: 'docker-server',
                        transfers: [
                            sshTransfer(
                                cleanRemote: false,
                                excludes: '',
                                execCommand: 'docker build --tag hello-world:test1.0 -f Dockerfile .',
                                execTimeout: 600000,
                                flatten: false,
                                makeEmptyDirs: false,
                                noDefaultExcludes: false,
                                patternSeparator: '[, ]+',
                                remoteDirectory: '',
                                remoteDirectorySDF: false,
                                removePrefix: '',
                                sourceFiles: ''
                            )
                        ],
                        usePromotionTimestamp: false,
                        useWorkspaceInPromotion: false,
                        verbose: true
                    )
                ])
            }
        }
    }
}

7. pipeline 매개변수 셋팅

아래 코드는 빌드 버전을 자동 및 사용자 지정으로 관리할 수 있다.

- 파이프라인 스크립트 (젠킨스)

그리고 도커 서버가 아닌 젠킨스 서버에서 실행된다. 도커 서버는 ssh publisher로 설정했었음.

- 설정

- 빌드

- 파이프라인 스크립트 (도커)

도커 서버 활용을 위해 ssh publisher로 설정.

- 결과 확인

profile
지니니

0개의 댓글