software:jenkins
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
software:jenkins [2021/10/24 12:54] – [(4) その他設定] oga | software:jenkins [2023/11/27 10:25] – [Agent の指定] oga | ||
---|---|---|---|
行 5: | 行 5: | ||
==== (1) jenkins install ==== | ==== (1) jenkins install ==== | ||
- | - OpenJDK 11 install | + | - OpenJDK |
* https:// | * https:// | ||
- | * jenkins | + | * jenkins で使用するなら zip 版を適当なフォルダに展開するだけで OK |
- jenkins install | - jenkins install | ||
* https:// | * https:// | ||
行 16: | 行 16: | ||
* "Run service as local or domain user:" | * "Run service as local or domain user:" | ||
* 任意のユーザーを入力可能。事前にサービスとしてログオンの設定が必要 | * 任意のユーザーを入力可能。事前にサービスとしてログオンの設定が必要 | ||
- | * ローカルセキュリティポリシー | + | * Windows Pro のみ: Start Menu から |
- port 設定 | - port 設定 | ||
+ | * 任意。デフォルトだと 8080 | ||
- OpenJDK のインストールパス選択 | - OpenJDK のインストールパス選択 | ||
+ | * 1 でダウンロード&展開したフォルダを入力 | ||
- install | - install | ||
- browser で initialAdminPassword を入力 | - browser で initialAdminPassword を入力 | ||
- ユーザー作成 | - ユーザー作成 | ||
- おすすめ plugin のインストール | - おすすめ plugin のインストール | ||
+ | * またはカスタムで plugin を選択&不要なもののチェクを外す | ||
==== (2) 必要な場合のみ Jenkins HOME (workspace path) の変更 ==== | ==== (2) 必要な場合のみ Jenkins HOME (workspace path) の変更 ==== | ||
+ | UE5/UE4 では workspace のパスが深すぎるとビルドに失敗するため、できるだけ浅い階層への変更が望ましい。 | ||
- コンピューターの管理 → サービスとアプリケーション → サービス → Jenkins 停止 | - コンピューターの管理 → サービスとアプリケーション → サービス → Jenkins 停止 | ||
行 39: | 行 42: | ||
- | ==== (3) Windows 10 Home の場合、User の変更 ==== | + | ==== (3) Windows |
+ | |||
+ | Windows Pro かつ 2 の選択時に「Run service as local or domain user」を選択している場合は不要。 | ||
+ | |||
- 先に Jenkins HOME を別の絶対パスで指定したフォルダに移動しておく | - 先に Jenkins HOME を別の絶対パスで指定したフォルダに移動しておく | ||
行 50: | 行 57: | ||
- Plugin | - Plugin | ||
- Jenkins の管理 → プラグインの管理 | - Jenkins の管理 → プラグインの管理 | ||
+ | * P4 Plugin, Slack Notification, | ||
- 利用可能タブで検索して必要なものにチェックし Install without restart | - 利用可能タブで検索して必要なものにチェックし Install without restart | ||
- 全部インストールしたらリスタート | - 全部インストールしたらリスタート | ||
行 55: | 行 63: | ||
- Jenkins の管理 → システムの設定 | - Jenkins の管理 → システムの設定 | ||
- グローバルプロパティの環境変数に、共通で使う設定を登録しておく | - グローバルプロパティの環境変数に、共通で使う設定を登録しておく | ||
+ | - git 名の変更 | ||
+ | - Jenkins の管理 → Global Tool Configuration | ||
+ | - GIt の「Git実行形式へのパス」を " | ||
+ | * これをしておかないと、Windows Master から Linux Agent を呼び出した場合に GitSCM の checkout が失敗する | ||
+ | - Agent | ||
+ | - Jenkins の管理 → ノードの管理 | ||
+ | - master (controller) も使う場合、master → 設定 → ラベルに任意の名前を設定 (controller, | ||
+ | - 新規ノード作成 → ノード名設定、Permanent Agent On → OK | ||
+ | * 必要に応じて追加 | ||
+ | * Linux Agent は ssh 設定 + openjdk だけで利用できる。 | ||
+ | ---- | ||
+ | ===== Linux ===== | ||
+ | |||
+ | ==== 直接 install する場合 ==== | ||
+ | |||
+ | Ubuntu, Debian 等 | ||
+ | |||
+ | - install | ||
+ | * < | ||
+ | $ sudo apt install openjdk-17-jdk | ||
+ | $ sudo apt install jenkins | ||
+ | </ | ||
+ | - ブラウザで http:// | ||
+ | |||
+ | |||
+ | ==== docker を使う場合 ==== | ||
+ | |||
+ | * https:// | ||
+ | |||
+ | - mkdir jenkins | ||
+ | - cd jenkins | ||
+ | - mkdir jenkins_home | ||
+ | - vi docker-compose.yml | ||
+ | - docker compose pull | ||
+ | - docker compose up -d | ||
+ | |||
+ | ++++docker-compose.yml| | ||
+ | <code yml> | ||
+ | version: " | ||
+ | services: | ||
+ | jenkins: | ||
+ | container_name: | ||
+ | image: jenkins/ | ||
+ | restart: always | ||
+ | ports: | ||
+ | - 8080:8080 | ||
+ | volumes: | ||
+ | - ./ | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | ==== Linux agent の作成 ==== | ||
+ | |||
+ | - Windows の Jenkins の Agent として使用する場合は git の設定に注意 | ||
+ | * デフォルトで git.exe が登録されているため Linux でエラーになる | ||
+ | - Jenkins の管理 → Global Tool Configuration | ||
+ | - GIt の「Git実行形式へのパス」を “git.exe” から “git” のみに変更 | ||
+ | - Linux 側で sudo apt install openjdk-17-jre | ||
+ | - Linux 側で ssh 設定 | ||
+ | - sudo apt install ssh | ||
+ | - ssh-keygen -t ed25519 -C $HOST | ||
+ | - sudo vi / | ||
+ | - vi ~/ | ||
+ | - Jenkins 側 | ||
+ | - Credentials → SSH User name and Secret Key | ||
+ | - global seculity → Git Host Key Verification Configuration → Accept first connection | ||
+ | - Node 追加 | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
===== Pipeline の設定 ===== | ===== Pipeline の設定 ===== | ||
+ | |||
+ | - 新規ジョブ作成 → パイプライン | ||
+ | |||
==== SCM ポーリング ==== | ==== SCM ポーリング ==== | ||
* Pipeline script で SCM ポーリングを行う場合は、一度スクリプトを走らせておく必要あり。 | * Pipeline script で SCM ポーリングを行う場合は、一度スクリプトを走らせておく必要あり。 | ||
+ | * 以前実行した script 中に checkout コマンド (poll:true) ある場合に、そのリポジトリがポーリング対象になる。 | ||
+ | * スクリプトコードを登録しただけではポーリングが行われない。 | ||
+ | * リポジトリは複数存在していても良い。 | ||
+ | |||
+ | <code groovy> | ||
+ | def script_repo= " | ||
+ | checkout changelog: false, poll: true, | ||
+ | scm: [$class: ' | ||
+ | branches: [[name: ' | ||
+ | extensions: [[$class: ' | ||
+ | userRemoteConfigs: | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== 外部コードの読み込み ==== | ||
+ | |||
+ | * load コマンドを使って、他のファイルを読み込むことができる。 | ||
+ | * 読み込まれる側のスクリプトは、最後に " | ||
+ | * jenkins 上の設定は最小限のコード (ローダーのみ) にしておいて、続きはリポジトリ内のスクリプトを読み込んで実行することができる。 | ||
+ | |||
+ | <code groovy> | ||
+ | // ローダー | ||
+ | def lib= load( " | ||
+ | lib.lib_main() | ||
+ | </ | ||
+ | |||
+ | <code groovy> | ||
+ | // library_code.groovy | ||
+ | |||
+ | def lib_main() | ||
+ | { | ||
+ | ~ | ||
+ | } | ||
+ | |||
+ | return this | ||
+ | </ | ||
+ | |||
+ | ==== 外部コードのプロパティ ==== | ||
+ | |||
+ | 外部コード上で直接変数に値を保存しておいて、それを参照する場合は def ではなく this を使う。変数宣言は return this を返す実行コンテキストのローカル変数とみなされるため。 | ||
+ | |||
+ | <code groovy> | ||
+ | // library_code.groovy | ||
+ | |||
+ | def LocalPath= ' | ||
+ | |||
+ | def getLocalPath() | ||
+ | { | ||
+ | return LocalPath | ||
+ | } | ||
+ | |||
+ | return this | ||
+ | </ | ||
+ | |||
+ | <code groovy> | ||
+ | // library_code.groovy | ||
+ | |||
+ | this.LocalPath= ' | ||
+ | |||
+ | def getLocalPath() | ||
+ | { | ||
+ | return LocalPath | ||
+ | } | ||
+ | |||
+ | return this | ||
+ | </ | ||
+ | |||
+ | どうしても def で宣言しておきたい場合は @Field を使う。 | ||
+ | |||
+ | <code groovy> | ||
+ | // library_code.groovy | ||
+ | import | ||
+ | |||
+ | @Field def LocalPath= ' | ||
+ | |||
+ | def getLocalPath() | ||
+ | { | ||
+ | return LocalPath | ||
+ | } | ||
+ | |||
+ | return this | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== 名前付き引数 ==== | ||
+ | |||
+ | 名前付き引数による関数呼び出しは、辞書 (Map) に変換される。 | ||
+ | 関数宣言時に引数を Map で宣言する。 | ||
+ | |||
+ | <code groovy> | ||
+ | def message( Map args ) | ||
+ | { | ||
+ | echo args.url | ||
+ | ~ | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code groovy> | ||
+ | message url: ~ | ||
+ | </ | ||
+ | |||
+ | 引数が省略された場合は null になるので、null 判定でデフォルト引数に置き換える事ができる。 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Agent の指定 ==== | ||
+ | |||
+ | 特定の Agent 上でジョブを実行したい場合は node() に引数として名前を与える。 | ||
+ | ノード名や、Node に割り当てたラベルを指定できる。 | ||
+ | |||
+ | <code groovy> | ||
+ | node( ' | ||
+ | ~ // ラベル ' | ||
+ | } | ||
+ | |||
+ | node( ' | ||
+ | ~ // ラベル ' | ||
+ | } | ||
+ | </ | ||
- | * 一度実行した script 中に checkout コマンド | + | ただし node() 命令を使った場合、同じ自分自身の場合も executor を消費する。 |
- | * スクリプトコードを登録しただけではポーリングが行われない | + | |
+ | 例えばすでに agent01 上で走っている場合に中でさらに node( ' | ||
+ | このとき割当可能な executor がない場合はデッドロックする。 | ||
+ | そのため入れ子になった node() 命令を多用する場合は、node の設定で「同時実行数」を多めに設定しておいた方が良い。 | ||
software/jenkins.txt · 最終更新: 2023/11/27 10:38 by oga