Jenkins cli 및 rofi - GUI 없이 빌드를 트리거합니다.

Jenkins는 개발자를 위한 빵과 버터입니다. 제 경우에는 그것으로 모든 것을하고 있습니다. 솔루션 및 도커 이미지 구축, 활성 mq에서 대기열 및 항목 프로비저닝, Dev, stage 및 prod에서 배포 수행.

Jenkins의 가능성을 즐기다 보니 GUI의 속도와 유용성은 Jenkins의 강점이 아닙니다. 나는 매우 CLI 중심적이며 터미널에서 가능한 한 많은 작업을 수행하려고 합니다. 작업 반복 작업이 있는 경우 작업을 수행하는 스크립트를 만들려고 합니다.

우리의 경우 Jenkins에는 깊은 계층 구조 작업 구조가 있습니다. 그리고 우리는 Jenkins를 하나만 가지고 있는 것이 아니라 두 개의 인스턴스를 가지고 있습니다. 하나의 Jenkins에서 다양한 환경에 대한 모든 솔루션 및 버전 프로모션을 관리하고 있습니다. 두 번째는 모든 배포 및 프로비저닝 작업을 처리합니다.

따라서 솔루션을 배포하려면 첫 번째 Jenkins에서 build 파이프라인을 트리거한 다음 release 파이프라인을 트리거해야 합니다.
그 후 두 번째 Jenkins의 DEV에 배포할 수 있습니다. STAGE를 계속하려면 첫 번째 Jenkins에서 candidate를 승격한 다음 두 번째 Jenkins로 전환하여 STAGE에 배포해야 합니다.

그래서 Jenkins 탁구 게임을 해야 한다고 상상할 수 있습니다.

운 좋게도 Jenkins 중 하나가 jenkins-cli를 지원합니다. 이것은 Jenkins 자체에서 제공하는 항아리입니다. CLI 도구 버전을 얻으려면 이 페이지https://your.jenkins.url/cli/의 Jenkins 인스턴스에서 간단히 다운로드할 수 있습니다.

Jenkins는 CLI에 대한 액세스를 허용해야 합니다. Jenkins 인스턴스의 global secure settings에서 JNLP 연결을 허용해야 합니다.

토큰을 생성하려면 Jenkins 사용자 설정으로 이동해야 합니다.


Jenkins CLI는 상당히 많은 매개변수가 필요하므로 CLI와 매개변수를 캡슐화하는 것이 좋습니다.
이 스크립트는 작업에 대한 퍼지 검색을 제공하기 위해 rofi을 기반으로 합니다. 선택 후 작업을 트리거하고 브라우저에서 작업을 엽니다.
토큰의 경우 암호 저장소를 사용하는 것이 좋습니다. 제 경우에는 pass 을 사용하고 있습니다. Linux용 경량 암호화 비밀번호 관리자입니다. 그러나 테스트 목적으로 처음에는 파일도 괜찮습니다.


#!/bin/bash

JENKINS_URL="http://url.to.jenins"
# this is only for testing. this file contains just one line with [loginname]:[token] 
# in general credencials should be not laying around in cleartext
# JENKINS_AUTH="$(cat $HOME/dotfiles/.jenkins.cli.secret)"

username=$(pass show [path/to/store] | tail -n1)
token=$(pass show [path/to/store] | head -n1)
JENKINS_AUTH="$username:$token"

JENKINS_JAR="$HOME/.local/bin/jenkins-cli.jar"

JENKINS_CLI="java -jar $JENKINS_JAR -auth $JENKINS_AUTH -s $JENKINS_URL"

# check date of file if older 7 days
if [ "$(find '/tmp/jenkinsJobList' -ctime +7)" ]; then
    echo "fetch joblist"
    $JENKINS_CLI list-jobs > /tmp/jenkinsJobList
fi

# job selection via fuzzy search 
job=$(cat /tmp/empty /tmp/jenkinsJobList | rofi -dmenu)

# triggering the job
$JENKINS_CLI build $job

# opens the pipeline in browser alternative you can replace it with your browser
qutebrowser "$JENKINS_URL/job/$job"



추가로 어떤 브랜치를 구축할지 고려해야 합니다. 우리는 작업 이름을 지정하는 매우 일관된 방법을 가지고 있습니다. 따라서 솔루션을 구축하고 솔루션을 홍보하지 않으려면 작업 이름에 BUILD가 포함된 작업의 마스터 분기를 트리거하기만 하면 됩니다. 다른 모든 것은 가지를 포함하지 않습니다.
이 부분은 스크립트의 하단 부분을 대체하고 있습니다.

if [ "$job" != "" ]; then
    # jobname contains BUILD in the string
    if [[ "$job" == *"BUILD"* ]]; then 
        jobname="$job/master"
        link="$JENKINS_URL/job/$job/job/master/"
    else 
        jobname="$job"
        link="$JENKINS_URL/job/$job/"
    fi

    #trigger job
    $JENKINS_EXEC -webSocket -auth $JENKINS_AUTH -s $JENKINS_URL build $jobname

    #open job in browser
    qutebrowser "$link"
fi

좋은 웹페이지 즐겨찾기