著者は、ウィキメディア財団を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

Jenkins は、最も人気のあるオープンソース自動化サーバーの1つであり、継続的インテグレーション(CI)や継続的展開(CD)ワークフローの調整によく使用されます。

Jenkinsの構成は通常、Webベースのセットアップウィザードを使用して手動で行われます。 これは、時間がかかり、エラーが発生しやすく、スケーラブルでないプロセスになる可能性があります。 ステップ4— Ubuntu18.04にJenkinsをインストールする方法ガイドのJenkinsをセットアップすることで関連するステップを確認できます。 さらに、構成は Git のようなバージョン管理システム(VCS)で追跡することも、コードレビュープロセスの監視下に置くこともできません。

このチュートリアルでは、DockerJenkinsConfiguration as Code (JCasC)メソッドを使用して、Jenkinsのインストールと構成を自動化します。

Jenkinsは、プラグ可能なアーキテクチャを使用して、その機能のほとんどを提供します。 JCasCはConfigurationas Code プラグインを利用します。これにより、Jenkins構成の目的の状態を1つ以上の YAML ファイルとして定義できるため、セットアップが不要になります。ウィザード。 初期化時に、Configuration as Codeプラグインは、構成ファイルに従ってJenkinsを構成し、構成時間を大幅に短縮し、人的エラーを排除します。

Docker は、 container を作成および実行するための事実上の標準です。これは、仮想化テクノロジーであり、さまざまな[ X224X]オペレーティングシステム(OS)およびハードウェアアーキテクチャ。 Dockerを使用してJenkinsインスタンスを実行し、この一貫性とクロスプラットフォーム機能を利用します。

このチュートリアルは、JCasCの設定をガイドすることから始まります。 次に、JCasC構成ファイルに段階的に追加して、ユーザー、構成の認証と承認を設定し、最後にJenkinsインスタンスを保護します。 このチュートリアルを完了すると、起動時にConfiguration as Codeプラグインを使用して、Jenkinsインスタンスを自動的に構成および保護するように設定されたカスタムDockerイメージが作成されます。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • 2GB以上のRAMとDockerがインストールされているサーバーへのアクセス。 これは、ローカル開発マシン、Droplet、または任意の種類のサーバーにすることができます。 ステップ1— Dockerコレクションのインストールと使用方法のチュートリアルの1つからDockerをインストールしてDockerをセットアップします。

注:このチュートリアルはUbuntu18.04でテストされています。 ただし、Dockerイメージは自己完結型であるため、ここで概説する手順は、DockerがインストールされているすべてのOSで機能します。

手順1—セットアップウィザードを無効にする

JCasCを使用すると、セットアップウィザードを表示する必要がなくなります。 したがって、この最初のステップでは、セットアップウィザードが無効になっている公式の jenkins /jenkinsイメージの修正バージョンを作成します。 これを行うには、 Dockerfile そこからカスタムJenkinsイメージを構築します。

The jenkins/jenkins imageを使用すると、システムプロパティという名前のシステムプロパティを渡すことで、セットアップウィザードを有効または無効にできます。 jenkins.install.runSetupWizard 経由 JAVA_OPTS 環境変数。 画像のユーザーは、 JAVA_OPTS -envフラグを使用した実行時の環境変数 docker run. ただし、このアプローチでは、イメージのユーザーにセットアップウィザードを無効にする責任があります。 代わりに、ビルド時にセットアップウィザードを無効にして、セットアップウィザードがデフォルトで無効になるようにする必要があります。

これを実現するには、 Dockerfile ENV 命令を使用して、 JAVA_OPTS 環境変数。

まず、サーバー内に新しいディレクトリを作成して、このチュートリアルで作成するファイルを保存します。

  1. mkdir -p $HOME/playground/jcasc

次に、そのディレクトリ内を移動します。

  1. cd $HOME/playground/jcasc

次に、エディタを使用して、という名前の新しいファイルを作成します Dockerfile:

  1. nano $HOME/playground/jcasc/Dockerfile

