TL;DR
동적 변수를 젠킨스 파라미터로 가져와서 사용하는 방법을 공유합니다.
예) AWS S3의 버킷리스트 확인하고, 지정 버킷에 파일 업로드
Extensible Choice Parameter 플러그인과 Groovy 그리고 AWS CLI를 사용하였습니다.
사전 설치
- Jenkins 2.222.1
- Extensible Choice Parameter 1.6.0 플러그인 설치
- AWS CLI 1.18.43
AWS CLI 설치 및 설정
# aws cli 설치
$ apt-get update
$ apt-get install python-pip
$ pip install awscli
aws-cli/1.18.43 Python/2.7.13 Linux/4.15.0-43-generic botocore/1.15.43
# aws configure 설정
$ aws configure
AWS Access Key ID [None]: # Access Key 입력
AWS Secret Access Key [None]: # Secret Key 입력
Default region name [None]: # ap-northeast-2
Default output format [None]: # 그냥 엔터
# S3 Butcket 리스트 확인
$ aws s3 ls
2020-04-29 01:46:23 jenkins-bucket-01
2020-04-29 01:46:37 jenkins-bucket-02
2020-04-29 01:46:46 jenkins-bucket-03
2020-04-29 05:06:10 jenkins-bucket-04
2020-04-29 05:06:22 jenkins-bucket-05
Jenkins Job 설정 및 실행
1. Extended Choice Parameter 추가
S3_BUCKET_NAME
이름의 파라미터를 생성하고, 아래 그림과 같이 설정합니다.
import hudson.model.*
import jenkins.model.*
def listBucket() {
def bucket= ("aws s3 ls").execute() // s3 버킷 리스트 확인
return bucket.text.readLines().collect { it.split()[2] }.unique().join(",")
}
return listBucket()
2. Git 추가
업로드 테스트 할 Dockerfile
파일을 젠킨스 저장소에서 다운로드 받습니다.
https://github.com/jenkinsci/jenkins.git
3. Excute shell 추가
Dockerfile
파일의 업로드와 업로드확인 명령을 수행합니다.
#!/bin/sh
echo " > AWS S3 ${S3_BUCKET_NAME} 업로드.."
aws s3 cp ./Dockerfile s3://${S3_BUCKET_NAME}/Dockerfile
echo " > AWS S3 ${S3_BUCKET_NAME} 업로드 확인..."
aws s3 ls s3://${S3_BUCKET_NAME}
4. Job 실행
최초 Build with Parameters 선택시 바로 실행되지 않습니다.
Groovy Script 동작을 승인하는 과정이 필요합니다. (1회)
In-Process Script Approval > Approve
다시 Build with Parameters 선택 합니다.
드디어! 매개변수 항목에 S3 Bucket 리스트를 확인하고 선택할 수 있습니다.
jenkins-bucket-05
로 선택 후, 빌드하기를 해보겠습니다.
콘솔 아웃풋 보면, Dockerfile
이 업로드 됨을 확인할 수 있습니다.
물론 AWS 웹 콘솔에서도 확인 가능합니다.
맺음말
어떤 동적 변수를 가져와서 잘 활용하느냐가 가치일 것입니다.
최근 AWS 시작(?)하면서, 예를 S3로 하였습니다.
(Shell 방식이 아닌) AWS 관련 Jenkins 플러그인도 설치하고 사용하면서 다른 후기도 남겨볼께요.