[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






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
--> 원격 서버에서 도커 로그아웃됐어서 로그인 후 다시 시도하니 성공했다.
git clone https://github.com/joneconsulting/jenkins_pipeline_script.git
위의 프로젝트는 groovy 언어 기반임.


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


- 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
)
])
}
}
}
}
아래 코드는 빌드 버전을 자동 및 사용자 지정으로 관리할 수 있다.
그리고 도커 서버가 아닌 젠킨스 서버에서 실행된다. 도커 서버는 ssh publisher로 설정했었음.



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