次に、次のコンテンツをにコピーします Dockerfile:

〜/ playground / jcasc /
FROM jenkins/jenkins:latest
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false

ここでは、FROM命令を使用して指定しています jenkins/jenkins:latest ベースイメージとして、および ENV を設定するための命令 JAVA_OPTS 環境変数。

ファイルを保存し、を押してエディタを終了します CTRL+X に続く Y.

これらの変更を行ったら、新しいカスタムDockerイメージを作成し、それに一意のタグを割り当てます( jcasc ここ):

  1. docker build -t jenkins:jcasc .

次のような出力が表示されます。

Output
Sending build context to Docker daemon 2.048kB Step 1/2 : FROM jenkins/jenkins:latest ---> 1f4b0aaa986e Step 2/2 : ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false ---> 7566b15547af Successfully built 7566b15547af Successfully tagged jenkins:jcasc

ビルドしたら、 dockerrunを実行してカスタムイメージを実行します。

  1. docker run --name jenkins --rm -p 8080:8080 jenkins:jcasc

あなたは --name jenkins コンテナに覚えやすい名前を付けるオプション。 それ以外の場合は、代わりにランダムな16進IDが使用されます(例: f1d701324553). また、 --rm フラグを立てて、コンテナプロセスを停止した後にコンテナが自動的に削除されるようにします。 最後に、サーバーホストのポートを構成しました 8080 コンテナのポートにプロキシする 8080 を使用して -p 国旗; 8080 JenkinsWebUIが提供されるデフォルトのポートです。

ジェンキンスは開始するのに短い期間かかります。 Jenkinsの準備が整うと、出力に次の行が表示されます。

Output
... hudson.WebAppMain$3#run: Jenkins is fully up and running

次に、ブラウザを開いて server_ip:8080. セットアップウィザードなしでダッシュボードがすぐに表示されます。

セットアップウィザードが無効になっていることを確認しました。 クリーンアップするには、を押してコンテナを停止します CTRL+C. 指定した場合 --rm 以前にフラグを立てると、停止したコンテナは自動的に削除されます。

このステップでは、セットアップウィザードが無効になっているカスタムJenkinsイメージを作成しました。 ただし、Webインターフェイスの右上に、セットアップに問題があることを示す赤い通知アイコンが表示されるようになりました。 アイコンをクリックすると詳細が表示されます。

最初の警告は、JenkinsURLを構成していないことを通知します。 2つ目は、認証と承認のスキームを構成しておらず、匿名ユーザーがJenkinsインスタンスですべてのアクションを実行するための完全な権限を持っていることを示しています。 以前は、セットアップウィザードがこれらの問題に対処するためのガイドを提供していました。 無効にしたので、JCasCを使用して同じ関数を複製する必要があります。 このチュートリアルの残りの部分では、 Dockerfile 問題がなくなるまで(つまり、赤い通知アイコンが消えるまで)JCasC構成。

次のステップでは、ConfigurationasCodeプラグインを含む選択したJenkinsプラグインをカスタムJenkinsイメージにプレインストールすることでそのプロセスを開始します。

ステップ2—Jenkinsプラグインをインストールする

JCasCを使用するには、ConfigurationasCodeプラグインをインストールする必要があります。 現在、プラグインはインストールされていません。 これは、に移動して確認できます http://server_ip:8080/pluginManager/installed.

このステップでは、 Dockerfile ConfigurationasCodeプラグインを含む選択したプラグインをプレインストールします。

プラグインのインストールプロセスを自動化するために、付属のインストールスクリプトを利用できます。 jenkins/jenkins Dockerイメージ。 あなたはそれをコンテナの中に見つけることができます /usr/local/bin/install-plugins.sh. これを使用するには、次のことを行う必要があります。

  • インストールするプラグインのリストを含むテキストファイルを作成します
  • Dockerイメージにコピーします
  • を実行します install-plugins.sh プラグインをインストールするスクリプト

まず、エディタを使用して、という名前の新しいファイルを作成します plugins.txt:

  1. nano $HOME/playground/jcasc/plugins.txt

