Jenkins Plugin Guide
NHN Cloud Deploy Jenkins 업로드 플러그인을 사용하면 Jenkins의 빌드 결과물을 NHN Cloud Deploy 서버로 업로드할 수 있습니다.
Deploy <-> Jenkins 연동 절차
Jenkins build -> Deploy로 바이너리 업로드(by plugin) -> 배포 시나리오 실행(배포/종료/재시작/기타 사전 작업 및 후처리)
이를 위해 다음 순서대로 배포 환경을 구축해야 합니다.
- Deploy에 아티팩트를 생성
- Jenkins build job 설정
- 서버 그룹 생성
- 배포 시나리오 작성
Jenkins 설치
Jenkins 설치 및 자세한 사항은 https://jenkins.io/에서 확인할 수 있습니다.
Jenkins 최소 요구 사항 버전
Jenkins 1580.1 이후 버전을 요구합니다.
플러그인 설치
-
Jenkins 관리 > 플러그인 관리 > 고급 탭 > 플러그인 올리기 메뉴에서 tcdeploy-upload-jenkins.hpi 파일을 업로드합니다.
(tcdeploy-upload-jenkins.hpi 다운로드 링크)
-
설치가 완료되면 설치된 플러그인 목록 탭 메뉴에서 아래 그림과 같이 설치된 내역을 확인할 수 있습니다.
-
해당 빌드 설정의 빌드 후 조치 추가 버튼을 클릭해서 서버 또는 클라이언트 타입 애플리케이션 업로드 태스크를 추가할 수 있습니다.
서버(server) 타입 애플리케이션 업로드 플러그인 설정
서버 타입 애플리케이션 업로드 플러그인으로 빌드 결과물을 ZIP 형식으로 압축해서 NHN Cloud Deploy(TCD) 서버로 업로드할 수 있습니다.
- enable upload
- 플러그인 동작의 활성화/비활성화 여부를 결정하는 옵션입니다. 플러그인 설정이 저장된 상태에서 플러그인의 동작은 비활성화하고 싶을 때 유용합니다.
- end point
- 빌드 결과물을 업로드할 API의 엔드포인트입니다. API 가이드를 참고하여 입력할 수 있습니다.
- publish path
- 빌드가 완료된 워크스페이스에서 배포 대상이 될 상대 경로입니다. 예제에서는 /로 입력되어 있는데 이 경우, JENKINS_HOME/jobs/프로젝트명/workspace 이하의 내용이 업로드 대상 경로가 되고, target이라고 입력하면 JENKINS_HOME/jobs/프로젝트명/workspace/target 이하의 내용이 업로드 대상 경로가 됩니다.
- app key
- 인증을 위한 application key입니다.
- artifact id
- 아티팩트 ID입니다. 숫자만 입력할 수 있습니다.
- binary group key
- 업로드할 바이너리 그룹의 키입니다. 숫자만 입력할 수 있습니다.
- archive file name
- 생성될 .zip 파일의 이름입니다. 이름을 지정하지 않으면 기본 이름으로 자동 등록됩니다.
- 예) 기본 파일 이름 tcdeploy-artifactid-[artifactId]-[yyyyMMddHHmmss].zip
- binary version
- 바이너리 버전입니다. Jenkins의 빌드 번호, 빌드 시작 일시 등의 표현식을 지정할 수 있습니다. 버전을 지정하지 않으면 기본 버전으로 자동 등록됩니다.
- 표현식 사용 버전 형식 예) TCD_SVR_${BUILD_NUMBER}${JENKINS_PROJECT_NAME}${BUILD_START_DATE}
- 표현식 사용 버전 결과 예) TCD_SVR_95__Maven_Project_Test__2015-09-14_16-46-38
- 주의) 버전에는 금칙문자가 지정되어 있어, 공백은 밑줄(_)로 치환되고 ( ) - _ ~ . , 외의 ASCII 특수문자들은 제거됩니다.
- 주의) 버전의 최대 허용 문자열 길이는 100자입니다.
- description
- include filter
- ant-style glob 패턴을 사용해 포함 규칙을 정의할 수 있습니다.
- 예) /*.java,/*.xml - 모든 하위 디렉터리의 java, xml 파일을 포함합니다.
- exclude filter
- ant-style glob 패턴을 사용해 제외 규칙을 정의할 수 있습니다.
- 예) /.svn/ - 모든 하위 디렉터리의 경로 이름 중 \, .svn이 들어간 파일 및 디렉터리를 제외합니다.
- compression level
- 압축 수준을 3단계로 설정할 수 있습니다.
- Store: 무압축, Normal: 보통 압축, Maximum: 최대 압축
[ 서버 타입 애플리케이션 업로드 빌드 콘솔 출력 내용 예시 ]
[TCDeploy] Artifact id: [artifact id 값 출력 부분]
[TCDeploy] App key: [application key 값 출력 부분]
[TCDeploy] Application type: server
[TCDeploy] Description: 테스트 배포
[TCDeploy] Upload address: [업로드 주소 출력 부분]
[TCDeploy] Artifact version: TCD_SVR_95__Maven_Project_Test__2015-09-14_16-46-38
[TCDeploy] Deploy relative path: /
[TCDeploy] Ant include pattern: **/*.java,**/*.xml
[TCDeploy] Ant exclude pattern: **/.svn/**
[TCDeploy] Deploy relative path: file:/var/lib/jenkins/jobs/Maven%20Project%20Test/workspace/
[TCDeploy] ------------------------------- Zip Contents Start -------------------------------
1: pom.xml
2: src/main/java/a_dir/a_sub_dir/a.java
..........
11: src/main/resources/applicationContext.xml
12: src/main/resources/b_dir/b.xml
..........
19: src/test/resources/logback-test.xml
20: target/classes/applicationContext.xml
..........
27: target/test-classes/logback-access.xml
28: target/test-classes/logback-test.xml
[TCDeploy] -------------------------------- Zip Contents End --------------------------------
[TCDeploy] Archive Compression Level: Normal
[TCDeploy] Archive temp file path: /tmp/1442216811482-0/Maven_Project_Test.zip
[TCDeploy] Archive temp file size: 33796
[TCDeploy] Archived content count: 28
[TCDeploy] ------------------------------- Upload Start -------------------------------
[TCDeploy] -------------------------------- Upload End --------------------------------
Finished: SUCCESS
artifact id, app key 등 사용자 입력 정보가 출력되고, 압축 파일에 포함된 파일 내용을 출력합니다.
클라이언트(client) 타입 애플리케이션 업로드 플러그인 설정
클라이언트 타입 애플리케이션 업로드 플러그인으로 성공적으로 빌드된 결과물 중 사용자가 지정한 특정 바이너리를 TCD 서버로 업로드할 수 있습니다.
- enable upload
- 플러그인 동작의 활성화/비활성화 여부를 결정하는 옵션입니다. 플러그인 설정이 저장된 상태를 유지하면서 플러그인의 동작은 비활성화하고 싶을때 유용합니다.
- app key
- 인증을 위한 application key입니다.
- artifact id
- 아티팩트 ID입니다. 숫자만 입력할 수 있습니다.
- binary group key
- 업로드할 바이너리 그룹의 키입니다. 숫자만 입력할 수 있습니다.
- publish path
- 빌드가 완료된 워크스페이스에서 배포 대상이 될 상대 경로입니다. 예제에서는 /로 입력되어 있는데 이 경우, JENKINS_HOME/jobs/프로젝트명/workspace 이하의 내용이 업로드 대상 경로가 되고, target이라고 입력하면 JENKINS_HOME/jobs/프로젝트명/workspace/target 이하의 내용이 업로드 대상 경로가 됩니다.
- binary kind
- 업로드할 바이너리가 Android 바이너리인지 iOS 바이너리인지, 기타(etc) 바이너리인지 구분합니다.
- (ipa/apk/etc/plist) file path
- 업로드할 바이너리 파일의 경로를 포함한 파일 이름입니다.
- 기타(etc) 바이너리는 확장자 제한이 없지만, Android, iOS는 확장자 제한이 있습니다.
- iOS일 때는 .ipa 바이너리 파일 및 .plist 메타파일을 같이 업로드해야 합니다.
- 서버 타입 업로드 태스크와는 다르게 빌드 워크스페이스 외부의 파일 경로도 입력할 수 있습니다.
- 워크스페이스로 바로 접근하는 경로 표현식으로 ${WORKSPACE}/target/a.ipa와 같이 사용할 수 있습니다.
- binary version
- 바이너리 버전입니다. 서버 애플리케이션의 버전 폼과 동일하게 처리됩니다.
- description
[ iOS 클라이언트 타입 애플리케이션 업로드 빌드 콘솔 출력 내용 예시 ]
[TCDeploy] Artifact id: [artifact id 값 출력 부분]
[TCDeploy] App key: [application key 값 출력 부분]
[TCDeploy] Application type: client
[TCDeploy] Description: 클라이언트 프로그램 테스트 업로드
[TCDeploy] Upload address: [업로드 주소 출력 부분]
[TCDeploy] Binary type: iOS
[TCDeploy] Binary version: IOS_59__build_iOS_Project_Test__2015-09-16_11-13-12
[TCDeploy] iOS binary file path: /tcdUploadTest/a.ipa
[TCDeploy] iOS meta file path: /tcdUploadTest/a.plist
[TCDeploy] ------------------------------- Upload Start -------------------------------
[TCDeploy] -------------------------------- Upload End --------------------------------
Finished: SUCCESS
artifact id, app key 등 사용자 입력 정보가 출력되고, 업로드할 바이너리 및 메타파일이 출력됩니다.
Jenkins-CLI Build Profile
사용자가 Jenkins-CLI를 사용하여 빌드 명령 수행에 도움을 주는 사전에 정의된 Profile입니다.
준비 사항
-
SSH Pubilc/Private Key Pair 생성
- ssh-keygen 또는 PuTTY Key Generator 등으로 SSH Pubilc/Private Key Pair를 생성하고, Jenkins의 빌드 수행 계정에 SSH Public Key를 저장, SSH Private Key 파일은 태스크 수행 서버에 저장.
- 암호문(passphrase)이 설정되지 않은 SSH Private Key만 지원합니다.
- 예) http://[JENKINS_URL]/user/[사용자명]/configure 페이지에 접근하여 SSH Public Keys 항목에 생성한 SSH Public Key의 내용을 저장하고, 생성한 SSH Private Key 파일은 태스크 수행 서버의 사용자 지정 경로에 저장.
-
http keep alive timeout 조정
- Jenkins 서버의 http keep alive timeout 값 확인 후, 값 조정.
- 예) Jenkins를 RPM으로 설치했을 경우,
- /etc/sysconfig/jenkins 의 JENKINS_ARGS에 httpKeepAliveTimeout=[적당한 밀리초값] 옵션 추가.
-
Stream 예외 발생 관련
- 빌드 콘솔 출력 중 java.io.StreamCorruptedException이 발생할 경우 Jenkins를 수행하는 JVM옵션에 -Dhudson.diyChunking=false 옵션 추가.
- 예) Jenkins를 RPM으로 설치했을 경우.
- /etc/sysconfig/jenkins의 JENKINS_JAVA_OPTIONS에 -Dhudson.diyChunking=false 옵션 추가.
Profile 설정
[ 사용자 입력 내용 ]
- OS 선택
- RunAs 입력
- JenkinsServer
- Server Charset
- Jenkins-CLI를 수행할 서버의 문자집합을 입력합니다.
아무 값도 입력하지 않으면 기본값 UTF-8
- Jenkins Url
- 빌드 명령을 수행할 Jenkins 서버 주소를 입력합니다.
- Jenkins Charset
- Jenkins 서버의 문자집합을 입력합니다. 아무 값도 입력하지 않으면 기본값은 UTF-8입니다.
- Java Home
- Jenkins-CLI를 수행하기 위한 JDK 또는 JRE의 Home 경로를 입력합니다.
- Job Name
- Private Key Path
- SSH Public Key가 설정되어 있는 Jenkins 유저로 인증하기 위한 SSH Private Key 파일의 저장 경로를 입력합니다.
- User(ver. 2.46 이상 버전 필수)
- Public Key가 설정된 ID를 입력합니다.
- 참고 사항
- 2.46 이전 버전
- Public Key가 설정된 경우 Jenkins에서 자동 인증 진행
- 2.46 이상 버전
- User(Jenkins admin ID)가 추가되었으며, 해당 ID에 Public Key가 설정된 경우만 인증 통과
- Build Parameter(선택)