main() blog

プログラムやゲーム、旅、愛する家族について綴っていきます。

【Jenkins】PipelineのスクリプトをGitHubで管理してみよう!

概要

JenkinsでGitHubを使用するためにはGitHub側と連携する必要があります。

今回はJenkinsのジョブのパイプラインでスクリプトのファイルをバージョン管理を行いたいと思います。
Pipeline script from SCMの場合、jenkinsfileなどをGitHubで管理するための方法についてです。

試しにjenkinsfileのファイルに以下のコードを記述して、GitHubにコミットしたリポジトリを用意しています。

#!groovy

// pipelineのテスト.
pipeline {
    agent any
    stages {
        stage('checkout') {
            steps {
                echo 'start stage checkout.'
            }
        }
        
        stage('build') {
            steps {
                echo 'start stage build.'
            }
        }
    }
}

GitのインストールやJenkinsのインストールについてはこちらを参考にしていただければと思います。

www.main-function.com

www.main-function.com

GitHubのPersonal Access Tokenの作成

Jenkins側からGitHubのプライベートリポジトリにアクセスできるようにするために、GitHubのPersonal Access Tokenを作成する必要があります。

アカウントの"Settings" → "Developer settings" → "Personal access tokens" の "Tokens(classic)" を選択します。

・Settingsの画面

・Developer settingsの画面

Tokens(classic)の画面で "Generate new token" を選択します。

今回はプライベートリポジトリへのアクセスが必要なので "repo" のみにチェックを入れています。
ページの下にある "Generate token" を押してトークンを作成します。

トークンが作成されたのでコピーしておきましょう。

Jenkinsの設定

Gitの設定の確認

Gitのパスの設定を確認します。
"Jenkinsの管理" → System Configurationの "Tools" を選択します。
インストール済みGitの項目のGit実行形式へのパスの項目でエラーが出ていないことを確認します。
設定されていない場合はインストールしたgitの実行ファイルのパスを設定します。

認証情報の追加

Jenkinsの認証情報の追加を行います。
"Jenkinsの管理" → "認証情報" → ”System" → "グローバルドメイン" の Add Credentials ボタンを押します。

種類で "ユーザー名とパスワード" を選択します。
ユーザー名にgithubのユーザー名を指定します。
パスワードに先ほどgithubで作成したトークンを指定します。
IDは任意の名前を設定します。
これはJenkins側でユニークなID(名前)にしておく必要があります。

ジョブのパイプラインの設定

パイプラインの項目の定義を "Pipeline script from SCM" を選択します。
SCMで "Git" を選択します。
リポジトリの項目でリポジトリのURLと認証情報、ブランチ指定を設定します。
認証情報で先ほど作成した認証情報を指定します。
ブランチ指定はmasterではなくmainとしているので、ここも変更する必要があります。

実行してgithubから取得されて、jenkinsfileで記述されたスクリプトの処理が成功していることが確認できます。

GitHubからの取得先はjenkinsのワークスペースに取得されているようです。
今回は以下のパスに取得されていることが確認できました。

C:\ProgramData\Jenkins.jenkins\workspace\test-pipeline02

Shared Libraries

複数のpipelineのジョブで使用する共通処理を管理する方法です。

フォルダ構成としては以下の構成にする必要があります。

www.jenkins.io

root/
    +vars
    +resource
    Jenkinsfile

vars以下に共通処理のgroovyファイルを置きます。
vars以下に置いたファイル名がそのままグローバルの変数としてアクセスできるようになります。

Global Librariesの使用方法

Jenkinsの管理 → System → Global Trusted Pipeline Librariesの項目を以下の内容で設定します。

NameをMyTestLibraryとしておきます。
これはjenkinsfileなどのgroovyで@Library()で参照する際の名前となります。
Default versionはGitHubのbranchのmainを指定しておきます。
SCMはGitを選択します。(GitHubもありますが、今回はGitを選択します)
リポジトリと認証情報も設定します。
それ以外はデフォルトのままとします 。

vars以下にmy_test.groovyというファイルを用意します。
このファイルにcall関数を追加すると 'ファイル名()' で呼び出すことができます。

#!groovy

def call( Map params = [:] ) {
    echo "call my_test()"
}

Jenkinsfileの方で関数の呼び出しを行ってみます。

#!groovy

// Global Trusted Pipeline Librariesで指定したNameを指定.
// _ですべてを対象する.
@Library( 'MyTestLibrary' ) _

pipeline {
    agent any
    stages {
        stage('checkout') {
            steps {
                echo 'start stage checkout.'
            }
        }
        
        stage('build') {
            steps {
                echo 'start stage build.'

                // Shared Libiraryの呼び出しのテスト.
                // my_test.groovyのファイル名が関数として呼び出せる.
                my_test()
            }
        }
    }
}

実行するとmy_testが呼び出されていることが確認できます。