software:jenkins
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
software:jenkins [2023/11/27 10:20] – [外部コードの読み込み] oga | software:jenkins [2023/11/27 10:38] (現在) – [class 定義] oga | ||
---|---|---|---|
行 250: | 行 250: | ||
+ | ==== class 定義 ==== | ||
+ | |||
+ | 外部スクリプトファイル内で class 定義ができるが、groovy の場合実行するコードコンパイル時に型名が判明していなければならない。 | ||
+ | そのため load した script 内ではその class 名を使用することができない。 | ||
+ | |||
+ | <code groovy> | ||
+ | def lib= load( " | ||
+ | def obj= new LibClass() | ||
+ | </ | ||
+ | |||
+ | <code groovy> | ||
+ | // LibClass.groovy | ||
+ | class LibClass { | ||
+ | ~ | ||
+ | } | ||
+ | return this | ||
+ | </ | ||
+ | |||
+ | ↓ ローダーを用意し、Lib と実行スクリプトに分ける必要あり | ||
+ | |||
+ | <code groovy> | ||
+ | def lib= load( " | ||
+ | load( " | ||
+ | </ | ||
+ | |||
+ | <code groovy> | ||
+ | // main.groovy | ||
+ | def obj= new LibClass() | ||
+ | </ | ||
+ | |||
+ | また class 内では jenkins のデフォルト context が無効なので、node, | ||
+ | 必ず実行中の context を明示的に渡す必要がある。以下の例のように必ず **lib.** をつける必要あり。 | ||
+ | |||
+ | <code groovy> | ||
+ | class LibClass { | ||
+ | def lib= null | ||
+ | def LibClass( lib_ ) | ||
+ | { | ||
+ | this.lib= lib_ | ||
+ | } | ||
+ | def steps() | ||
+ | { | ||
+ | lib.node( ' | ||
+ | lib.stage( ' | ||
+ | lib.println( " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code groovy> | ||
+ | // main.groovy | ||
+ | def obj= new LibClass( this ) | ||
+ | </ | ||
+ | |||
+ | |||
+ | また class 名は global な namespace に属するため、class 定義が含まれる script を複数回読み込むと多重定義エラーになる。 | ||
行 267: | 行 325: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | ただし node() 命令の中でさらに node() 命令を使った場合、同じ自分自身の場合も executor を消費する。 | ||
+ | |||
+ | 例えばすでに agent01 上で走っている場合に中でさらに node( ' | ||
+ | このとき割当可能な executor がない場合はデッドロックする。 | ||
+ | そのため入れ子になった node() 命令を多用する場合は、node の設定で「同時実行数」を多めに設定しておいた方が良い。 | ||
software/jenkins.1701048007.txt.gz · 最終更新: 2023/11/27 10:20 by oga