ユーザ用ツール

サイト用ツール


software:jenkins

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
software:jenkins [2021/10/29 17:01] – [Agent の指定] ogasoftware:jenkins [2023/11/27 10:38] (現在) – [class 定義] oga
行 5: 行 5:
 ==== (1) jenkins install ==== ==== (1) jenkins install ====
  
-  - OpenJDK 11 install+  - OpenJDK 17 or 11 install
     * https://docs.microsoft.com/ja-jp/java/openjdk/download     * https://docs.microsoft.com/ja-jp/java/openjdk/download
-    * jenkins だけで使用するなら zip 版を適当なフォルダに展開するだけでも OK+    * jenkins で使用するなら zip 版を適当なフォルダに展開するだけで OK
   - jenkins install   - jenkins install
     * https://www.jenkins.io からダウンロードしてインストーラーを起動     * https://www.jenkins.io からダウンロードしてインストーラーを起動
行 16: 行 16:
       * "Run service as local or domain user:"       * "Run service as local or domain user:"
         * 任意のユーザーを入力可能。事前にサービスとしてログオンの設定が必要         * 任意のユーザーを入力可能。事前にサービスとしてログオンの設定が必要
-          * ローカルセキュリティポリシー → ローカルポリシー → ユーザー権利の割当 → サービスとしてログオン にユーザーを追加しておく+          * Windows Pro のみ: Start Menu から ローカルセキュリティポリシー を起動し、ローカルポリシー → ユーザー権利の割当 → サービスとしてログオン にユーザーを追加しておく
     - port 設定     - port 設定
 +      * 任意。デフォルトだと 8080
     - OpenJDK のインストールパス選択     - OpenJDK のインストールパス選択
 +      * 1 でダウンロード&展開したフォルダを入力
     - install     - install
   - browser で initialAdminPassword を入力   - browser で initialAdminPassword を入力
   - ユーザー作成   - ユーザー作成
   - おすすめ plugin のインストール   - おすすめ plugin のインストール
 +    * またはカスタムで plugin を選択&不要なもののチェクを外す
  
 ==== (2) 必要な場合のみ Jenkins HOME (workspace path) の変更 ==== ==== (2) 必要な場合のみ Jenkins HOME (workspace path) の変更 ====
  
 +UE5/UE4 では workspace のパスが深すぎるとビルドに失敗するため、できるだけ浅い階層への変更が望ましい。
  
   - コンピューターの管理 → サービスとアプリケーション → サービス → Jenkins 停止   - コンピューターの管理 → サービスとアプリケーション → サービス → Jenkins 停止
行 39: 行 42:
  
  
-==== (3) Windows 10 Home の場合、User の変更 ====+==== (3) Windows 11/10 Home の場合、User の変更 ==== 
 + 
 +Windows Pro かつ 2 の選択時に「Run service as local or domain user」を選択している場合は不要。 
 + 
  
   - 先に Jenkins HOME を別の絶対パスで指定したフォルダに移動しておく   - 先に Jenkins HOME を別の絶対パスで指定したフォルダに移動しておく
行 50: 行 57:
   - Plugin   - Plugin
     - Jenkins の管理 → プラグインの管理     - Jenkins の管理 → プラグインの管理
 +      * P4 Plugin, Slack Notification, Discord Notifier など
     - 利用可能タブで検索して必要なものにチェックし Install without restart     - 利用可能タブで検索して必要なものにチェックし Install without restart
     - 全部インストールしたらリスタート     - 全部インストールしたらリスタート
行 61: 行 69:
   - Agent   - Agent
     - Jenkins の管理 → ノードの管理     - Jenkins の管理 → ノードの管理
-    - master も使う場合、master → 設定 → ラベルに任意の名前を設定 (windows など)+    - master (controller) も使う場合、master → 設定 → ラベルに任意の名前を設定 (controller, agent01, windows など)
     - 新規ノード作成 → ノード名設定、Permanent Agent On → OK     - 新規ノード作成 → ノード名設定、Permanent Agent On → OK
