본문 바로가기
Jenkins

Jenkins Pipeline CICD 테스트

by aws-evan 2024. 3. 18.
728x90

 

jenkins 처음 접할때는 Freestyle Project로 테스트해서 배포했었는데  초기에 접근하기엔 Freestyle Project이 편하자나,

예전에 테스트 해봣기에 요번엔 Pipeline을 통해서 jenkinsfile 명시해서 테스트 해보겠습니다.

 

 

1. Jenkins Pipeline Project 생성

  • 파이프라인 생성

 

  • GIT -> Repository URL 및 연결한 GIT Password
    • Credentials 생성 방법 클릭
    • jenkinsfile : Repository URL에 파일이 존재해야함

 

2. Pipeline Jenkinsfile 생성

  • 1) Gradle Clean Build
  • 2) k8s-master 서버에 Jar 파일 복사
  • 3) k8s-master Dockerfile 파일 복사
  • 4) Jar + Dockerfile 을 통해 Build 실행 -> Run 서비스실행
pipeline {
	agent any

	stages {
		stage("Gradle Build") {
			steps {
                echo "1. Spring boot Build"
                sh './gradlew clean build --exclude-task test'
			}
		}

        stage('SSH Transfer(Jar)') {
            steps([$class: 'BapSshPromotionPublisherPlugin']) {
                echo "2. SSH Transfer(Jar)"
                sshPublisher(
                    continueOnError: false, failOnError: true,
                    publishers: [
                        sshPublisherDesc(
                            configName: "k8s-master",//Jenkins SSH Name
                            verbose: true,
                            transfers: [
                                sshTransfer(
                                    sourceFiles: "build/libs/evanboard-0.0.1-SNAPSHOT.jar", //전송할 파일
                                    removePrefix: "", //파일에서 삭제할 경로가 있다면 작성
                                    // remoteDirectory: "" //배포할 위치
                                    // execCommand: "ls -al /tmp" //원격지에서 실행할 커맨드
                                    
                                )     
                            ]
                        )
                    ]
                )
            }
        }
        stage('SSH Transfer(Dockerfile)') {
            steps([$class: 'BapSshPromotionPublisherPlugin']) {
                echo "3. SSH Transfer(Dockerfile)"
                sshPublisher(
                    continueOnError: false, failOnError: true,
                    publishers: [
                        sshPublisherDesc(
                            configName: "k8s-master",//Jenkins SSH Name
                            verbose: true,
                            transfers: [
                                sshTransfer(
                                    sourceFiles: "Dockerfile", //전송할 파일
                                    // removePrefix: "", //파일에서 삭제할 경로가 있다면 작성
                                    // remoteDirectory: "" //배포할 위치
                                    //원격지에서 실행할 커맨드
                                    execCommand: "docker stop evanboard; docker rm evanboard; docker rmi 192.168.0.100:443/backend/evanboard:2.0"

                                )     
                            ]
                        )
                    ]
                )
            }
        }//docker stop evanboard; docker rm evanboard; docker rmi evanboard;
        stage('Docker build & Start') {
            steps([$class: 'BapSshPromotionPublisherPlugin']) {
                echo "4. docker build & start"
                sshPublisher(
                    continueOnError: false, failOnError: true,
                    publishers: [
                        sshPublisherDesc(
                            configName: "k8s-master",//Jenkins SSH Name
                            verbose: true,
                            transfers: [
                                sshTransfer(
                                    sourceFiles: "Dockerfile", //전송할 파일
                                    // removePrefix: "", //파일에서 삭제할 경로가 있다면 작성
                                    // remoteDirectory: "" //배포할 위치
                                    //원격지에서 실행할 커맨드
                                    execCommand: "docker build -t 192.168.0.100:443/backend/evanboard:2.0 -f ./Dockerfile .;docker run -p 8080:8080 -d --name evanboard 192.168.0.100:443/backend/evanboard:2.0"

                                )     
                            ]
                        )
                    ]
                )
            }
        }
    }
}
  • Pipeline Dockerfile
FROM openjdk:11
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} /application.jar
# ADD ./build/libs/evanboard-0.0.1-SNAPSHOT.jar /application.tar
ENTRYPOINT ["java", "-jar", "/application.jar"]
EXPOSE 8080

 

  • Pipeline Project 실행
    • Stage : Gradle BUild -> SSH(Jar Copy) -> SSH(Dockerfile) -> Docker Build & Docker Start

 

3. Docker 리소스 확인

  • Container 이미지

 

  • Containerd 서비스 상태

728x90

'Jenkins' 카테고리의 다른 글

Jenkins Deployment로 설치하기  (0) 2024.06.13
[Jenkins]JVM 용량 증설하기  (0) 2022.06.22
[Docker]Docker로 Jenkins 설치  (0) 2022.03.05

댓글