Jenkins
Red Hat OpenShift Service on AWS の Jenkins に関する情報
概要
第1章 Jenkins イメージの設定
Red Hat OpenShift Service on AWS には、Jenkins を実行するためのコンテナーイメージがあります。このイメージには Jenkins サーバーインスタンスが含まれており、このインスタンスを使用して継続的なテスト、統合、デリバリーの基本フローを設定できます。
イメージは、Red Hat Universal Base Images (UBI) に基づいています。
Red Hat OpenShift Service on AWS は Jenkins の LTS リリースに準拠しています。Red Hat OpenShift Service on AWS は Jenkins 2.x を含むイメージを提供します。
Red Hat OpenShift Service on AWS の Jenkins イメージは、Quay.io または registry.redhat.io で入手できます。
以下に例を示します。
$ podman pull registry.redhat.io/ocp-tools-4/jenkins-rhel8:<image_tag>
Jenkins イメージを使用するには、これらのレジストリーから直接アクセスするか、イメージを Red Hat OpenShift Service on AWS のコンテナーイメージレジストリーにプッシュします。さらに、コンテナーイメージレジストリーまたは外部の場所で、対象イメージを参照するイメージストリームを作成することもできます。これにより、Red Hat OpenShift Service on AWS リソースがイメージストリームを参照できるようになります。
ただし、Red Hat OpenShift Service on AWS は、利便性のために、コア Jenkins イメージ用の openshift
namespace でイメージストリームを提供するほか、Red Hat OpenShift Service on AWS と Jenkins の統合用に用意されたサンプルエージェントイメージも提供します。
1.1. 設定とカスタマイズ
Jenkins 認証は、以下の 2 つの方法で管理できます。
- Red Hat OpenShift Service on AWS ログインプラグインが提供する Red Hat OpenShift Service on AWS OAuth 認証。
- Jenkins が提供する標準認証。
1.1.1. Red Hat OpenShift Service on AWS OAuth 認証
OAuth 認証をアクティブ化するには、Jenkins UI の Configure Global Security パネルでオプションを設定するか、Jenkins の Deployment configuration の OPENSHIFT_ENABLE_OAUTH
環境変数を false
以外に設定します。これにより、Red Hat OpenShift Service on AWS ログインプラグインがアクティブ化されます。このプラグインは、Pod データから、または Red Hat OpenShift Service on AWS の API サーバーと対話して設定情報を取得します。
有効な認証情報は、Red Hat OpenShift Service on AWS のアイデンティティープロバイダーによって制御されます。
Jenkins はブラウザーおよびブラウザー以外のアクセスの両方をサポートします。
有効なユーザーは、ログイン時に Jenkins 認証マトリックスに自動的に追加されます。その際に、Red Hat OpenShift Service on AWS のロールによって、ユーザーに付与される特定の Jenkins パーミッションが指定されます。デフォルトで使用されるロールは、事前に定義される admin
、edit
、および view
です。ログインプラグインは、Jenkins が実行しているプロジェクトまたは namespace のそれらのロールに対して自己 SAR 要求 (self-SAR request) を実行します。
admin
ロールを持つユーザーには、従来の Jenkins 管理ユーザーパーミッションがあります。ユーザーのパーミッションは、ロールが edit
、view
になるほど少なくなります。
デフォルトの Red Hat OpenShift Service on AWS の admin
、edit
、および view
ロールと、Jenkins インスタンスでそれらのロールに割り当てられる Jenkins パーミッションは設定可能です。
Red Hat OpenShift Service on AWS の Pod で Jenkins を実行する場合、ログインプラグインは、Jenkins を実行している namespace で openshift-jenkins-login-plugin-config
という名前の config map を検索します。
ログインプラグインがその config map を検出して読み取ることができる場合は、Jenkins パーミッションマッピングにロールを定義できます。具体的には以下を実行します。
- ログインプラグインは、config map 内のキーと値のペアを、Red Hat OpenShift Service on AWS のロールマッピングに対する Jenkins パーミッションとして処理します。
- キーは Jenkins パーミッショングループの短い ID と Jenkins パーミッションの短い ID で、この 2 つはハイフンで区切られています。
-
Red Hat OpenShift Service on AWS のロールに
Overall Jenkins Administer
パーミッションを追加する場合、キーはOverall-Administer
である必要があります。 - パーミッショングループおよびパーミッション ID が利用可能であるかどうかを把握するには、Jenkins コンソールのマトリックス認証ページに移動し、グループの ID とグループが提供するテーブルの個々のパーミッションを確認します。
- キーと値のペアの値は、パーミッションの適用先となる Red Hat OpenShift Service on AWS ロールのリストです。各ロールはコンマで区切ります。
-
Overall Jenkins Administer
パーミッションをデフォルトのadmin
およびedit
ロールの両方に追加し、作成した新規の jenkins ロールも追加する場合は、キーのOverall-Administer
の値がadmin,edit,jenkins
になります。
Red Hat OpenShift Service on AWS の OAuth を使用する場合、Red Hat OpenShift Service on AWS の Jenkins イメージに管理者権限を使用して事前設定されている admin
ユーザーには、管理者権限が付与されません。この権限を付与するには、Red Hat OpenShift Service on AWS クラスター管理者が Red Hat OpenShift Service on AWS のアイデンティティープロバイダーでそのユーザーを明示的に定義し、そのユーザーに admin
ロールを割り当てる必要があります。
保存される Jenkins ユーザーのパーミッションは、初回のユーザー作成後に変更できます。Red Hat OpenShift Service on AWS ログインプラグインは、Red Hat OpenShift Service on AWS の API サーバーをポーリングしてパーミッションを取得し、ユーザーごとに Jenkins に保存されているパーミッションを、Red Hat OpenShift Service on AWS から取得したパーミッションを更新します。Jenkins UI を使用して Jenkins ユーザーのパーミッションを更新する場合には、プラグインが次回に Red Hat OpenShift Service on AWS をポーリングするタイミングで、パーミッションの変更が上書きされます。
ポーリングの頻度は OPENSHIFT_PERMISSIONS_POLL_INTERVAL
環境変数で制御できます。デフォルトのポーリングの間隔は 5 分です。
OAuth 認証を使用して新しい Jenkins サービスを作成するには、テンプレートを使用するのが最も簡単な方法です。
1.1.2. Jenkins 認証
テンプレートを使用せず、イメージが直接実行される場合は、デフォルトで Jenkins 認証が使用されます。
Jenkins の初回起動時には、設定、管理ユーザーおよびパスワードが作成されます。デフォルトのユーザー認証情報は、admin
と password
です。標準の Jenkins 認証を使用する場合に限り、JENKINS_PASSWORD
環境変数を設定してデフォルトのパスワードを設定します。
手順
次のコマンドを実行して、標準の Jenkins 認証を使用する Jenkins アプリケーションを作成します。
$ oc new-app -e \ JENKINS_PASSWORD=<password> \ ocp-tools-4/jenkins-rhel8
1.2. Jenkins 環境変数
Jenkins サーバーは、以下の環境変数で設定できます。
変数 | 定義 | 値と設定の例 |
---|---|---|
|
Jenkins へのログイン時に Red Hat OpenShift Service on AWS ログインプラグインが認証を管理するかどうかを決定します。有効にするには、 |
デフォルト: |
|
標準の Jenkins 認証を使用する際の |
デフォルト: |
|
これらの値は Jenkins JVM の最大ヒープサイズを制御します。 デフォルトでは Jenkins JVM の最大ヒープサイズは、上限なしでコンテナーメモリー制限の 50% に設定されます。 |
|
|
これらの値は Jenkins JVM の初期ヒープサイズを制御します。 デフォルトでは、JVM は初期のヒープサイズを設定します。 |
|
| 設定されている場合は、内部の JVM スレッドのサイジング数に使用するコアの数を整数で指定します。 |
設定例: |
| このコンテナーで実行中のすべての JVM に適用するオプションを指定します。この値の上書きは推奨されません。 |
デフォルト: |
| Jenkins JVM ガーベッジコレクションのパラメーターを指定します。この値の上書きは推奨されません。 |
デフォルト: |
| Jenkins JVM の追加オプションを指定します。これらのオプションは、上記の Java オプションなどその他すべてのオプションに追加され、必要に応じてそれらの値のいずれかを上書きするのに使用できます。追加オプションがある場合は、スペースで区切ります。オプションにスペース文字が含まれる場合は、バックスラッシュでエスケープしてください。 |
設定例: |
| Jenkins への引数を指定します。 | |
|
コンテナーが初めて実行された場合や、 |
設定例: |
| Red Hat OpenShift Service on AWS ログインプラグインが Jenkins に定義されているユーザーごとに関連付けられたパーミッションを Red Hat OpenShift Service on AWS でポーリングする間隔をミリ秒単位で指定します。 |
デフォルト: |
|
Jenkins 設定ディレクトリー用に Red Hat OpenShift Service on AWS の永続ボリューム (PV) を使用してこのイメージを実行する場合、PV は永続ボリューム要求 (PVC) の作成時に割り当てられるため、イメージから PV に設定が転送されるのは、イメージの初回起動時のみです。このイメージを拡張し、初回起動後にカスタムイメージの設定を更新するカスタムイメージを作成する場合、この環境変数を |
デフォルト: |
|
Jenkins 設定ディレクトリー用に Red Hat OpenShift Service on AWS の PV を使用してこのイメージを実行する場合、PV は PVC の作成時に割り当てられるため、イメージから PV にプラグインが転送されるのは、イメージの初回起動時のみです。このイメージを拡張し、初回起動後にカスタムイメージのプラグインを更新するカスタムイメージを作成する場合、この環境変数を |
デフォルト: |
|
Jenkins 設定ディレクトリー用に Red Hat OpenShift Service on AWS の PVC を使用してこのイメージを実行する場合、この環境変数により、致命的なエラーが発生したときに、致命的なエラーのログファイルを保持できます。致命的なエラーのファイルは |
デフォルト: |
|
この値を設定すると、このイメージで提供されるサンプルの Kubernetes プラグイン Pod テンプレートで |
デフォルト: |
|
この値を設定すると、このイメージで提供される |
デフォルト: |
| この値を設定すると、FIPS ノードで実行しているときに JVM がどのように動作するかを制御します。詳細は、FIPS モードでの Red Hat build of OpenJDK 11 の設定 を参照してください。 |
デフォルト: |
1.3. Jenkins へのプロジェクト間のアクセスの提供
同じプロジェクト以外で Jenkins を実行する場合は、プロジェクトにアクセスするために、Jenkins にアクセストークンを提供する必要があります。
手順
次のコマンドを実行して、Jenkins がアクセスする必要があるプロジェクトにアクセスするための適切な権限を持つサービスアカウントのシークレットを特定します。
$ oc describe serviceaccount jenkins
出力例
Name: default Labels: <none> Secrets: { jenkins-token-uyswp } { jenkins-dockercfg-xcr3d } Tokens: jenkins-token-izv1u jenkins-token-uyswp
ここでは、シークレットの名前は
jenkins-token-uyswp
です。次のコマンドを実行して、シークレットからトークンを取得します。
$ oc describe secret <secret name from above>
出力例
Name: jenkins-token-uyswp Labels: <none> Annotations: kubernetes.io/service-account.name=jenkins,kubernetes.io/service-account.uid=32f5b661-2a8f-11e5-9528-3c970e3bf0b7 Type: kubernetes.io/service-account-token Data ==== ca.crt: 1066 bytes token: eyJhbGc..<content cut>....wRA
トークンパラメーターには、Jenkins がプロジェクトにアクセスするために必要とするトークンの値が含まれます。
1.4. Jenkins のボリューム間のマウントポイント
Jenkins イメージはマウントしたボリュームで実行して、設定用に永続ストレージを有効にできます。
-
/var/lib/jenkins
- Jenkins がジョブ定義などの設定ファイルを保存するデータディレクトリーです。
1.5. Source-to-Image による Jenkins イメージのカスタマイズ
Red Hat OpenShift Service on AWS の公式の Jenkins イメージをカスタマイズするには、イメージを Source-to-Image (S2I) ビルダーとして使用できます。
S2I を使用して、カスタムの Jenkins ジョブ定義をコピーしたり、プラグインを追加したり、同梱の config.xml
ファイルを独自のカスタムの設定に置き換えたりできます。
Jenkins イメージに変更を追加するには、以下のディレクトリー構造の Git リポジトリーが必要です。
plugins
- このディレクトリーには、Jenkins にコピーするバイナリーの Jenkins プラグインを含めます。
plugins.txt
- このファイルは、以下の構文を使用して、インストールするプラグインを一覧表示します。
pluginId:pluginVersion
configuration/jobs
- このディレクトリーには、Jenkins ジョブ定義が含まれます。
configuration/config.xml
- このファイルには、カスタムの Jenkins 設定が含まれます。
configuration/
ディレクトリーのコンテンツは /var/lib/jenkins/
ディレクトリーにコピーされるため、このディレクトリーに credentials.xml
などのファイルをさらに追加することもできます。
Red Hat OpenShift Service on AWS で Jenkins イメージをカスタマイズするためのサンプルビルド設定
apiVersion: build.openshift.io/v1 kind: BuildConfig metadata: name: custom-jenkins-build spec: source: 1 git: uri: https://github.com/custom/repository type: Git strategy: 2 sourceStrategy: from: kind: ImageStreamTag name: jenkins:2 namespace: openshift type: Source output: 3 to: kind: ImageStreamTag name: custom-jenkins:latest
1.6. Jenkins Kubernetes プラグインの設定
OpenShift Jenkins イメージにはプリインストールされた Jenkins 用の Kubernetes プラグイン が含まれています。そのため、Kubernetes と Red Hat OpenShift Service on AWS を使用して、複数のコンテナーホストで Jenkins エージェントを動的にプロビジョニングできます。
Kubernetes プラグインを使用するために、Red Hat OpenShift Service on AWS は、Jenkins エージェントとして使用するのに適した OpenShift Agent Base イメージを提供します。
Red Hat OpenShift Service on AWS 4.11 で、OpenShift Jenkins イメージおよび OpenShift Agent Base イメージが registry.redhat.io
の ocp-tools-4
リポジトリーに移動になりました。これにより、Red Hat が Red Hat OpenShift Service on AWS のライフサイクルに関係なくイメージを生成および更新できるようになりました。以前は、これらのイメージは Red Hat OpenShift Service on AWS のインストールペイロードと registry.redhat.io
の openshift4
リポジトリーにありました。
OpenShift Jenkins Maven イメージおよび NodeJS Agent イメージは、Red Hat OpenShift Service on AWS 4.11 のペイロードから削除されました。Red Hat はこれらのイメージを生成しなくなり、registry.redhat.io
の ocp-tools-4
リポジトリーから入手できなくなりました。Red Hat は、Red Hat OpenShift Service on AWS のライフサイクルポリシー に従って、重要なバグ修正やセキュリティー CVE に備えて、これらのイメージの 4.10 以前のバージョンを維持しています。
詳細は、次の「関連情報」セクションの 「OpenShift Jenkins イメージに対する重要な変更」リンクを参照してください。
Maven および Node.js のエージェントイメージは、Kubernetes プラグイン用の Red Hat OpenShift Service on AWS Jenkins イメージの設定内で、Kubernetes Pod テンプレートイメージとして自動的に設定されます。この設定には、Restrict where this project can be run
設定で任意の Jenkins ジョブに適用できる各イメージのラベルが含まれています。ラベルが適用されている場合、ジョブはそれぞれのエージェントイメージを実行する Red Hat OpenShift Service on AWS の Pod で実行されます。
Red Hat OpenShift Service on AWS 4.10 以降では、Kubernetes プラグインを使用して Jenkins エージェントを実行する際に推奨されるパターンは、jnlp
コンテナーと sidecar
コンテナーの両方を含む Pod テンプレートを使用することです。jnlp
コンテナーは、ビルド用の個別の Pod の起動を容易にするために、Red Hat OpenShift Service on AWS Jenkins Base エージェントイメージを使用します。sidecar
コンテナーイメージには、起動した別の Pod 内の特定の言語でビルドするために必要なツールがあります。Red Hat Container Catalog の多くのコンテナーイメージが、openshift
namespace のサンプルイメージストリームで参照されています。Red Hat OpenShift Service on AWS の Jenkins イメージには、このアプローチを例示する sidecar コンテナーを含む java-build
という名前の Pod テンプレートがあります。この Pod テンプレートは、openshift
namespace の Java
イメージストリームによって提供される最新の Java バージョンを使用します。
Jenkins イメージは、Kubernetes プラグイン向けの追加エージェントイメージの自動検出および自動設定も提供します。
Red Hat OpenShift Service on AWS 同期プラグインを使用すると、Jenkins の起動時に、Jenkins イメージが実行中のプロジェクト内、またはプラグインの設定にリストされているプロジェクト内で以下の項目を検索します。
-
role
ラベルがjenkins-agent
に設定されたイメージストリーム。 -
role
アノテーションがjenkins-agent
に設定されたイメージストリームタグ。 -
role
ラベルがjenkins-agent
に設定された config map。
Jenkins イメージは、適切なラベルを持つイメージストリーム、または適切なアノテーションを持つイメージストリームタグを見つけると、対応する Kubernetes プラグイン設定を生成します。このようにして、イメージストリームによって提供されるコンテナーイメージを実行する Pod で実行するように Jenkins ジョブを割り当てることができます。
イメージストリームまたはイメージストリームタグの名前とイメージ参照は、Kubernetes プラグインの Pod テンプレートにある名前およびイメージフィールドにマッピングされます。Kubernetes プラグインの Pod テンプレートのラベルフィールドは、agent-label
キーを使用してイメージストリームまたはイメージストリームタグオブジェクトにアノテーションを設定することで制御できます。これらを使用しない場合には、名前をラベルとして使用します。
Jenkins コンソールにログインして、Pod テンプレート設定を変更しないでください。Pod テンプレートの作成後にこれを行うと、Red Hat OpenShift Service on AWS 同期プラグインが、イメージストリームまたはイメージストリームタグに関連付けられたイメージの変更を検知したときに、Pod テンプレートを置き換え、これらの設定変更を上書きします。新しい設定を既存の設定とマージすることはできません。
より複雑な設定が必要な場合は、config map を使用する方法を検討してください。
適切なラベルを持つ config map が見つかると、Jenkins イメージは、config map のキーと値のデータペイロードの任意の値に、Jenkins および Kubernetes プラグイン Pod テンプレートの設定形式と一致する Extensible Markup Language (XML) が含まれていると想定します。イメージストリームやイメージストリームタグに対する config map の主な利点の 1 つは、すべての Kubernetes プラグイン Pod テンプレートパラメーターを制御できることです。
jenkins-agent
の config map の例:
kind: ConfigMap apiVersion: v1 metadata: name: jenkins-agent labels: role: jenkins-agent data: template1: |- <org.csanchez.jenkins.plugins.kubernetes.PodTemplate> <inheritFrom></inheritFrom> <name>template1</name> <instanceCap>2147483647</instanceCap> <idleMinutes>0</idleMinutes> <label>template1</label> <serviceAccount>jenkins</serviceAccount> <nodeSelector></nodeSelector> <volumes/> <containers> <org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate> <name>jnlp</name> <image>openshift/jenkins-agent-maven-35-centos7:v3.10</image> <privileged>false</privileged> <alwaysPullImage>true</alwaysPullImage> <workingDir>/tmp</workingDir> <command></command> <args>${computer.jnlpmac} ${computer.name}</args> <ttyEnabled>false</ttyEnabled> <resourceRequestCpu></resourceRequestCpu> <resourceRequestMemory></resourceRequestMemory> <resourceLimitCpu></resourceLimitCpu> <resourceLimitMemory></resourceLimitMemory> <envVars/> </org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate> </containers> <envVars/> <annotations/> <imagePullSecrets/> <nodeProperties/> </org.csanchez.jenkins.plugins.kubernetes.PodTemplate>
以下の例は、openshift
namespace のイメージストリームを参照する 2 つのコンテナーを示しています。1 つのコンテナーが、Pod を Jenkins エージェントとして起動するための JNLP コントラクトを処理します。もう 1 つのコンテナーは、特定のコーディング言語でコードを構築するためのツールを備えたイメージを使用します。
kind: ConfigMap apiVersion: v1 metadata: name: jenkins-agent labels: role: jenkins-agent data: template2: |- <org.csanchez.jenkins.plugins.kubernetes.PodTemplate> <inheritFrom></inheritFrom> <name>template2</name> <instanceCap>2147483647</instanceCap> <idleMinutes>0</idleMinutes> <label>template2</label> <serviceAccount>jenkins</serviceAccount> <nodeSelector></nodeSelector> <volumes/> <containers> <org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate> <name>jnlp</name> <image>image-registry.openshift-image-registry.svc:5000/openshift/jenkins-agent-base-rhel8:latest</image> <privileged>false</privileged> <alwaysPullImage>true</alwaysPullImage> <workingDir>/home/jenkins/agent</workingDir> <command></command> <args>\$(JENKINS_SECRET) \$(JENKINS_NAME)</args> <ttyEnabled>false</ttyEnabled> <resourceRequestCpu></resourceRequestCpu> <resourceRequestMemory></resourceRequestMemory> <resourceLimitCpu></resourceLimitCpu> <resourceLimitMemory></resourceLimitMemory> <envVars/> </org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate> <org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate> <name>java</name> <image>image-registry.openshift-image-registry.svc:5000/openshift/java:latest</image> <privileged>false</privileged> <alwaysPullImage>true</alwaysPullImage> <workingDir>/home/jenkins/agent</workingDir> <command>cat</command> <args></args> <ttyEnabled>true</ttyEnabled> <resourceRequestCpu></resourceRequestCpu> <resourceRequestMemory></resourceRequestMemory> <resourceLimitCpu></resourceLimitCpu> <resourceLimitMemory></resourceLimitMemory> <envVars/> </org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate> </containers> <envVars/> <annotations/> <imagePullSecrets/> <nodeProperties/> </org.csanchez.jenkins.plugins.kubernetes.PodTemplate>
Jenkins コンソールにログインして、Pod テンプレート設定を変更しないでください。Pod テンプレートの作成後にこれを行うと、Red Hat OpenShift Service on AWS 同期プラグインが、イメージストリームまたはイメージストリームタグに関連付けられたイメージの変更を検知したときに、Pod テンプレートを置き換え、これらの設定変更を上書きします。新しい設定を既存の設定とマージすることはできません。
より複雑な設定が必要な場合は、config map を使用する方法を検討してください。
Red Hat OpenShift Service on AWS 同期プラグインは、インストール後、Red Hat OpenShift Service on AWS の API サーバーを監視して、イメージストリーム、イメージストリームタグ、および config map の更新を確認し、Kubernetes プラグインの設定を調整します。
以下のルールが適用されます。
-
config map、イメージストリーム、またはイメージストリームタグからラベルまたはアノテーションを削除すると、既存の
PodTemplate
が Kubernetes プラグインの設定から削除されます。 - これらのオブジェクトが削除されると、対応する設定が Kubernetes プラグインから削除されます。
-
適切なラベルおよびアノテーションが付いた
ConfigMap
、ImageStream
、またはImageStreamTag
オブジェクトを作成するか、最初の作成後にラベルを追加すると、Kubernetes プラグイン設定でPodTemplate
が作成されます。 -
config map 形式による
PodTemplate
の場合、PodTemplate
の config map データへの変更は、Kubernetes プラグイン設定のPodTemplate
設定に適用されます。この変更は、config map への変更と変更の間に Jenkins UI を介してPodTemplate
に加えられた変更もオーバーライドします。
Jenkins エージェントとしてコンテナーイメージを使用するには、イメージが、エントリーポイントとしてエージェントを実行する必要があります。詳細は、公式の Jenkins ドキュメント を参照してください。
1.7. Jenkins パーミッション
config map で、Pod テンプレート XML の <serviceAccount>
要素が、作成される Pod に使用される Red Hat OpenShift Service on AWS サービスアカウントである場合に、サービスアカウントの認証情報が Pod にマウントされます。パーミッションは、サービスアカウントに関連付けられ、Red Hat OpenShift Service on AWS のマスターに対して Pod から許可される操作を制御します。
Red Hat OpenShift Service on AWS で動作する Kubernetes プラグインによって起動される Pod に使用するサービスアカウントについては、以下の手順を使用することを検討してください。
Red Hat OpenShift Service on AWS が備えている Jenkins のサンプルテンプレートを使用する場合は、Jenkins が実行されるプロジェクトの edit
ロールで jenkins
サービスアカウントを定義して、マスターの Jenkins Pod にそのサービスアカウントをマウントします。
Jenkins 設定に挿入される 2 つのデフォルトの Maven および NodeJS Pod テンプレートも、Jenkins マスターと同じサービスアカウントを使用するように設定します。
- イメージストリームまたはイメージストリームタグに必要なラベルまたはアノテーションがあるために Red Hat OpenShift Service on AWS 同期プラグインで自動検出される Pod テンプレートがある場合は、Jenkins マスターのサービスアカウントを使用するようにそのテンプレートを設定します。
-
Pod テンプレートの定義を Jenkins と Kubernetes プラグインに渡す他の方法として、使用するサービスアカウントを明示的に指定する必要があります。他の方法には、Jenkins コンソール、Kubernetes プラグインで提供される
podTemplate
パイプライン DSL、または Pod テンプレートの XML 設定をデータとする config map のラベル付けなどが含まれます。 -
サービスアカウントの値を指定しない場合は、
default
サービスアカウントを使用します。 - 使用するサービスアカウントに、Pod 内から操作するプロジェクトを操作するために必要なパーミッションやロールなどが Red Hat OpenShift Service on AWS 内で定義されていることを確認します。
1.8. テンプレートからの Jenkins サービスの作成
テンプレートには各種パラメーターフィールドがあり、事前定義されたデフォルト値ですべての環境変数を定義できます。Red Hat OpenShift Service on AWS は、新しい Jenkins サービスを簡単に作成するためのテンプレートを備えています。Jenkins テンプレートは、クラスター管理者が、クラスターの初期設定時に、デフォルトの openshift
プロジェクトに登録する必要があります。
使用可能な 2 つのテンプレートは共にデプロイメント設定とサービスを定義します。テンプレートはストレージストラテジーに応じて異なります。これは、Jenkins コンテンツが Pod の再起動時に永続するかどうかに影響を与えます。
Pod は、別のノードへの移動時や、デプロイメント設定の更新で再デプロイメントがトリガーされた時に再起動される可能性があります。
-
jenkins-ephemeral
は一時ストレージを使用します。Pod が再起動すると、すべてのデータが失われます。このテンプレートは、開発またはテストにのみ役立ちます。 -
jenkins-persistent
は永続ボリューム (PV) ストアを使用します。データは Pod が再起動されても保持されます。
PV ストアを使用するには、クラスター管理者が Red Hat OpenShift Service on AWS デプロイメントで PV プールを定義する必要があります。
必要なテンプレートを選択したら、テンプレートをインスタンス化して Jenkins を使用できるようにする必要があります。
手順
以下の方法のいずれかを使用して、新しい Jenkins アプリケーションを作成します。
PV:
$ oc new-app jenkins-persistent
または、Pod の再起動で設定が維持されない
emptyDir
タイプボリューム:$ oc new-app jenkins-ephemeral
両方のテンプレートで、それらに対して oc describe
を実行して、オーバーライドに使用できるすべてのパラメーターを確認できます。
以下に例を示します。
$ oc describe jenkins-ephemeral
1.9. Jenkins Kubernetes プラグインの使用
以下の例では、openshift-jee-sample
BuildConfig
オブジェクトにより、Jenkins Maven エージェント Pod が動的にプロビジョニングされます。Pod は Java ソースコードをクローンし、WAR ファイルを作成して、2 番目の BuildConfig
、openshift-jee-sample-docker
を実行します。2 番目の BuildConfig
は、新しい WAR ファイルをコンテナーイメージに階層化します。
Red Hat OpenShift Service on AWS 4.11 で、ペイロードから OpenShift Jenkins Maven イメージおよび NodeJS Agent イメージが削除されました。Red Hat はこれらのイメージを生成しなくなり、registry.redhat.io
の ocp-tools-4
リポジトリーから入手できなくなりました。Red Hat は、Red Hat OpenShift Service on AWS のライフサイクルポリシー に従って、重要なバグ修正やセキュリティー CVE に備えて、これらのイメージの 4.10 以前のバージョンを維持しています。
詳細は、次の「関連情報」セクションの 「OpenShift Jenkins イメージに対する重要な変更」リンクを参照してください。
Jenkins Kubernetes プラグインを使用した BuildConfig
の例
kind: List apiVersion: v1 items: - kind: ImageStream apiVersion: image.openshift.io/v1 metadata: name: openshift-jee-sample - kind: BuildConfig apiVersion: build.openshift.io/v1 metadata: name: openshift-jee-sample-docker spec: strategy: type: Docker source: type: Docker dockerfile: |- FROM openshift/wildfly-101-centos7:latest COPY ROOT.war /wildfly/standalone/deployments/ROOT.war CMD $STI_SCRIPTS_PATH/run binary: asFile: ROOT.war output: to: kind: ImageStreamTag name: openshift-jee-sample:latest - kind: BuildConfig apiVersion: build.openshift.io/v1 metadata: name: openshift-jee-sample spec: strategy: type: JenkinsPipeline jenkinsPipelineStrategy: jenkinsfile: |- node("maven") { sh "git clone https://github.com/openshift/openshift-jee-sample.git ." sh "mvn -B -Popenshift package" sh "oc start-build -F openshift-jee-sample-docker --from-file=target/ROOT.war" } triggers: - type: ConfigChange
動的に作成された Jenkins エージェント Pod の仕様を上書きすることも可能です。以下は、コンテナーメモリーを上書きして、環境変数を指定するように先の例を変更しています。
Jenkins Kubernetes プラグインを使用し、メモリー制限と環境変数を指定するサンプル BuildConfig
kind: BuildConfig apiVersion: build.openshift.io/v1 metadata: name: openshift-jee-sample spec: strategy: type: JenkinsPipeline jenkinsPipelineStrategy: jenkinsfile: |- podTemplate(label: "mypod", 1 cloud: "openshift", 2 inheritFrom: "maven", 3 containers: [ containerTemplate(name: "jnlp", 4 image: "openshift/jenkins-agent-maven-35-centos7:v3.10", 5 resourceRequestMemory: "512Mi", 6 resourceLimitMemory: "512Mi", 7 envVars: [ envVar(key: "CONTAINER_HEAP_PERCENT", value: "0.25") 8 ]) ]) { node("mypod") { 9 sh "git clone https://github.com/openshift/openshift-jee-sample.git ." sh "mvn -B -Popenshift package" sh "oc start-build -F openshift-jee-sample-docker --from-file=target/ROOT.war" } } triggers: - type: ConfigChange
- 1
mypod
という名前の新しい Pod テンプレートが動的に定義されます。この新しい Pod テンプレート名はノードのスタンザで参照されます。- 2
cloud
の値はopenshift
に設定する必要があります。- 3
- 新しい Pod テンプレートは、既存の Pod テンプレートから設定を継承できます。この場合は、Red Hat OpenShift Service on AWS で事前定義されている Maven Pod テンプレートから継承されます。
- 4
- この例では、既存のコンテナーの値を上書きし、名前で指定する必要があります。Red Hat OpenShift Service on AWS に同梱されているすべての Jenkins エージェントイメージでは、コンテナー名
jnlp
が使用されます。 - 5
- 再びコンテナーイメージ名を指定します。これは既知の問題です。
- 6
512 Mi
のメモリー要求を指定します。- 7
512 Mi
のメモリー制限を指定します。- 8
- 環境変数
CONTAINER_HEAP_PERCENT
に値0.25
を指定します。 - 9
- ノードスタンザは、定義された Pod テンプレート名を参照します。
デフォルトで、Pod はビルドの完了時に削除されます。この動作は、プラグインを使用して、またはパイプライン Jenkinsfile 内で変更できます。
アップストリームの Jenkins では少し前に、パイプラインとインラインで podTemplate
パイプライン DSL を定義するための YAML 宣言型フォーマットが導入されました。このフォーマットの例を次に示します。Red Hat OpenShift Service on AWS の Jenkins イメージで定義されているサンプル java-builder
Pod テンプレートを使用しています。
def nodeLabel = 'java-buidler' pipeline { agent { kubernetes { cloud 'openshift' label nodeLabel yaml """ apiVersion: v1 kind: Pod metadata: labels: worker: ${nodeLabel} spec: containers: - name: jnlp image: image-registry.openshift-image-registry.svc:5000/openshift/jenkins-agent-base-rhel8:latest args: ['\$(JENKINS_SECRET)', '\$(JENKINS_NAME)'] - name: java image: image-registry.openshift-image-registry.svc:5000/openshift/java:latest command: - cat tty: true """ } } options { timeout(time: 20, unit: 'MINUTES') } stages { stage('Build App') { steps { container("java") { sh "mvn --version" } } } } }
1.10. Jenkins メモリーの要件
提供される Jenkins の一時また永続テンプレートでデプロイする場合、デフォルトのメモリー制限は 1 Gi
になります。
デフォルトで、Jenkins コンテナーで実行する他のすべてのプロセスは、合計の 512 MiB
を超えるメモリーを使用することができません。メモリーがさらに必要になると、コンテナーは停止します。そのため、パイプラインが可能な場合に、エージェントコンテナーで外部コマンドを実行することが強く推奨されます。
また、Project
クォータがこれを許可する場合は、Jenkins マスターがメモリーの観点から必要とするものについて、Jenkins ドキュメントの推奨事項を参照してください。この推奨事項では、Jenkins マスターにさらにメモリーを割り当てることを禁止しています。
Jenkins Kubernetes プラグインによって作成されるエージェントコンテナーで、メモリー要求および制限の値を指定することが推奨されます。管理者ユーザーは、Jenkins 設定を使用して、エージェントのイメージごとにデフォルト値を設定できます。メモリー要求および制限パラメーターは、コンテナーごとに上書きすることもできます。
Jenkins で利用可能なメモリー量を増やすには、Jenkins の一時テンプレートまたは永続テンプレートをインスタンス化する際に MEMORY_LIMIT
パラメーターを上書きします。
1.11. 関連情報
第2章 Jenkins エージェント
Red Hat OpenShift Service on AWS には、Jenkins エージェントとして使用するためのベースイメージがあります。
Jenkins エージェントのベースイメージは次のことを行います。
-
必須のツール (ヘッドレス Java、Jenkins JNLP クライアント) と有用なツール (
git
、tar
、zip
、nss
など) の両方を取り入れます。 - JNLP エージェントをエントリーポイントとして確立します。
-
Jenkins ジョブ内からコマンドラインの操作を呼び出す
oc
クライアントツールが含まれます。 -
Red Hat Enterprise Linux (RHEL) および
localdev
イメージの両方の Dockerfile を提供します。
Red Hat OpenShift Service on AWS のリリースバージョンに合わせて、適切なエージェントイメージのバージョンを使用してください。Red Hat OpenShift Service on AWS のバージョンと互換性のない oc
クライアントバージョンを埋め込むと、予期しない動作が発生する可能性があります。
Red Hat OpenShift Service on AWS の Jenkins イメージでは、エージェントイメージを Jenkins Kubernetes プラグインで使用する方法を示す次のサンプル java-builder
Pod テンプレートも定義されています。
java-builder
Pod テンプレートは、次の 2 つのコンテナーを使用します。
-
Red Hat OpenShift Service on AWS の Base エージェントイメージを使用し、Jenkins エージェントの起動と停止のための JNLP コントラクトを処理する
jnlp
コンテナー。 -
java
Red Hat OpenShift Service on AWS のサンプル ImageStream を使用するJava
コンテナー。これには、コードをビルドするための、Maven バイナリーmvn
を含むさまざまな Java バイナリーが含まれています。
2.1. Jenkins エージェントイメージ
Red Hat OpenShift Service on AWS の Jenkins エージェントイメージは、Quay.io または registry.redhat.io で入手できます。
Jenkins イメージは、Red Hat レジストリーから入手できます。
$ docker pull registry.redhat.io/ocp-tools-4/jenkins-rhel8:<image_tag>
$ docker pull registry.redhat.io/ocp-tools-4/jenkins-agent-base-rhel8:<image_tag>
Jenkins イメージを使用するには、Quay.io または registry.redhat.io から直接アクセスするか、イメージを Red Hat OpenShift Service on AWS のコンテナーイメージレジストリーにプッシュします。
2.2. Jenkins エージェントの環境変数
各 Jenkins エージェントコンテナーは、以下の環境変数で設定できます。
変数 | 定義 | 値と設定の例 |
---|---|---|
|
これらの値は Jenkins JVM の最大ヒープサイズを制御します。 デフォルトでは Jenkins JVM の最大ヒープサイズは、上限なしでコンテナーメモリー制限の 50% に設定されます。 |
|
|
これらの値は Jenkins JVM の初期ヒープサイズを制御します。 デフォルトでは、JVM は初期のヒープサイズを設定します。 |
|
| 設定されている場合は、内部の JVM スレッドのサイジング数に使用するコアの数を整数で指定します。 |
設定例: |
| このコンテナーで実行中のすべての JVM に適用するオプションを指定します。この値の上書きは推奨されません。 |
デフォルト: |
| Jenkins JVM ガーベッジコレクションのパラメーターを指定します。この値の上書きは推奨されません。 |
デフォルト: |
| Jenkins JVM の追加オプションを指定します。これらのオプションは、上記の Java オプションを含む、その他すべてのオプションに追加され、必要に応じてそれらのいずれかを上書きするために使用できます。追加オプションがある場合は、スペースで区切ります。オプションにスペース文字が含まれる場合は、バックスラッシュでエスケープしてください。 |
設定例: |
|
コンテナーでエージェントを実行するために使用する Java バージョンのバージョンを指定します。コンテナーの基本イメージには、 |
デフォルト値は
設定例: |
2.3. Jenkins エージェントのメモリー要件
JVM はすべての Jenkins エージェントで使用され、Jenkins JNLP エージェントをホストし、javac
、Maven、Gradle などの Java アプリケーションを実行します。
デフォルトで、Jenkins JNLP エージェントの JVM はヒープにコンテナーメモリー制限の 50% を使用します。この値は、CONTAINER_HEAP_PERCENT
の環境変数で変更可能です。上限を指定することも、すべて上書きすることも可能です。
デフォルトでは、シェルスクリプトや oc
コマンドをパイプラインから実行するなど、Jenkins エージェントコンテナーで実行される他のプロセスはすべて、OOM kill を呼び出さずに残りの 50% メモリー制限を超えるメモリーを使用することはできません。
デフォルトでは、Jenkins エージェントコンテナーで実行される他の各 JVM プロセスは、最大でコンテナーメモリー制限の 25% をヒープに使用します。多くのビルドワークロードにおいて、この制限の調整が必要になる場合があります。
2.4. Jenkins エージェントの Gradle ビルド
Red Hat OpenShift Service on AWS 上の Jenkins エージェントで Gradle ビルドをホストすると、Jenkins JNLP エージェントの JVM と Gradle の JVM に加えて、テストが指定されている場合に Gradle が 3 つ目の JVM を生成してテストを実行するため、さらに複雑になります。
以下の設定は、Red Hat OpenShift Service on AWS でメモリーに制約がある Jenkins エージェントの Gradle ビルドを実行する場合の開始点として推奨されます。必要に応じて、これらの設定を変更することができます。
-
gradle.properties
ファイルにorg.gradle.daemon=false
を追加して、有効期間の長い (long-lived) Gradle デーモンを無効にするようにします。 -
gradle.properties
ファイルでorg.gradle.parallel=true
が設定されていないこと、また、コマンドラインの引数として--parallel
が設定されていないことを確認して、並行ビルドの実行を無効にします。 -
java { options.fork = false }
をbuild.gradle
ファイルに設定して、プロセス以外で Java がコンパイルされないようにします. -
build.gradle
ファイルでtest { maxParallelForks = 1 }
が設定されていることを確認して、複数の追加テストプロセスを無効にします。 -
GRADLE_OPTS
、JAVA_OPTS
、またはJAVA_TOOL_OPTIONS
環境変数で、Gradle JVM メモリーパラメーターを上書きします。 -
build.gradle
のmaxHeapSize
およびjvmArgs
設定を定義するか、-Dorg.gradle.jvmargs
コマンドライン引数を使用して、Gradle テスト JVM に最大ヒープサイズと JVM の引数を設定します。
2.5. Jenkins エージェント Pod の保持
Jenkins エージェント Pod は、ビルドが完了するか、停止された後にデフォルトで削除されます。この動作は、Kubernetes プラグイン Pod の保持設定で変更できます。Pod の保持は、すべての Jenkins ビルドについて各 Pod テンプレートの上書きで設定できます。以下の動作がサポートされます。
-
Always
は、ビルドの結果に関係なくビルド Pod を維持します。 -
Default
は、プラグイン値を使用します (Pod テンプレートのみ)。 -
Never
は、常に Pod を削除します。 -
On Failure
は、Pod がビルド時に失敗した場合に Pod を維持します。
Pod の保持はパイプライン Jenkinsfile で上書きできます。
podTemplate(label: "mypod",
cloud: "openshift",
inheritFrom: "maven",
podRetention: onFailure(), 1
containers: [
...
]) {
node("mypod") {
...
}
}
- 1
podRetention
に許可される値は、never()
、onFailure()
、always()
、およびdefault()
です。
保持される Pod は実行し続け、リソースクォータに対してカウントされる可能性があります。
第3章 OpenShift Jenkins イメージに対する重要な変更
Red Hat OpenShift Service on AWS 4.11 で、OpenShift Jenkins イメージおよび OpenShift Agent Base イメージが registry.redhat.io
の ocp-tools-4
リポジトリーに移動になりました。また、ペイロードから OpenShift Jenkins Maven イメージおよび NodeJS Agent イメージが削除されました。
-
Red Hat OpenShift Service on AWS 4.11 で、OpenShift Jenkins イメージおよび OpenShift Agent Base イメージが
registry.redhat.io
のocp-tools-4
リポジトリーに移動になりました。これにより、Red Hat が Red Hat OpenShift Service on AWS のライフサイクルに関係なくイメージを生成および更新できるようになりました。以前は、これらのイメージは Red Hat OpenShift Service on AWS のインストールペイロードとregistry.redhat.io
のopenshift4
リポジトリーにありました。 -
Red Hat OpenShift Service on AWS 4.10 で、OpenShift Jenkins Maven イメージおよび NodeJS Agent イメージが非推奨になりました。Red Hat OpenShift Service on AWS 4.11 で、これらのイメージがペイロードから削除されました。Red Hat はこれらのイメージを生成しなくなり、
registry.redhat.io
のocp-tools-4
リポジトリーから入手できなくなりました。Red Hat は、Red Hat OpenShift Service on AWS のライフサイクルポリシー に従って、重要なバグ修正やセキュリティー CVE に備えて、これらのイメージの 4.10 以前のバージョンを維持しています。
これらの変更は、Jenkins Kubernetes プラグインで複数のコンテナー Pod テンプレート を使用するという Red Hat OpenShift Service on AWS 4.10 の推奨事項に対応したものです。
3.1. OpenShift Jenkins イメージの再配置
Red Hat OpenShift Service on AWS 4.11 で、特定の OpenShift Jenkins イメージの場所と利用方法が大幅に変更されました。また、これらのイメージを更新するタイミングと方法を設定できるようになりました。
OpenShift Jenkins イメージの変わらない点
-
Cluster Samples Operator は、OpenShift Jenkins イメージを操作するための
ImageStream
およびTemplate
オブジェクトを管理します。 -
デフォルトでは、Jenkins Pod テンプレートの Jenkins
DeploymentConfig
オブジェクトは、Jenkins イメージが変更になると、再デプロイをトリガーします。デフォルトでは、このイメージは、Samples Operator ペイロードのImageStream
YAML ファイルのopenshift
namespace にある Jenkins イメージストリームのjenkins:2
イメージストリームタグによって参照されます。 -
Red Hat OpenShift Service on AWS 4.10 以前から 4.11 にアップグレードした場合は、非推奨の
maven
およびnodejs
Pod テンプレートが、デフォルトのイメージ設定に残ります。 -
Red Hat OpenShift Service on AWS 4.10 以前から 4.11 にアップグレードした場合は、
jenkins-agent-maven
およびjenkins-agent-nodejs
イメージストリームがクラスター内に残ります。これらのイメージストリームを維持するには、次のセクションの「openshift
namespace のjenkins-agent-maven
およびjenkins-agent-nodejs
イメージストリームの変更点」を参照してください。
OpenShift Jenkins イメージのサポートマトリックスの変更点
registry.redhat.io
レジストリーの ocp-tools-4
リポジトリーにある新しい各イメージは、Red Hat OpenShift Service on AWS の複数のバージョンをサポートします。Red Hat がこれらの新しいイメージの 1 つを更新すると、すべてのバージョンで同時に利用できるようになります。この可用性は、セキュリティーアドバイザリーに応じて Red Hat がイメージを更新する場合に理想的です。この変更は、まず Red Hat OpenShift Service on AWS 4.11 以降に適用されます。この変更は、最終的に Red Hat OpenShift Service on AWS 4.9 以降に適用される予定です。
以前は、各 Jenkins イメージがサポートするバージョンは、Red Hat OpenShift Service on AWS の 1 つのバージョンだけでした。Red Hat は時間の経過とともに各イメージを順次更新する可能性がありました。
OpenShift Jenkins および Jenkins Agent Base ImageStream および ImageStreamTag オブジェクトに追加された点
ペイロード内のイメージストリームからペイロード以外のイメージを参照するイメージストリームに移行することで、Red Hat OpenShift Service on AWS は、追加のイメージストリームタグを定義できるようになります。Red Hat は、Red Hat OpenShift Service on AWS 4.10 以前に存在する既存の "value": "jenkins:2"
および "value": "image-registry.openshift-image-registry.svc:5000/openshift/jenkins-agent-base-rhel8:latest"
イメージストリームタグに合わせて、一連の新しいイメージストリームタグを作成しました。これらの新規イメージストリームタグは、Jenkins 関連のイメージストリームのメンテナンス方法を改善するための要求の一部に対応します。
新規イメージストリームタグについて以下を実行します。
ocp-upgrade-redeploy
-
Red Hat OpenShift Service on AWS をアップグレードするときに Jenkins イメージを更新するには、Jenkins デプロイメント設定でこのイメージストリームタグを使用します。このイメージストリームタグは、
jenkins
イメージストリームの既存の2
のイメージストリームタグとjenkins-agent-base-rhel8
イメージストリームのlatest
イメージストリームタグに対応します。これは 1 つの SHA またはイメージダイジェストのみに固有のイメージタグを使用します。Jenkins セキュリティーアドバイザリーなどのocp-tools-4
イメージが変更になると、Red Hat エンジニアリングは Cluster Samples Operator ペイロードを更新します。 user-maintained-upgrade-redeploy
-
Red Hat OpenShift Service on AWS をアップグレードした後に Jenkins を手動で再デプロイするには、Jenkins デプロイメント設定でこのイメージストリームタグを使用します。このイメージストリームタグは、利用可能な最も具体的なイメージバージョンインジケーターを使用します。Jenkins を再デプロイするときは、
$ oc import-image jenkins:user-maintained-upgrade-redeploy -n openshift
コマンドを実行します。このコマンドを実行すると、Red Hat OpenShift Service on AWS のImageStream
コントローラーが、registry.redhat.io
イメージレジストリーにアクセスし、更新されたイメージをその JenkinsImageStreamTag
オブジェクトの OpenShift イメージレジストリーのスロットに保存します。それ以外の場合は、このコマンドを実行しないと、Jenkins デプロイ設定によって再デプロイがトリガーされません。 scheduled-upgrade-redeploy
- Jenkins イメージの最新バージョンがリリースされたときに自動的に再デプロイするには、Jenkins デプロイ設定でこのイメージストリームタグを使用します。このイメージストリームタグは、バッキングイメージの変更をチェックする Red Hat OpenShift Service on AWS イメージストリームコントローラーのイメージストリームタグの定期的なインポート機能を使用します。たとえば、最近の Jenkins セキュリティーアドバイザリーによりイメージが変更になると、Red Hat OpenShift Service on AWS は Jenkins デプロイメント設定の再デプロイをトリガーします。次の「関連情報」の「イメージストリームタグの定期的なインポートの設定」を参照してください。
openshift
namespace の jenkins-agent-maven
および jenkins-agent-nodejs
イメージストリームの変更点
Red Hat OpenShift Service on AWS の OpenShift Jenkins Maven イメージおよび NodeJS Agent イメージは、4.10 で非推奨となり、4.11 で Red Hat OpenShift Service on AWS のインストールペイロードから削除されました。それらには、ocp-tools-4
リポジトリーで定義された代替手段がありません。ただし、この問題は、次の「関連情報」セクションに記載されている「Jenkins エージェント」トピックで説明されているサイドカーパターンを使用することで回避できます。
ただし、Cluster Samples Operator は、以前のリリースで作成された jenkins-agent-maven
および jenkins-agent-nodejs
イメージストリームを削除しません。これらのイメージストリームは、registry.redhat.io
上のそれぞれの Red Hat OpenShift Service on AWS のペイロードイメージのタグを参照します。したがって、次のコマンドを実行して、これらのイメージの更新をプルできます。
$ oc import-image jenkins-agent-nodejs -n openshift
$ oc import-image jenkins-agent-maven -n openshift
3.2. Jenkins イメージストリームタグのカスタマイズ
デフォルトのアップグレード動作をオーバーライドし、Jenkins イメージのアップグレード方法を制御するには、Jenkins デプロイメント設定で使用するイメージストリームタグの値を設定します。
デフォルトのアップグレード動作は、Jenkins イメージがインストールペイロードの一部であったときに存在した動作です。jenkins-rhel.json
イメージストリームファイル内のイメージストリームタグ名 2
および ocp-upgrade-redeploy
は、SHA 固有のイメージ参照を使用します。したがって、これらのタグが新しい SHA で更新されると、Red Hat OpenShift Service on AWS のイメージ変更コントローラーが、jenkins-ephemeral.json
や jenkins-persistent.json
などの関連テンプレートから Jenkins デプロイメント設定を自動的に再デプロイします。
新しいデプロイメントの場合、そのデフォルト値をオーバーライドするには、jenkins-ephemeral.json
Jenkins テンプレートの JENKINS_IMAGE_STREAM_TAG
の値を変更します。たとえば、"value": "jenkins:2"
の 2
を次のイメージストリームタグのいずれかに置き換えます。
-
ocp-upgrade-redeploy
(デフォルト値) を指定すると、Red Hat OpenShift Service on AWS をアップグレードするときに Jenkins イメージが更新されます。 -
user-maintained-upgrade-redeploy
を指定した場合、Red Hat OpenShift Service on AWS をアップグレードした後、$ oc import-image jenkins:user-maintained-upgrade-redeploy -n openshift
を実行して Jenkins を手動で再デプロイする必要があります。 -
schedule-upgrade-redeploy
は、指定された<image>:<tag>
の組み合わせの変更を定期的にチェックし、変更されたときにイメージをアップグレードします。イメージ変更コントローラーは、変更されたイメージをプルし、テンプレートによってプロビジョニングされた Jenkins デプロイ設定を再デプロイします。このスケジュールされたインポートポリシーの詳細は、次の関連情報に記載される「イメージストリームへのタグの追加」を参照してください。
既存のデプロイメントの現在のアップグレード値をオーバーライドするには、それらのテンプレートパラメーターに対応する環境変数の値を変更します。
前提条件
- Red Hat OpenShift Service on AWS 4 で OpenShift Jenkins を実行している。
- OpenShift Jenkins がデプロイされている namespace を知ってる。
手順
<namespace>
を OpenShift Jenkins がデプロイされている namespace に置き換え、<image_stream_tag>
をイメージストリームタグに置き換えて、イメージストリームタグの値を設定します。例
$ oc patch dc jenkins -p '{"spec":{"triggers":[{"type":"ImageChange","imageChangeParams":{"automatic":true,"containerNames":["jenkins"],"from":{"kind":"ImageStreamTag","namespace":"<namespace>","name":"jenkins:<image_stream_tag>"}}}]}}'
ヒントまたは、Jenkins デプロイメント設定 YAML を編集するには、
$ oc edit dc/jenkins -n <namespace>
を入力し、value: 'jenkins:<image_stream_tag>'
行を更新します。
3.3. 関連情報
Legal Notice
Copyright © 2024 Red Hat, Inc.
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.