次に、プラグインの名前とバージョンの次の改行で区切られたリストを追加します(形式を使用して <id>:<version>):

〜/ playground / jcasc / plugins.txt
ant:latest
antisamy-markup-formatter:latest
build-timeout:latest
cloudbees-folder:latest
configuration-as-code:latest
credentials-binding:latest
email-ext:latest
git:latest
github-branch-source:latest
gradle:latest
ldap:latest
mailer:latest
matrix-auth:latest
pam-auth:latest
pipeline-github-lib:latest
pipeline-stage-view:latest
ssh-slaves:latest
timestamper:latest
workflow-aggregator:latest
ws-cleanup:latest

ファイルを保存して、エディターを終了します。

このリストには、Configuration as Codeプラグインと、セットアップウィザードによって提案されたすべてのプラグインが含まれています(Jenkins v2.251以降で正しい)。 たとえば、 Git プラグインがあります。これにより、JenkinsはGitリポジトリを操作できます。 Pipeline プラグインもあります。これは、実際にはJenkinsジョブをコードとして定義できるプラグインのスイートです。

注:提案されたプラグインの最新リストは、ソースコードから推測できます。 plugins.jenkins.io で、コミュニティが提供する最も人気のあるプラグインのリストを見つけることもできます。 必要な他のプラグインをリストに自由に含めてください。

次に、 Dockerfile ファイル:

  1. nano $HOME/playground/jcasc/Dockerfile

その中に、 COPY コピーするための指示 plugins.txt ファイルに /usr/share/jenkins/ref/ 画像内のディレクトリ。 これは、Jenkinsが通常プラグインを探す場所です。 次に、追加を含めます RUN 実行するための命令 install-plugins.sh 脚本:

〜/ playground / jcasc / Dockerfile
FROM jenkins/jenkins
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt

ファイルを保存して、エディターを終了します。 次に、改訂されたものを使用して新しいイメージを作成します Dockerfile:

  1. docker build -t jenkins:jcasc .

この手順では、多くのプラグインをダウンロードしてイメージにインストールします。インターネット接続によっては、実行に時間がかかる場合があります。 プラグインのインストールが完了したら、新しいJenkinsイメージを実行します。

  1. docker run --name jenkins --rm -p 8080:8080 jenkins:jcasc

後に Jenkins is fully up and running メッセージが表示されます stdout、 案内する server_ip:8080/pluginManager/installed インストールされているプラグインのリストを表示します。 内部で指定したすべてのプラグインの横にチェックボックスが表示されます plugins.txt、およびプラグインの横にある色あせたチェックボックス(これらのプラグインの依存関係)。

Configuration As Code プラグインがインストールされていることを確認したら、を押してコンテナプロセスを終了します。 CTRL+C.

このステップでは、提案されたすべてのJenkinsプラグインとConfigurationasCodeプラグインをインストールしました。 これで、JCasCを使用して、通知ボックスにリストされている問題に取り組む準備が整いました。 次のステップでは、JenkinsルートURLが空であることを警告する最初の問題を修正します。

ステップ3—JenkinsURLを指定する

Jenkins URLは、Jenkinsインスタンスにアクセスする必要のあるデバイスからルーティング可能なJenkinsインスタンスのURLです。 たとえば、Jenkinsをプライベートネットワーク内のノードとしてデプロイしている場合、JenkinsのURLはプライベートIPアドレス、またはプライベートDNSサーバーを使用して解決可能なDNS名である可能性があります。 このチュートリアルでは、サーバーのIPアドレス(または 127.0.0.1 ローカルホストの場合)JenkinsURLを形成します。

次の場所に移動して、WebインターフェイスでJenkinsのURLを設定できます。 server_ip:8080/configure JenkinsLocation見出しの下のJenkinsURLフィールドに値を入力します。 ConfigurationasCodeプラグインを使用して同じことを実現する方法は次のとおりです。

  1. 宣言型構成ファイル(これを呼び出します)内でJenkinsインスタンスの目的の構成を定義します casc.yaml).
  2. 構成ファイルをDockerイメージにコピーします( plugins.txt ファイル)。
  3. をセットする CASC_JENKINS_CONFIG 構成ファイルのパスへの環境変数で、ConfigurationasCodeプラグインにそれを読み取るように指示します。

