4.3. Jenkins スレーブ


4.3.1. 概要

OpenShift Online では、Jenkins スレーブとして使用するのに適したイメージを 3 つ (BaseMaven および Node.js) 提供します。

1 番目は、Jenkins スレーブのベースイメージです。

  • 必須のツール (ヘッドレス Java、Jenkins JNLP クライアント) および役立つツール (git、tar、zip、nss など) の両方を取り入れます。
  • JNLP スレーブをエントリーポイントとして確立します。
  • Jenkins ジョブ内からコマンドラインの操作を呼び出す oc クライアントツールが含まれます。
  • CentOS および RHEL イメージ両方に対して Dockerfile を提供します。

ベースイメージを拡張するイメージがさらに 2 つ以上提供されます。

Maven および Node.js Jenkins スレーブイメージには、CentOS および RHEL 両方用の Dockerfiles が含まれており、新規スレーブイメージをビルドする場合に参照できます。contrib および contrib/bin サブディレクトリーにも注目してください。このサブディレクトリーでは、イメージの設定ファイルや実行可能なスクリプトの挿入が可能です。

重要

使用する OpenShift Online バージョンに適したスレーブイメージのバージョンを使用、継承するようにしてください。スレーブイメージに埋め込まれた oc クライアントバージョンが OpenShift Online バージョンと互換性がない場合には、予期せぬ動作が発生する可能性があります。

4.3.2. イメージ

RHEL 7 イメージは、Red Hat レジストリーから入手できます。

$ docker pull registry.access.redhat.com/openshift3/jenkins-slave-base-rhel7
$ docker pull registry.access.redhat.com/openshift3/jenkins-slave-maven-rhel7
$ docker pull registry.access.redhat.com/openshift3/jenkins-slave-nodejs-rhel7

4.3.3. 設定およびカスタマイズ

4.3.3.1. 環境変数

各 Jenkins スレーブコンテナーは、以下の環境変数で設定できます。

  • OPENSHIFT_JENKINS_JVM_ARCH

    x86_64 または i386 に設定して、Jenkins スレーブエージェントのホストに使用する JVM を上書きします。メモリー効率を確保するため、メモリー制限が 2 GiB のコンテナーで実行される場合には、Jenkins スレーブイメージはデフォルトで 32 ビットの JVM を動的に使用します。

  • JAVA_MAX_HEAP_PARAM
    CONTAINER_HEAP_PERCENT (デフォルト: 0.5、50%)
    JNLP_MAX_HEAP_UPPER_BOUND_MB

    これらの値は Jenkins スレーブエージェントの JVM の最大ヒープサイズを制御します。JAVA_MAX_HEAP_PARAM が設定されている場合には (設定例: -Xmx512m)、この値が優先されます。設定されていない場合には、最大ヒープサイズは動的に、コンテナーメモリー制限の CONTAINER_HEAP_PERCENT% (設定例: 0.5、50%) として計算され、オプションで JNLP_MAX_HEAP_UPPER_BOUND_MB MiB (設定例: 512) を上限とします。

    デフォルトでは Jenkins スレーブエージェントの JVM の最大ヒープサイズは、上限なしで、コンテナーメモリー制限の 50% に設定されます。

  • JAVA_INITIAL_HEAP_PARAM
    CONTAINER_INITIAL_PERCENT

    これらの値は Jenkins スレーブエージェントの JVM の初期ヒープサイズを制御します。JAVA_INITIAL_HEAP_PARAM が設定されている場合には (設定例: -Xmx32m)、この値が優先されます。設定されていない場合には、初期ヒープサイズは動的に、コンテナーメモリー制限の CONTAINER_INITIAL_PERCENT% (設定例: 0.1、10%) として計算されます。

    デフォルトでは、初期のヒープサイズは JVM に依存します。

  • CONTAINER_CORE_LIMIT

    設定されている場合には、内部の JVM スレッドのサイジング数に使用するコアの数を整数で指定します。設定例: 2

  • JAVA_TOOL_OPTIONS (デフォルト: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Dsun.zip.disableMemoryMapping=true)

    対象のコンテナーで実行中のすべての JVM が従うオプションを指定します。この値の上書きは推奨していません。

  • JAVA_GC_OPTS (デフォルト: -XX:+UseParallelGC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90)

    Jenkins スレーブエージェントの JVM ガーベッジコレクションのパラメーターを指定します。この値の上書きは推奨していません。

  • JNLP_JAVA_OVERRIDES

    Jenkins スレーブエージェントの JVM の追加オプションを指定します。これらのオプションは、上記の Java オプションなどその他すべてのオプションに追加され、必要に応じてそれらの値のいずれかを上書きするのに使用できます。追加オプションがある場合には、スペースで区切ります。オプションにスペース文字が含まれる場合には、バックスラッシュでエスケープしてください。設定例: -Dfoo -Dbar; -Dfoo=first\ value -Dbar=second\ value

4.3.4. 使用法

4.3.4.1. メモリーの要件

Jenkins JNLP エージェントのホストや、Java アプリケーション (例: javac、Maven または Gradle) の実行に、Jenkins スレーブのすべてにおいて JVM を使用します。Jenkins スレーブが使用する JVM のチューニングについての背景情報は、 OpenShift Online での OpenJDK のサイジングについて参照してください。

メモリー効率に関して、メモリー制限が 2 GiB 以下に指定されたコンテナーで実行中の場合には、デフォルトで Jenkins イメージが動的に 32 ビットの JVMを使用します。この動作は、OPENSHIFT_JENKINS_JVM_ARCH 環境変数で上書きできます。JVM の選択は、デフォルトでスレーブトコンテナー内の Jenkins JNLP エージェントおよびその他の Java プロセスの両方に適用されます。

デフォルトでは、Jenkins JVM エージェントはヒープにコンテナーメモリー制限の 50% を使用します。この値は、CONTAINER_HEAP_PERCENT の環境変数で変更可能です。また、上限を指定することも、すべて上書きすることも可能です。詳しい情報は、「環境変数」を参照してください。

デフォルトでは、パイプラインから実行されるシェルスクリプトや oc コマンドなど、Jenkins スレーブコンテナーで実行される他の全プロセスでは、OOM kill を呼び出さずに、メモリー制限の残り 50% を超えたメモリーを使用できる可能性が低い点を考慮してください。

デフォルトでは、Jenkins スレーブコンテナーで実行される他の JVM プロセスは、最大でコンテナーメモリー制限の 25% をヒープに使用します。これは、多くのビルドワークロード用にチューニングする必要がある場合があります。詳細は、OpenShift Online での OpenJDK のサイジングについて参照してください。

Jenkins スレーブコンテナーのメモリー要求や制限の指定に関する情報は、Jenkins ドキュメントを参照してください。

4.3.4.1.1. Gradle ビルド

OpenShift の Jenkins スレーブで Gradle ビルドをホストすると、Jenkins JNLP エージェントおよび Gradle JVM に加え、Gradle が 3 番目の JVM を起動してテストを実行するので、複雑性が増します。

OpenShift での JVM のチューニングに関する参考情報は、OpenShift Online での OpenJDK のサイジングについて参照してください。

以下の設定は、OpenShift 上のメモリーに制約がある Jenkins スレーブで Gradle ビルドを実行する場合の開始点として推奨されます。必要に応じて、後で設定を緩和することができます。

  • gradle.properties ファイルに org.gradle.daemon=false を追加して、long-lived gradle デーモンを無効にするようにします。
  • gradle.properties ファイルで org.gradle.parallel=true が設定されていないこと、また、コマンドラインの引数として --parallel が指定されていないことを確認して、並行ビルドの実行を無効にします。
  • build.gradle ファイルでの java { options.fork = false } を設定して、プロセス以外で Java がコンパイルされないようにします。
  • build.gradle ファイルで test { maxParallelForks = 1 } が設定されていることを確認して、複数の追加テストプロセスを無効にします。
  • OpenShift Online での OpenJDK のサイジングに従い、GRADLE_OPTS, JAVA_OPTS または JAVA_TOOL_OPTIONS の環境変数で、gradle JVM メモリーパラメーターを上書きします。
  • buile.gradle の maxHeapSize および jvmArgs の設定、または -Dorg.gradle.jvmargs コマンドラインの引数で、Gradle テスト JVM に最大ヒープサイズおよび JVM の引数を設定します。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.