ユーザ用ツール

サイト用ツール


software:jenkins

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
software:jenkins [2023/11/27 10:25] – [Agent の指定] ogasoftware:jenkins [2023/11/27 10:38] (現在) – [class 定義] oga
行 250: 行 250:
  
  
 +==== class 定義 ====
 +
 +外部スクリプトファイル内で class 定義ができるが、groovy の場合実行するコードコンパイル時に型名が判明していなければならない。
 +そのため load した script 内ではその class 名を使用することができない。
 +
 +<code groovy>
 +def lib= load( "LibClass.groovy" )
 +def obj= new LibClass()   // ← エラー、このコードコンパイル時点で LibClass が定義されていないため
 +</code>
 +
 +<code groovy>
 +// LibClass.groovy
 +class LibClass {
 +
 +}
 +return this
 +</code>
 +
 +↓ ローダーを用意し、Lib と実行スクリプトに分ける必要あり
 +
 +<code groovy>
 +def lib= load( "LibClass.groovy" )
 +load( "main.groovy" )
 +</code>
 +
 +<code groovy>
 +// main.groovy
 +def obj= new LibClass()   // ← 成功
 +</code>
 +
 +また class 内では jenkins のデフォルト context が無効なので、node, stage, println などの jenkins の基本命令ですら直接実行することができなくなる。
 +必ず実行中の context を明示的に渡す必要がある。以下の例のように必ず **lib.** をつける必要あり。
 +
 +<code groovy>
 +class LibClass {
 +    def lib= null
 +    def LibClass( lib_ )
 +    {
 +        this.lib= lib_
 +    }
 +    def steps()
 +    {
 +        lib.node( 'agent01' ){
 +            lib.stage( 'stage' ){
 +                lib.println( "~" )
 +            }
 +        }
 +    }
 +}
 +</code>
 +
 +<code groovy>
 +// main.groovy
 +def obj= new LibClass( this )
 +</code>
 +
 +
 +また class 名は global な namespace に属するため、class 定義が含まれる script を複数回読み込むと多重定義エラーになる。
  
  
software/jenkins.1701048338.txt.gz · 最終更新: 2023/11/27 10:25 by oga

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki