Rancher Pipelineを使ったCI/CD
Rancher Pipelineを使ったCI/CD
前回までで、GitLabのPipelineを使ったCIとRancher Catalogを用いたCIからデプロイまでの流れを解説しました。今回は前回の補足として、Rancher Pipelineを用いたCDについて解説します。
Rancher Pipelineとは
Rancher Pipelineは、単純なCI/CDパイプラインを提供するための仕組みです。Rancherのバージョン2.1から本格的に提供されるようになりました。以下のような機能を提供しています。※1
- Dockerイメージのビルドとレジストリへのプッシュ
- 任意のスクリプトの実行
- Kubernetesのリソースマニフェストの適用
※1:さらに、バージョン2.2では機能が強化され。カタログテンプレートの公開・カタログアプリケーションのデプロイといった機能が提供されるようになっています。
Rancher Pipelineの構成
Rancher Pipelineは、内部的には以下の3要素から構成されています。
- Jenkins
- CI/CDパイプラインの実行エンジン(Rancherからのみ操作でき、Jenkins本体のUIはユーザには公開されません)
- Docker registry
- CIパイプラインでビルドされたDockerイメージを保管します。なお、リモートのリポジトリに保管する場合は利用されません※2
- Minio
- CI/CDバイプラインの実行結果のターミナルログを保管します
※2:今回はGitLab Container Registry(以下、GitLab CR)にイメージを保管するため、利用しません。
実際に利用する際には、DockerイメージやCI/CDのターミナルログのバックアップやリストアを除き、あまり内部の構成を意識することはないでしょう。※3
※3:なお、これらのバックアップについては具体的な方法についてはドキュメントでは定義されていません。基本的にはPersistent Volume内部にデータが含まれているため、ストレージクラス固有のバックアップ方法を使ってバックアップを取得することになるでしょう。
Rancher Pipelineを構成する際に必要となる概念として、Pipeline、Stage、Stepがあります。それぞれの関係を下図1に示します。
Pipelineの中にStageがあり、その中にStepがあります。
Pipeline全体の定義は.rancher-pipeline.ymlファイルで記述します。しかし、Rancherでは基本的なパイプライン定義はすべてGUIで行えるようになっているため、大枠をGUIで作成し、詳細を.rancher-pipeline.ymlを直接編集する形で実現するのが良いでしょう。
Stageは次に述べるStepを束ねるものです。同じStageに含まれるStepは同時に実行されます。そのため実行順序に依存関係のあるStepは、その依存関係に合わせたStageに分けて所属させたほうが良いでしょう。
最後のStepが、実際に様々な処理が行われる部分になります。例えばイメージのビルドやテストといったCI、Kubernetesのマニフェストファイルの適用といったCDが行われるのは、この要素の中です。
以降は実際に前回実装したGitLab CIのパイプラインとほぼ同等のCIパイプラインに加えて、CDも含めたCI/CDパイプラインを作成してみましょう。
Rancher Pipelineの利用
さて、ここからはRancher Pipelineの導入です。実際には複数のステップから構成されます。何も設定していない状態からスタートした場合は、以下のようなステップを踏むことになります。
- Rancherとgitリポジトリ(今回はGitLab)との連携
- Rancher Pipelineの構築
では、それぞれを実際の流れに沿って解説していきます。
RancherとGitLabの連携
まず、Rancher Pipelineを設定したいプロジェクト(図2の場合はlocalクラスタのrancherプロジェクト)を選択します。次にWorkloadsメニュー(図2(1))を選択ます。Workloadsの画面に遷移したらPipelinesタブを選択します(図2(2))。その後表示される画面でConfigure Repositoriesを選択します(図2(3))。
すると連携させているリポジトリの一覧画面(図3)が表示されますが、初期時点ではサンプルを除いていかなるリポジトリとも連携していません。では今回はGitLab.com上に作成しているサンプルアプリケーションのリポジトリと連携させてみましょう。図3のAuthorize & Fetch Your Own Repositoriesをクリックします。
リポジトリの認証情報を設定していない場合は、その設定を行うことを確認するモーダルウィンドウが開きます(図4)ので、Config Nowをクリックします。
今回はGitLabとの連携なので、GibLabのアイコンを選択します(図5(1))。次に、図5(2)のリンクを図5(3)のURLをコピーした後に選択します。
図5(2)のリンクをクリックすると、GitLab.comのアプリケーション連携の設定画面に遷移します(図6)。アプリケーションの名前(図6(1))を入力し、リダイレクト先のURL(図6(2))に図5(3)のURLを指定したら、このアプリケーションが必要とする権限を選択します(図6(3))。すべて入力し終えたらSave applicationボタンをクリックします(図6(4))。
確認画面が出るのでAuthorizeボタンをクリックします(図7)。
アプリケーション連携用のApplication ID(図8(1))とSecret(図8(2))が取得できます。これを手元に記録しておきましょう。
さて、図5の画面に戻ります。先ほど図8で取得したApplication IDとSecretをそれぞれ図9(1)、図9(2)に入力しましょう。入力し終わったら、Authenticateボタンをクリックします(図9(3))。
連携可能なリポジトリの一覧が表示されます。今回連携したいリポジトリ(ti_rancher_k8s_sampleapp.git)をEnabledにします(図10(1))。無事に切り替わったら、Doneボタンをクリックします(図10(2))。
これでRancher PipelineとGitlab.com上のgitリポジトリの間の連携設定が完了しました。
しかし、これだけではまだGitLab CRをRancher Pipelineから操作することができません。GitLab CRとの連携のために、追加の設定を進めましょう。
前回の連載と同様にGitLab.comのアクセストークンを取得します(図11)。トークンの名前を指定し(図11(1))、権限としてapiを付与します(図11(2))。apiの権限を付与するのは、GitLab CRに対しての書き込みも行うためです。ここまで設定したら、Create personal access tokenボタンをクリックしましょう(図11(3))。
ボタンをクリック後、画面が遷移するとアクセストークンが表示されます(図12)。図中の注意書きにもあるように、トークンの値を再度確認する手段はないので、ここで確実に記録するように注意してください。では、この取得したトークンを使って、GitLab CRにアクセスするためのレジストリの認証情報を作成していきましょう。
レジストリ認証情報を設定するためにメニューからResources、Registriesの順に選択します(図13)。
レジストリの認証情報一覧が表示されるので、Add Registryボタン(図14赤枠)をクリックします。
レジストリ認証情報の名前を設定(図15(1))し、Available to all namespaces in this project(図15(2))を選択します。CI/CDパイプラインが立ち上がる際にはランダムな名前のネームスペースが作成されるので、すべてのネームスペースで利用できるようにしておきます。今回はGitLab CRを利用するので、AddressについてはCustomを選択してregistry.gitlab.comを設定します(図15(3))。レジストリのユーザ名にはregistry_user(GitLab CR利用の際の固定値)を設定します(図15(4))。最後に図13で取得したシークレット情報をレジストリのパスワードに設定します(図15(5))。ここまで完了したら、Saveボタンをクリックします(図15(6))。
ここまでで、連携したいGitLabプロジェクトに含まれるgitリポジトリおよびコンテナレジストリと、Rancherの連携設定の投入が完了しました。以降はRancher Pipelineの作成に進んでいきます。