0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[メモ] docker-compose による Groovy on Jenkins 実行環境の構築

Last updated at Posted at 2021-10-02

概要

既存 Jenkins ジョブの Pipeline が Scripted による記法で Groovy を使用していることがある.
また、Pipeline だけでなく、Jenkins ジョブなどでも Groovy を使用していることがある.

これらの挙動調査のために、(Jenkins の WEB-IF や Jenkins ジョブを実行せずに) 実装した
Groovyコードのみで (Jenkins ジョブと同内容を) 実行できる環境を構築したときの記録である.

詳細

既存の Jenkins ジョブで Groovy が使用されていたが、ログと照し合せて見ても
処理がとても長く複雑で解読ができなかった.

かといって、Jenkins ジョブを実行するわけにもいかない、という状況であった.

そこで、Groovy on Jenkins (by docker) を構築して、コマンドライン (Bash Shell) から
Jenkins ジョブの一部を実行できるようにした、ということである.
(要は、Bash Shell コマンドラインで Jenkins Script Console と同等のことができるようにした.)

これにより、実装されていた処理を部分的に切り出して処理を追跡し、調査をしたという次第である.

手順

1. Jenkins (Master 1台、Slave 3台) の Docker を構築する

下記 URL の記した手順で構築すること.
同一物理ホスト上に Master 1台、Slave 3台 が JNLP 通信した状態で起動する.

https://qiita.com/robozushi10/items/f6ff1aade15ab2bd06a1

image.png

役割 ホスト側ポート コンテナ側ポート 補足
Jenkins Master 43080 43080
Jenkins Slave(1) - - Docker on Docker も可能である
Jenkins Slave(2) - - Docker on Docker も可能である
Jenkins Slave(3) - - Docker on Docker も可能である

2. コンテナ内の /var/jenkins_home の権限を jenkins:jenkins にする

余計なトラブル回避のためにも、
Jenkins の Master の /var/jenkins_home の権限を jenkins:jenkins にしておくと良い.

$ docker-compose exec jenkinsmaster \
    bash -c 'chown -R jenkins:jenkins /var/jenkins_home'

3. コンテナ内に Groovy をインストールする

3-1. コンテナに Groovy インストールに必要な zip, unzip をインストールする

$ docker-compose exec jenkinsmaster \
    bash -c 'apt-get update -y; apt-get install -y zip unzip'

3-2. コンテナに jenkins ユーザでログインする

$ docker-compose exec --user jenkins jenkinsmaster bash

3-3. SDKMAN をインストールする

次のメッセージが表示されれば OK.

私は Java には疎い (2021.10時点) のでメモしておくが、
SDKMAN とは jvm で動く系モジュール ( gradlegroovy など) の管理ツールである.
(The Software Development Kit Manager の略らしい)

$ docker-compose exec --user jenkins jenkinsmaster \
    bash 'curl -s http://get.sdkman.io | bash'
略

Please open a new terminal, or run the following in the existing one:

    source "/var/jenkins_home/.sdkman/bin/sdkman-init.sh"

Then issue the following command:

    sdk help

Enjoy!!!

3-4. Groovy をインストールする

$ docker-compose exec --user jenkins jenkinsmaster \
    bash -c 'source "$HOME/.sdkman/bin/sdkman-init.sh"; sdk install groovy'

(上記までの手順をバッチ化しておくと楽だと思う...)

4. インストールできたことを確認する

4-1. 適当なサンプルコードを配置する

コードの引用元
https://devs.nobushige.net/groovy/26/

コンテナ内の `/var/jenkins_home/testing/a.groovy' に作成する

$ docker-compose exec --user jenkins jenkinsmaster \
    bash -c 'mkdir -p $HOME/testing/'

$ cat <<'EOL' |tee PV/jenkinsmaster/jenkins_home/testing/a.groovy
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

def ldt = LocalDateTime.now()
def formatter = DateTimeFormatter.ofPattern('yyyy/MM/dd HH:mm:ss.SSS')
println ldt.format(formatter)
EOL

4-2. 実行する

$ docker-compose exec --user jenkins jenkinsmaster \
    bash -c 'source "$HOME/.sdkman/bin/sdkman-init.sh"; groovy $HOME/testing/a.groovy'
2021/07/31 04:37:26.238

5. Jenkins 用の jar ファイルを参照するようにする

Jenkins の WEB-UI から実行すると正常実行できるが、
ターミナルから直接 groovy ファイルを実行すると API が見つからずにエラーになることがある.

この場合は、Jenkins が提供する API (jar) を見つけ出せていないことが原因である.
そこで、Jenkins が公開する jar ファイルを探索パスに追加してやる

$ vim PV/jenkinsmaster/jenkins_home/.bashrc
略
export CLASSPATH=$CLASSPATH:/var/jenkins_home/war/WEB-INF/lib/jenkins-core-2.314.jar
略

 

以上.

 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?