まず、という名前の新しいファイルを作成します casc.yaml:

  1. nano $HOME/playground/jcasc/casc.yaml

次に、次の行を追加します。

〜/ playground / jcasc / casc.yaml
unclassified:
  location:
    url: http://server_ip:8080/

unclassified.location.url JenkinsURLを設定するためのパスです。 これは、JCasCで設定できる無数のプロパティの1つにすぎません。 有効なプロパティは、インストールされているプラグインによって決まります。 たとえば、 jenkins.authorizationStrategy.globalMatrix.permissions このプロパティは、 Matrix AuthorizationStrategyプラグインがインストールされている場合にのみ有効です。 使用可能なプロパティを確認するには、に移動してください server_ip:8080/configuration-as-code/reference、および特定のJenkinsインストールに合わせてカスタマイズされたドキュメントのページがあります。

を助けて casc.yaml ファイルを作成し、エディタを終了して、 Dockerfile ファイル:

  1. nano $HOME/playground/jcasc/Dockerfile

追加する COPY あなたの最後への指示 Dockerfile をコピーします casc.yaml で画像にファイル /var/jenkins_home/casc.yaml. あなたが選んだ /var/jenkins_home/ これは、Jenkinsがすべてのデータを保存するデフォルトのディレクトリだからです。

〜/ playground / jcasc / Dockerfile
FROM jenkins/jenkins:latest
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt
COPY casc.yaml /var/jenkins_home/casc.yaml

次に、さらに追加します ENV を設定する命令 CASC_JENKINS_CONFIG 環境変数:

〜/ playground / jcasc / Dockerfile
FROM jenkins/jenkins:latest
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
ENV CASC_JENKINS_CONFIG /var/jenkins_home/casc.yaml
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt
COPY casc.yaml /var/jenkins_home/casc.yaml

注: ENV 変更する可能性が低いため、上部にある指示。 の前に置くことによって COPYRUN 手順では、更新する場合は、キャッシュされたレイヤーの無効化を回避できます。 casc.yaml また plugins.txt.

ファイルを保存して、エディターを終了します。 次に、イメージを作成します。

  1. docker build -t jenkins:jcasc .

そして、更新されたJenkinsイメージを実行します。

  1. docker run --name jenkins --rm -p 8080:8080 jenkins:jcasc

すぐに Jenkins is fully up and running ログ行が表示されたら、に移動します server_ip:8080 ダッシュボードを表示します。 今回は、通知数が1つ減り、JenkinsURLに関する警告が消えたことにお気づきかもしれません。

次に、に移動します server_ip:8080/configure JenkinsURLフィールドまで下にスクロールします。 JenkinsのURLがで指定されたのと同じ値に設定されていることを確認します casc.yaml ファイル。

最後に、を押してコンテナプロセスを停止します CTRL+C.

このステップでは、ConfigurationasCodeプラグインを使用してJenkinsURLを設定しました。 次のステップでは、通知リストの2番目の問題に取り組みます( Jenkinsは現在セキュリティで保護されていないメッセージです)。

ステップ4—ユーザーの作成

これまでのところ、セットアップには認証および承認メカニズムは実装されていません。 このステップでは、基本的なパスワードベースの認証スキームを設定し、という名前の新しいユーザーを作成します admin.

あなたのを開くことから始めます casc.yaml ファイル:

  1. nano $HOME/playground/jcasc/casc.yaml

次に、強調表示されたスニペットを追加します。

〜/ playground / jcasc / casc.yaml
jenkins:
  securityRealm:
    local:
      allowsSignup: false
      users:
       - id: ${JENKINS_ADMIN_ID}
         password: ${JENKINS_ADMIN_PASSWORD}
