software:jenkins
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| software:jenkins [2023/11/27 09:55] – [(3) Windows 11/10 Home の場合、User の変更] oga | software:jenkins [2023/11/27 10:38] (現在) – [class 定義] oga | ||
|---|---|---|---|
| 行 69: | 行 69: | ||
| - Agent | - Agent | ||
| - Jenkins の管理 → ノードの管理 | - Jenkins の管理 → ノードの管理 | ||
| - | - master も使う場合、master → 設定 → ラベルに任意の名前を設定 (windows など) | + | - master |
| - 新規ノード作成 → ノード名設定、Permanent Agent On → OK | - 新規ノード作成 → ノード名設定、Permanent Agent On → OK | ||
| * 必要に応じて追加 | * 必要に応じて追加 | ||
| 行 77: | 行 77: | ||
| ===== Linux ===== | ===== Linux ===== | ||
| + | |||
| + | ==== 直接 install する場合 ==== | ||
| Ubuntu, Debian 等 | Ubuntu, Debian 等 | ||
| 行 82: | 行 84: | ||
| - install | - install | ||
| * < | * < | ||
| - | $ sudo apt install openjdk-11-jdk | + | $ sudo apt install openjdk-17-jdk |
| $ sudo apt install jenkins | $ sudo apt install jenkins | ||
| </ | </ | ||
| - ブラウザで http:// | - ブラウザで 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 追加 | ||
| 行 122: | 行 167: | ||
| <code groovy> | <code groovy> | ||
| // ローダー | // ローダー | ||
| - | def script_lib= load " | + | def lib= load( " |
| - | script_lib.lib_main() | + | lib.lib_main() |
| </ | </ | ||
| 行 139: | 行 184: | ||
| ==== 外部コードのプロパティ ==== | ==== 外部コードのプロパティ ==== | ||
| - | 外部コード上で変数に値を保存しておいて、それを参照することはできない。 | + | 外部コード上で直接変数に値を保存しておいて、それを参照する場合は def ではなく this を使う。変数宣言は return this を返す実行コンテキストのローカル変数とみなされるため。 |
| <code groovy> | <code groovy> | ||
| 行 154: | 行 199: | ||
| </ | </ | ||
| - | 変数宣言は return | + | <code groovy> |
| + | // library_code.groovy | ||
| + | |||
| + | this.LocalPath= ' | ||
| + | |||
| + | def getLocalPath() | ||
| + | { | ||
| + | return LocalPath | ||
| + | } | ||
| + | |||
| + | return this | ||
| + | </ | ||
| - | もし上記のような使い方をしたい場合は、@Field を使う。 | + | どうしても def で宣言しておきたい場合は @Field を使う。 |
| <code groovy> | <code groovy> | ||
| 行 166: | 行 222: | ||
| def getLocalPath() | def getLocalPath() | ||
| { | { | ||
| - | return LocalPath | + | return LocalPath |
| } | } | ||
| 行 194: | 行 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 を複数回読み込むと多重定義エラーになる。 | ||
| 行 211: | 行 325: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | ただし node() 命令の中でさらに node() 命令を使った場合、同じ自分自身の場合も executor を消費する。 | ||
| + | |||
| + | 例えばすでに agent01 上で走っている場合に中でさらに node( ' | ||
| + | このとき割当可能な executor がない場合はデッドロックする。 | ||
| + | そのため入れ子になった node() 命令を多用する場合は、node の設定で「同時実行数」を多めに設定しておいた方が良い。 | ||
software/jenkins.1701046541.txt.gz · 最終更新: by oga
