検索

4.2.3.6. Jenkins Kubernetes プラグインの設定

download PDF

OpenShift Container Platform Jenkins イメージには、事前にインストール済みの Kubernetes プラグイン が含まれ、Kubernetes および OpenShift Container Platform を使用して、Jenkins エージェントを複数のコンテナーホストで動的にプロビジョニングできるようにします。

OpenShift Container Platform は、Kubernetes プラグインを使用するために、Jenkins エージェントとして使用するのに適したイメージを 5 つ (BaseMaven、および Node.js イメージ) 提供します。詳細は、Jenkins Agents を参照してください。

注記

jenkins-slave-maven-* および jenkins-slave-nodejs-* イメージは、v3.10 リリースサイクル中に非推奨のマークが付けられます。イメージは、ユーザーがアプリケーションを新規の jenkins-agent-maven-* および jenkins-agent-nodejs-* イメージに移行できるようにしばらく残されます。

Maven および Node.js のエージェントイメージは、Kubernetes プラグイン用の OpenShift Container Platform Jenkins イメージの設定内で、Kubernetes Pod テンプレートイメージとして自動的に設定されます。この設定にはイメージごとのラベルが含まれており、"Restrict where this project can be run" の設定にある Jenkins ジョブのいずれかに適用できます。ラベルが適用されると、指定されたジョブの実行は、それぞれのエージェントイメージを実行している OpenShift Container Platform Pod の下で実行されます。

Jenkins イメージは、Kubernetes プラグインの追加のエージェントイメージの自動検出および自動設定を実行します。OpenShift Sync プラグイン では、Jenkins イメージは Jenkins の起動時に、実行中のプロジェクトまたはプラグインの設定に具体的に一覧表示されているプロジェクト内で以下を検索します。

  • ラベル rolejenkins-slave に設定されているイメージストリーム
  • アノテーション rolejenkins-slave に設定されているイメージストリームタグ
  • ラベル rolejenkins-slave に設定されている ConfigMap

適切なラベルが付いたイメージストリームまたは、適切なアノテーションが付いたイメージストリームタグが見つかると、対応する Kubernetes プラグイン設定が生成されるため、イメージストリームから提供されるコンテナーイメージを実行する Pod で、Jenkins ジョブを実行するように割り当てることができます。

イメージストリームまたはイメージストリームタグのイメージ参照および名前が、Kubernetes プラグインの Pod テンプレートにある名前およびイメージフィールドにマッピングされます。Kubernetes プラグインの Pod テンプレートのラベルフィールドは、イメージストリームにアノテーションを設定するか、イメージストリームタグオブジェクトに slave-label キーを設定して、制御できます。これらを使用しない場合には、名前をラベルとして使用します。

適切なラベルが指定された ConfigMap が検出される場合は、ConfigMap のキーと値のデータペイロードの値に、Jenkins および Kubernetes プラグインの Pod テンプレートの設定形式に準拠する XML が含まれることが想定されます。ConfigMap を使用する時に注意すべき主な差別化要因は、イメージストリームまたはイメージストリームタグの代わりに、Kubernetes プラグインの Pod テンプレートのさまざまなフィールドをすべて制御できることです。

以下は ConfigMap の例になります。

kind: ConfigMap
apiVersion: v1
metadata:
  name: jenkins-agent
  labels:
    role: jenkins-slave
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 Sync プラグイン は、OpenShift Container Platform の API サーバーを監視して、ImageStreamsImageStreamTags、および ConfigMaps の更新を確認し、Kubernetes プラグインの設定を調整します。

特に、以下のルールが適用されます。

  • ConfigMapImageStream、または ImageStreamTag からラベルまたはアノテーションを削除すると、既存の PodTemplate が Kubernetes プラグインの設定から削除されます。
  • 同様に、これらのオブジェクトが削除されると、対応する設定が Kubernetes プラグインから削除されます。
  • 逆に、適切なラベルおよびアノテーションが付いた ConfigMapImageStream、または ImageStreamTag オブジェクトを作成するか、初回作成後にラベルを追加すると、Kubernetes プラグイン設定に PodTemplate が作成されます。
  • ConfigMap フォームを介した PodTemplate の場合には、PodTemplateConfigMap データへの変更は、Kubernetes プラグイン設定の PodTemplate 設定に適用され、ConfigMap に変更を加えてから次に変更を加えるまでの間に、Jenkins UI で加えた PodTemplate の変更が上書きされます。

Jenkins エージェントとしてコンテナーイメージを使用するには、イメージは、エントリーポイントとしてスレーブエージェントを実行する必要があります。これに関する詳細情報は、公式の Jenkins ドキュメント を参照してください。

4.2.3.6.1. パーミッションに関する考慮事項

以前の ConfigMap の例では、Pod テンプレート XML の <serviceAccount> 要素は、作成される Pod で使用する OpenShift Container Platform サービスアカウントとなっています。Pod にマウントされたサービスアカウントの認証情報は、サービスアカウントに関連付けられたパーミッションとともに、OpenShift ContainerPlatform マスターに対するどの操作を Pod から許可するかを制御します。

OpenShift Container Platform Jenkins イメージで実行される Kubernetes プラグインで起動される Pod で使用されるサービスアカウントでは、以下を考慮してください。

  • OpenShift Container Platform で提供される Jenkins のテンプレートサンプルを使用する場合には、jenkins サービスアカウントが、Jenkins が実行するプロジェクトの edit ロールで定義され、マスター Jenkins Pod にサービスアカウントがマウントされます。
  • Jenkins 設定に挿入される 2 つのデフォルトの Maven および NodeJS Pod テンプレートも、マスターと同じサービスアカウントを使用するように設定されます。
  • 必要なラベルまたはアノテーションを持つイメージストリームまたはイメージストリームタグの結果として、OpenShift Sync プラグイン によって自動検出された Pod テンプレートには、サービスアカウントがマスターのサービスアカウントに設定されています。
  • Pod テンプレートの定義を Jenkins と Kubernetes プラグインに渡す他の方法として、使用するサービスアカウントを明示的に指定する必要があります。
  • 他の方法には、Jenkins コンソール、Kubernetes プラグインで提供される podTemplate パイプライン DSL、または Pod テンプレートの XML 設定をデータとする ConfigMap のラベル付けなどが含まれます。
  • サービスアカウントの値を指定しない場合には、default のサービスアカウントが使用されます。
  • 使用するサービスアカウントが何であっても、必要なパーミッション、ロールなどを OpenShift Container Platform 内で定義して、Pod 内から操作することを選択したプロジェクトを操作できるようにする必要があります。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.