동적 변수를 젠킨스 파라미터로 사용하기 (Extended Choice Parameter)


TL;DR

동적 변수를 젠킨스 파라미터로 가져와서 사용하는 방법을 공유합니다.
예) AWS S3의 버킷리스트 확인하고, 지정 버킷에 파일 업로드
Extensible Choice Parameter 플러그인과 Groovy 그리고 AWS CLI를 사용하였습니다.

사전 설치

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 이름의 파라미터를 생성하고, 아래 그림과 같이 설정합니다.

GroovyScript

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 파일의 업로드와 업로드확인 명령을 수행합니다.

shell
#!/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 플러그인도 설치하고 사용하면서 다른 후기도 남겨볼께요.