-      * 必要に応じて追加。+      * 必要に応じて追加 
 +      * Linux Agent は ssh 設定 + openjdk だけで利用できる
  
 ---- ----
 +
 ===== Linux ===== ===== Linux =====
  
-Raspberry Pi 4 +==== 直接 install する場合 ==== 
 + 
 +Ubuntu, Debian 等
  
   - install   - install
     * <code>     * <code>
-$ sudo apt install openjdk-11-jdk+$ sudo apt install openjdk-17-jdk
 $ sudo apt install jenkins $ sudo apt install jenkins
 </code> </code>
   - ブラウザで http://localhsot:8080/ を開いてセットアップ   - ブラウザで http://localhsot:8080/ を開いてセットアップ
  
 +
 +==== docker を使う場合 ====
 +
 +  * https://hub.docker.com/_/jenkins/
 +
 +  - mkdir jenkins
 +  - cd jenkins
 +  - mkdir jenkins_home
 +  - vi docker-compose.yml
 +  - docker compose pull
 +  - docker compose up -d
 +
 +++++docker-compose.yml|
 +<code yml>
 +version: "3"
 +services:
 +  jenkins:
 +    container_name: jenkins
 +    image: jenkins/jenkins:latest
 +    restart: always
 +    ports:
 +      - 8080:8080
 +    volumes:
 +      - ./jenkins_home:/var/jenkins_home
 +</code>
 +++++
 +
 +==== 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 /etc/ssh/sshd_config  (→ PasswordAuthentication no)
 +    - vi ~/.ssh/authorized_keys (→ pubkey 追加)
 +  - Jenkins 側
 +    - Credentials → SSH User name and Secret Key
 +    - global seculity → Git Host Key Verification Configuration → Accept first connection
 +    - Node 追加
  
  
行 112: 行 167:
 <code groovy> <code groovy>
 // ローダー // ローダー
-def script_lib= load "${WORKSPACE}/script/library_code.groovy" +def lib= load"${WORKSPACE}/script/library_code.groovy" ) 
-script_lib.lib_main()+lib.lib_main()
 </code> </code>
  
行 129: 行 184:
 ==== 外部コードのプロパティ ==== ==== 外部コードのプロパティ ====
  
-外部コード上で変数に値を保存しておいて、それを参照することはで+外部コード上で直接変数に値を保存しておいて、それを参照する場合は def く this を使う。変数宣言は return this を返す実行コンテキストのローカル変数とみなされるため
  
 <code groovy> <code groovy>
行 144: 行 199:
 </code> </code>
  
-変数宣言は return this を返す実行コンテキストのローカル変数とみなされため。+<code groovy> 
 +// library_code.groovy 
 + 
 +this.LocalPath= '~' 
 + 
 +def getLocalPath() 
 +
 +    return LocalPath  // ← でき 
 +
 + 
 +return this 
 +</code>
  
-もし上記のような使い方をしたい場合は@Field を使う。+どうしても def で宣言ておきたい場合は @Field を使う。
  
 <code groovy> <code groovy>
行 156: 行 222:
 def getLocalPath() def getLocalPath()
 { {
-    return LocalPath  // ← 期待通りに動く+    return LocalPath  // ← できる
 } }
  
行 179: 行 245:
 message url: ~ message url: ~
 </code> </code>
 +
 +引数が省略された場合は null になるので、null 判定でデフォルト引数に置き換える事ができる。
 +
 +
 +
 +==== 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 を複数回読み込むと多重定義エラーになる。
 +
  
  
行 195: 行 325:
 } }
 </code> </code>
 +
 +ただし node() 命令の中でさらに node() 命令を使った場合、同じ自分自身の場合も executor を消費する。
 +
 +例えばすでに agent01 上で走っている場合に中でさらに node( 'agent01' ){ ~ } を実行すると、一つの job の実行に2つの executor を消費する。
 +このとき割当可能な executor がない場合はデッドロックする。
 +そのため入れ子になった node() 命令を多用する場合は、node の設定で「同時実行数」を多めに設定しておいた方が良い。
  
  
  
software/jenkins.1635494466.txt.gz · 最終更新: 2021/10/29 17:01 by oga

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki