software:jenkins
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
software:jenkins [2023/11/27 09:56] – [(4) その他設定] oga | software:jenkins [2023/11/27 10:38] (現在) – [class 定義] oga | ||
---|---|---|---|
行 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.1701046617.txt.gz · 最終更新: 2023/11/27 09:56 by oga