software:jenkins
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| software:jenkins [2023/11/27 10:03] – [Linux] oga | software:jenkins [2023/11/27 10:38] (現在) – [class 定義] oga | ||
|---|---|---|---|
| 行 116: | 行 116: | ||
| ++++ | ++++ | ||
| + | ==== 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 追加 | ||
| 行 151: | 行 167: | ||
| <code groovy> | <code groovy> | ||
| // ローダー | // ローダー | ||
| - | def script_lib= load " | + | def lib= load( " |
| - | script_lib.lib_main() | + | lib.lib_main() |
| </ | </ | ||
| 行 168: | 行 184: | ||
| ==== 外部コードのプロパティ ==== | ==== 外部コードのプロパティ ==== | ||
| - | 外部コード上で変数に値を保存しておいて、それを参照することはできない。 | + | 外部コード上で直接変数に値を保存しておいて、それを参照する場合は def ではなく this を使う。変数宣言は return this を返す実行コンテキストのローカル変数とみなされるため。 |
| <code groovy> | <code groovy> | ||
| 行 183: | 行 199: | ||
| </ | </ | ||
| - | 変数宣言は return | + | <code groovy> |
| + | // library_code.groovy | ||
| + | |||
| + | this.LocalPath= ' | ||
| + | |||
| + | def getLocalPath() | ||
| + | { | ||
| + | return LocalPath | ||
| + | } | ||
| + | |||
| + | return this | ||
| + | </ | ||
| - | もし上記のような使い方をしたい場合は、@Field を使う。 | + | どうしても def で宣言しておきたい場合は @Field を使う。 |
| <code groovy> | <code groovy> | ||
| 行 195: | 行 222: | ||
| def getLocalPath() | def getLocalPath() | ||
| { | { | ||
| - | return LocalPath | + | return LocalPath |
| } | } | ||
| 行 223: | 行 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 を複数回読み込むと多重定義エラーになる。 | ||
| 行 240: | 行 325: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | ただし node() 命令の中でさらに node() 命令を使った場合、同じ自分自身の場合も executor を消費する。 | ||
| + | |||
| + | 例えばすでに agent01 上で走っている場合に中でさらに node( ' | ||
| + | このとき割当可能な executor がない場合はデッドロックする。 | ||
| + | そのため入れ子になった node() 命令を多用する場合は、node の設定で「同時実行数」を多めに設定しておいた方が良い。 | ||
software/jenkins.1701047024.txt.gz · 最終更新: by oga