unclassified:
  ...

Jenkinsのコンテキストでは、セキュリティレルムは単なる認証メカニズムです。 ローカルセキュリティレルムは、ユーザーがID/ユーザー名とパスワードを指定する必要がある基本認証を使用することを意味します。 他のセキュリティレルムが存在し、プラグインによって提供されます。 たとえば、 LDAP プラグインを使用すると、既存のLDAPディレクトリサービスを認証メカニズムとして使用できます。 GitHub認証プラグインを使用すると、GitHubクレデンシャルを使用してOAuth経由で認証できます。

指定したことに注意してください allowsSignup: false、匿名ユーザーがWebインターフェイスを介してアカウントを作成するのを防ぎます。

最後に、ユーザーIDとパスワードをハードコーディングする代わりに、実行時に値を入力できる変数を使用しています。 JCasCを使用する利点の1つは、 casc.yaml ファイルはソース管理にコミットできます。 ユーザーのパスワードを構成ファイル内にプレーンテキストで保存すると、資格情報が事実上侵害されてしまいます。 代わりに、変数はを使用して定義されます ${VARIABLE_NAME} 構文、およびその値は、同じ名前の環境変数、または内部に配置された同じ名前のファイルを使用して入力できます。 /run/secrets/ コンテナイメージ内のディレクトリ。

次に、新しいイメージを作成して、に加えられた変更を組み込みます。 casc.yaml ファイル:

  1. docker build -t jenkins:jcasc .

次に、更新されたJenkinsイメージを実行しながら、 JENKINS_ADMIN_IDJENKINS_ADMIN_PASSWORD -env オプションによる環境変数(置換 <password> お好みのパスワードで):

  1. docker run --name jenkins --rm -p 8080:8080 --env JENKINS_ADMIN_ID=admin --env JENKINS_ADMIN_PASSWORD=password jenkins:jcasc

これで、 server_ip:8080/login 指定された資格情報を使用してログインします。

正常にログインすると、ダッシュボードにリダイレクトされます。

を押してこのステップを終了します CTRL+C コンテナを停止します。

このステップでは、JCasCを使用して、という名前の新しいユーザーを作成しました admin. また、VCSによって追跡されるファイルからパスワードなどの機密データを排除する方法も学びました。 ただし、これまでのところ、ユーザー認証のみを構成しました。 承認メカニズムを実装していません。 次のステップでは、JCasCを使用して admin 管理者権限を持つユーザー。

ステップ5—認証の設定

セキュリティレルムを設定した後、承認戦略を構成する必要があります。 このステップでは、 Matrix Authorization Strategy プラグインを使用して、 admin ユーザー。

デフォルトでは、Jenkinsコアインストールは3つの認証戦略を提供します。

  • unsecured:匿名ユーザーを含むすべてのユーザーは、すべてを実行するための完全な権限を持っています
  • legacy:レガシーJenkins(v1.164より前)をエミュレートします。 admin には完全なアクセス許可が与えられ、匿名ユーザーを含む他のユーザーには読み取りアクセス権が与えられます。

注: Jenkinsのロールはユーザーになることができます(たとえば、 daniel)またはグループ(たとえば、 developers)

  • loggedInUsersCanDoAnything:匿名ユーザーには、アクセス権がないか、読み取り専用アクセス権が与えられます。 認証されたユーザーには、すべてを実行するための完全な権限があります。 認証されたユーザーに対してのみアクションを許可することにより、どのユーザーがどのアクションを実行したかを監査することができます。

注: ドキュメントで、他の承認戦略とそれに関連するプラグインを調べることができます。 これらには、認証と承認の両方を処理するプラグインが含まれます。

これらの承認戦略はすべて非常に大雑把であり、さまざまなユーザーに権限を設定する方法をきめ細かく制御することはできません。 代わりに、すでに含まれているMatrixAuthorizationStrategyプラグインを使用できます。 plugins.txt リスト。 このプラグインは、よりきめ細かい認証戦略を提供し、プロジェクト/ジョブごとだけでなく、グローバルにユーザー権限を設定できるようにします。

