Jenkins で指定するパラメータをシェルスクリプトに渡すことができれば、スクリプトの Git 管理化が出来て差分管理ができるようになる! というモチベ。

開発環境

> docker --version
Docker version 19.03.12, build 48a66213fe

> docker-compose --version
docker-compose version 1.27.2, build 18f557f9

やりたいこと

  • Jenkins でビルド時に実行するシェルスクリプトを Git で管理する
  • Jenkins でビルド時に指定するパラメータを Git 管理のシェルスクリプトに渡す

簡単のため、Jenkins を Docker で構築する。

コード

https://github.com/tokizuoh/alpinus
コードは GitHub に載せている。

/Dockerfile

FROM jenkins/jenkins:lts-jdk11
WORKDIR /jenkins/src

COPY ./ ./

/docker-compose.yml

version: '3.8'
services:
    app:
        build:
            context: .
            dockerfile: Dockerfile
        tty: true
        ports:
            - 8080:8080
        volumes:
            - .:/jenkins/src

/build/J1.sh

#!/bin/sh

. ./jenkins_config.txt

if "${CLEAN}"; then
    echo "\$CLEAN が true のときに行う処理"
else
    echo "\$CLEAN が false のときに行う処理"
fi

 

普段の記事では説明が適当なので、手順を書いてみる。

コンテナの構築

docker-compose up --build -d

-d: デタッチド。 バックグラウンドでコンテナを実行。

Jenkins のセットアップ

localhost:8080 にアクセスし、 Jenkins のセットアップを行う。

コンテナ内でコマンド実行したい時は下記が便利。

docker exec {CONTAINER_ID} {COMMAND}

プラグインのインストール

必要最低限の構成で済ませたいので、インストールするのは下記2つのみ。

  • Git: ジョブ内で git clone を行うためのプラグイン
  • Workspace Cleanup: ジョブ実行前後でワークスペースを削除するためのプラグイン

Jenkins はデフォルトでジョブ実行前後のワークスペースの削除を行わないので、プラグインを使ってジョブ実行前にワークスペースを削除させる。

ジョブの作成

パラメータ

ビルド時に指定するパラメータを Git 管理のシェルスクリプトに渡したいので、適当なパラメータを追加する。
 

Git

実行するシェルスクリプトを保有するリポジトリや、実行するブランチを設定。
 

ビルド時に実行するシェルスクリプト

 

printf "CLEAN=%s" $clean >> jenkins_config.txt 

ジョブ実行時に指定するパラメータをテキストファイルに保存する。

 

CLEAN=true

jenkins_config.txt は上記のようなフォーマット。

 

sh build/J1.sh

clone したシェルスクリプトを実行。

シェルスクリプトの中身を確認する。
 

#!/bin/sh

# 外部ファイルに記述された変数を読み込む
. ./jenkins_config.txt

# 外部ファイル内の変数を利用
if "${CLEAN}"; then
    echo "\$CLEAN が true のときに行う処理"
else
    echo "\$CLEAN が false のときに行う処理"
fi

ジョブの実行

 

clean にチェックが入っていると下記のログが出力される。

# 省略

+ printf CLEAN=%s true
+ sh build/J1.sh
$CLEAN が true のときに行う処理
Finished: SUCCESS

参考