Help us understand the problem. What is going on with this article?

オフラインJenkins実験環境構築メモ

概要

実際に使用されているJenkinsマシンを汚さずに手元のWindows環境で実験するために、JenkinsとSubversionの環境を構築した際のメモ。
Pipeline(ジョブ)で利用するGroovyスクリプトをバージョン管理して、複数のPipelineから共有できるようにする。

  • 環境
    • Windows 10
    • Jenkins 2.222.3
    • Subversion 1.13.0
    • Tortoise SVN 1.13.1

Subversion

インストール

Tortoise SVNをコマンドラインツール込みでインストール

ローカルリポジトリ作成

参考: 【svn】コマンドのみで手っ取り早くローカルPCにsvnリポジトリ作ってバージョン管理できるとこに持ってく方法

パス指定でハマったので具体的なパスを指定したコマンド例を掲載。

cd f:\test

@REM ローカルリポジトリ作成
svnadmin create test_rep

@REM trunk作成
mkdir trunk
svn import trunk file:///f:/test/test_rep -m "create trunk"

@REM 試しにチェックアウト
rmdir trunk
svn checkout file:///f:/test/test_rep/trunk
  • file:///のスラッシュは3つ必要であることに注意
  • ドライブ指定f:/のスラッシュは必要(なしだとcheckoutに失敗した)
> svn checkout file:///f:test/test_rep/trunk
svn: E170013: Unable to connect to a repository at URL 'file:///f:test/test_rep/trunk'
svn: E180001: Unable to open repository 'file:///f:test/test_rep/trunk'

Jenkins

インストール

公式( https://www.jenkins.io/download/ )からWindows版をダウンロードしてインストール。
余談であるが、トップぺージ( https://www.jenkins.io/ )はなぜか中文のコンテンツが表示されて、右上の言語をEnglishに変えても中文のままだった。

Blue Oceanプラグインをインストール。

Jenkinsの言語設定はブラウザの言語設定に依存する。ブラウザの日本語の優先順位を一番上にすれば、日本語になる。

Pipeline間のコード共有(Global Pipeline Libraries)

システムの設定(configure)のGlobal Pipeline Librariesを設定する。

設定項目
Name test-lib
DefaultVersion jenkins
Retrieval method Modern SCM
Source CodeManagement Subversion
Project Repository Base file:///f:test/test_rep/

Project Repository BaseDefaultVersionに設定した内容に従ってチェックアウトされる。上の設定の場合、file:///f:test/test_rep/jenkins以下がチェックアウトされる。

共有コード置き場準備

リポジトリ(file:///f:test/test_rep)にjenkinsディレクトリ追加。以下のように共有コードを配置してコミット。
jenkins=DefaultVersionに指定した値

file:///f:test/test_rep/jenkins
+- src                     # Groovy source files
+- vars
|   +- runBat.groovy       # global
+- resources               # resource files (external libraries only)
|   +- org
|       +- foo
|           +- my_bat.bat   # static helper data
runBat.groovy
def call() {
    def myBat = libraryResource'org/foo/my_bat.bat'
    return bat(myBat)
}
my_bat.bat
dir

ジョブ(Pipeline)作成

Blue OceanNew Pipelineを選択すると「GitHubかBitbucketか..?」と聞かれて「どれでもないんじゃ」となるので、Classic Item Creationを選択。従来の新規ジョブ作成画面が表示される。
パイプラインを選択してOK。
パイプラインは以下のように記述。

Jenkinsfile
@Library('test-lib') _
//'test-lib' = Global Pipeline LibrariesのNameに入れた値
//vars以下を読み込む場合には_(アンダースコア)
//src以下を読み込む場合はimport文を使用
pipeline {
    agent any

    stages {
        stage('test') {
            steps {
                runMyBat()
            }
        }
    }
}

classを利用する

複雑な処理を記述する場合はclassが利用できる。src下にgroovyコードを配置する必要がある。この例の場合はfile:///f:test/test_rep/jenkins/src/org/foo/BatRunner.groovy

src/org/foo/BatRunner.groovy
package org.foo

class BatRunner {
    def script //WorkflowScript(Jenkinsfile)のインスタンス
    //Jenkinsfileからthisを渡しておくとJenkinsfileで利用できるbatなどの関数が呼べる
    BatRunner(script) {
        this.script = script
    }
    def run() {
        this.script.echo "script => " + script.getClass().toString() //script => class WorkflowScript
        script.bat "dir"
    }
}
Jenkinsfile
@Library('test-lib') import org.foo.BatRunner
//'test-lib' = Global Pipeline LibrariesのNameに入れた値
def runner = new BatRunner(this) //定義の位置は要検討
pipeline {
    agent any

    stages {
        stage('test') {
            steps {
                //Declarative Pipelineでメソッドを呼ぶ場合はscriptブロック内のみ
                script {
                    runner.run()
                }
            }
        }
    }
}

実行

ビルド実行(Run)してdirの結果が表示されればOK

メモ

  • groovyファイルのエディタとしてVisual Studio Codeが使える
  • hoge()と書くとvars/hoge.groovycall関数が呼び出される
huging
知識を蓄積します
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away