Matrix Authorization Strategyプラグインを使用すると、 jenkins.authorizationStrategy.globalMatrix.permissions グローバル権限を設定するためのJCasCプロパティ。 使用するには、 casc.yaml ファイル:

  1. nano $HOME/playground/jcasc/casc.yaml

そして、強調表示されたスニペットを追加します。

〜/ playground / jcasc / casc.yaml
...
       - id: ${JENKINS_ADMIN_ID}
         password: ${JENKINS_ADMIN_PASSWORD}
  authorizationStrategy:
    globalMatrix:
      permissions:
        - "Overall/Administer:admin"
        - "Overall/Read:authenticated"
unclassified:
...

The globalMatrix プロパティは、(プロジェクトごとのアクセス許可ではなく)グローバルアクセス許可を設定します。 The permissions プロパティは、次の形式の文字列のリストです。 <permission-group>/<permission-name>:<role>. ここでは、 Overall/Administer へのアクセス許可 admin ユーザー。 あなたも許可しています Overall/Read へのアクセス許可 authenticated、これは、認証されたすべてのユーザーを表す特別な役割です。 と呼ばれる別の特別な役割があります anonymous、認証されていないすべてのユーザーをグループ化します。 ただし、アクセス許可はデフォルトで拒否されるため、匿名ユーザーにアクセス許可を付与したくない場合は、そのエントリを明示的に含める必要はありません。

を助けて casc.yaml ファイルを作成し、エディターを終了して、新しいイメージを作成します。

  1. docker build -t jenkins:jcasc .

次に、更新されたJenkinsイメージを実行します。

  1. docker run --name jenkins --rm -p 8080:8080 --env JENKINS_ADMIN_ID=admin --env JENKINS_ADMIN_PASSWORD=password jenkins:jcasc

を待つ Jenkins is fully up and running ログ行をクリックしてから、 server_ip:8080. ログインページにリダイレクトされます。 クレデンシャルを入力すると、メインダッシュボードにリダイレクトされます。

このステップでは、グローバル権限を設定しました admin ユーザー。 ただし、承認の問題を解決すると、通知メニューに表示されるようになった追加の問題が明らかになりました。

したがって、次のステップでは、Dockerイメージを変更し続け、問題がなくなるまで各問題を1つずつ解決します。

続行する前に、を押してコンテナを停止します CTRL+C.

ステップ6—ビルド認証の設定

通知リストの最初の問題は、ビルド認証に関連しています。 デフォルトでは、すべてのジョブは多くのシステム権限を持つシステムユーザーとして実行されます。 したがって、Jenkinsユーザーは、悪意のあるジョブまたはパイプラインを定義して実行するだけで、特権昇格を実行できます。 これは安全ではありません。

代わりに、ジョブを構成またはトリガーしたのと同じJenkinsユーザーを使用してジョブを実行する必要があります。 これを実現するには、 AuthorizeProjectプラグインと呼ばれる追加のプラグインをインストールする必要があります。

開ける plugins.txt:

  1. nano $HOME/playground/jcasc/plugins.txt

そして、強調表示された行を追加します。

〜/ playground / jcasc / plugins.txt
ant:latest
antisamy-markup-formatter:latest
authorize-project:latest
build-timeout:latest
...

プラグインは、JCasC構成で指定する必要がある新しいビルド認証戦略を提供します。 を終了します plugins.txt ファイルを開き、 casc.yaml ファイル:

  1. nano $HOME/playground/jcasc/casc.yaml

強調表示されたブロックを casc.yaml ファイル:

〜/ playground / jcasc / casc.yaml
...
        - "Overall/Administer:admin"
        - "Overall/Read:authenticated"
security:
  queueItemAuthenticator:
    authenticators:
    - global:
        strategy: triggeringUsersAuthorizationStrategy
unclassified:
...

ファイルを保存して、エディターを終了します。 次に、変更したイメージを使用して新しいイメージを作成します plugins.txtcasc.yaml ファイル:

  1. docker build -t jenkins:jcasc .

次に、更新されたJenkinsイメージを実行します。

  1. docker run --name jenkins --rm -p 8080:8080 --env JENKINS_ADMIN_ID=admin --env JENKINS_ADMIN_PASSWORD=password jenkins:jcasc

を待つ Jenkins is fully up and running ログ行、次に移動します server_ip:8080/login、クレデンシャルを入力して、メインダッシュボードに到着します。 通知メニューを開くと、ビルド認証に関連する問題が表示されなくなります。

実行してコンテナを停止します CTRL+C 続行する前に。

このステップでは、システムユーザーではなく、ビルドをトリガーしたユーザーを使用してビルドを実行するようにJenkinsを構成しました。 これにより、通知リストの問題の1つが解消されます。 次のステップでは、AgenttoControllerセキュリティサブシステムに関連する次の問題に取り組みます。

ステップ7—エージェントからコントローラへのアクセス制御を有効にする

このチュートリアルでは、すべてのビルドを実行するJenkinsのインスタンスを1つだけデプロイしました。 ただし、Jenkinsは、エージェント/コントローラー構成を使用した分散ビルドをサポートしています。 コントローラは、Web UIの提供、クライアントがリクエストを送信するためのAPIの公開、およびビルドの調整を担当します。 エージェントは、ジョブを実行するインスタンスです。

この構成の利点は、よりスケーラブルでフォールトトレラントであるということです。 Jenkinsを実行しているサーバーの1つがダウンした場合、他のインスタンスが余分な負荷をかける可能性があります。

ただし、コントローラがエージェントを信頼できない場合があります。 たとえば、OPSチームがJenkinsコントローラーを管理し、外部の請負業者が独自にカスタム構成されたJenkinsエージェントを管理する場合があります。 エージェントからコントローラーへのセキュリティサブシステムがない場合、エージェントはコントローラーに、要求するアクションを実行するように指示できますが、これは望ましくない場合があります。 Agent to Controller Access Controlを有効にすることで、エージェントがアクセスできるコマンドとファイルを制御できます。

エージェントからコントローラへのアクセス制御を有効にするには、 casc.yaml ファイル:

  1. nano $HOME/playground/jcasc/casc.yaml

次に、次の強調表示された行を追加します。

〜/ playground / jcasc / casc.yaml
...
        - "Overall/Administer:admin"
        - "Overall/Read:authenticated"
  remotingSecurity:
    enabled: true
security:
  queueItemAuthenticator:
...

ファイルを保存して、新しいイメージを作成します。

  1. docker build -t jenkins:jcasc .

更新されたJenkinsイメージを実行します。

  1. docker run --name jenkins --rm -p 8080:8080 --env JENKINS_ADMIN_ID=admin --env JENKINS_ADMIN_PASSWORD=password jenkins:jcasc

案内する server_ip:8080/login 以前と同じように認証します。 メインダッシュボードにアクセスすると、通知メニューにそれ以上の問題は表示されなくなります。

結論

これで、JCasCを使用して単純なJenkinsサーバーを正常に構成できました。 Pipelineプラグインを使用すると、開発者は Jenkinsfile、Configuration as Codeプラグインを使用すると、管理者はYAMLファイル内でJenkins構成を定義できます。 これらのプラグインはどちらも、Jenkinsを Everything as Code (EaC)パラダイムに近づけます。

ただし、JCasC構文を正しく取得することは困難な場合があり、ドキュメントを解読するのは困難な場合があります。 行き詰まっていて助けが必要な場合は、プラグインのGitterチャットで見つけることができます。

JCasCを使用してJenkinsの基本設定を構成しましたが、新しいインスタンスにはプロジェクトやジョブが含まれていません。 これをさらに進めるには、 Job DSL プラグインを調べてください。これにより、プロジェクトとジョブをコードとして定義できます。 さらに、JCasC構成ファイル内にジョブDSLコードを含め、構成プロセスの一部としてプロジェクトとジョブを作成することができます。