OpenShift GitOpsについて、ごく簡単にご説明します。
本ハンズオンに必要なOperatorをインストールします。
ここからは、OpenShiftにOpenShift Pipelinesをインストールします。
左上のメニューにて、[Developer]から[管理者]に切り替えます。
[OperatorHub]ボタンをクリックします。
インストール可能なOperatorがタイル表示されています。
[Filter by keyword..]に「OpenShift Pipelines」と入力し、Red Hat OpenShift Pipelinesを選択します。
Red Hat OpenShift Pipelines 画面にて[インストール]をクリックします。
続けて Operatorのインストール 画面にて、すべてデフォルトのままで、[インストール]をクリックします。
インストール完了のダイアログが表示されたあと、1分程度待つと画面左側メニューに[パイプライン]という項目が追加されます。
もししばらく待っても追加されない場合は画面のリロードを試してください。
ここからは、OpenShiftにOpenShift GitOpsをインストールします。
[OperatorHub]ボタンをクリックします。
インストール可能なOperatorがタイル表示されています。
[Filter by keyword..]に「OpenShift GitOps」と入力し、Red Hat OpenShift GitOpsを選択します。
Red Hat OpenShift GitOps 画面にて[インストール]をクリックします。
続けて Operatorのインストール 画面にて、すべてデフォルトのままで、[インストール]をクリックします。
インストール完了のダイアログが表示されたあと、左上のメニューにて、[管理者]から[Developer]に切り替えます。
画面左側の項目に「環境」というメニューが追加されていれば成功です。
もししばらく待っても追加されない場合は画面のリロードを試してください。
以上でインストール作業は完了です。
インストールしたGitOps(ArgoCD)を表示してみます。
左上のメニューが[管理者]になっている方は、[管理者]から[Developer]に切り替えます。
左下の[シークレット]をクリックし、中央上の[プロジェクト]を openshift-gitops に変更します。
(s) openshift-gitops-cluster という項目リンクをクリックします。
最下部にGitOps(ArgoCD)のadminユーザのパスワードが表示されています。
右下のコピーボタンをクリックし、admin.password値をクリップボードにコピーします。
画面右上の四角いアイコンをクリックし、[Cluster ArgoCD]をクリックします。
ArgoCDの画面が表示されます。ユーザ名にadmin、パスワードは先ほどクリップボードコピーした値を貼り付けます。 [SIGN IN]をクリックします。
ArgoCDの画面を表示することができました。
ログイン作業は以上です。
GitHubにサインイン(Sign in)してください。まだアカウント登録されていない方はこちらからサインアップ(Sign up)してください。
ブラウザーでhttps://github.com/IBMDeveloperTokyo/cicd-dotnet-sampleを開いてください。
[Fork]ボタンをクリックして、自分のアカウントを選択してください。
Forkする際に指定した自分のリポジトリーへ、対象のプロジェクトがForkされたことを確認します。 リポジトリーのパスの最初の部分が自分のGitHubアカウントになっていればOKです。
Forkができたら、featureブランチ「feature_dojo」を作成します。
Create branch: feature_dojo from 'main' をクリックし、①のブランチ名が「feature_dojo」に変わったら作成完了です。
OpenShiftのWebコンソールへ戻り、[Developer]から[管理者]に切り替えてプロジェクトを作成します。
[管理者]から[Developer]に切り替えて、[+追加]をクリック、[ソース:Git]をクリックしてください。
自分のGitHubリポジトリーのURLを[GitリポジトリーURL]に入力します。
下の[詳細のGitオプションの表示]をクリックすると入力エリアが展開されます。
今回デプロイする対象のアプリケーションは GitHubリポジトリー の「feature_dojo」ブランチ及び「SampleApp」ディレクトリ配下のため、以下の通り入力します。
項目 | 入力値 | 説明 |
---|---|---|
[GitリポジトリーURL] | ForkしたGitHubリポジトリのURL | CICDで使用するGitHubリポジトリ |
[Gitリファレンス] | feature_dojo | ブランチ名 |
[コンテキストディレクトリー] | /SampleApp | アプリケーションディレクトリ |
言語やタイプの一覧がタイルで表示され、.NETが選択されていることを確認します。
[パイプラインの追加]をチェックします。これにより、ビルドとデプロイをOpenShift Pipelineを用いて行うようにできます。
チェックしたら最下段の[作成]ボタンをクリックしてください。(他のオプションはすべてデフォルトで構いません)
デプロイが始まったら、開発環境の準備は完了です。
開発環境に作成されたパイプラインをベースに、本番環境用のパイプラインを作成します。
[Developer]から[管理者]に切り替えて、[ストレージ]の中から[永続ボリューム要求]を選択し、[永続ボリューム要求の作成]をクリックします。
本番用のパイプラインで使用する永続ボリュームを作成します。 以下の通り入力し、[作成]をクリックします。
項目 | 入力値 | 備考 |
---|---|---|
永続ボリューム要求の名前 | dojo | |
サイズ | 1 | 20以下の数値を指定した場合、自動で20GiBのボリュームが作成されます。 |
[管理者]から[Developer]に切り替えて、[パイプライン]を選択し、[パイプラインの作成]をクリックします。
パイプラインビルダーが表示されたら、YAMLビューを選択し、以下のYAMLで上書きし、17行目の "ご自身のGitHubアカウント" の部分を書き換えてください。
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
labels:
app.kubernetes.io/instance: cicd-dotnet-sample
app.kubernetes.io/name: cicd-dotnet-sample
pipeline.openshift.io/runtime: dotnet
pipeline.openshift.io/runtime-version: 5.0-ubi8
pipeline.openshift.io/type: kubernetes
name: cicd-dotnet-sample
namespace: dojo
spec:
params:
- default: cicd-dotnet-sample
name: APP_NAME
type: string
- default: 'https://github.com/ご自身のGitHubアカウント/cicd-dotnet-sample.git'
name: GIT_REPO
type: string
- default: main
name: GIT_REVISION
type: string
- default: >-
image-registry.openshift-image-registry.svc:5000/dojo/cicd-dotnet-sample
name: IMAGE_NAME
type: string
- default: SampleApp
name: PATH_CONTEXT
type: string
- default: 5.0-ubi8
name: VERSION
type: string
tasks:
- name: fetch-repository
params:
- name: url
value: $(params.GIT_REPO)
- name: revision
value: $(params.GIT_REVISION)
- name: subdirectory
value: ''
- name: deleteExisting
value: 'true'
taskRef:
kind: ClusterTask
name: git-clone
workspaces:
- name: output
workspace: workspace
- name: build
params:
- name: IMAGE
value: $(params.IMAGE_NAME)
- name: TLSVERIFY
value: 'false'
- name: PATH_CONTEXT
value: $(params.PATH_CONTEXT)
- name: VERSION
value: $(params.VERSION)
runAfter:
- fetch-repository
taskRef:
kind: ClusterTask
name: s2i-dotnet
workspaces:
- name: source
workspace: workspace
workspaces:
- name: workspace
変更が完了したら、[作成]をクリックします。
パイプラインの詳細画面が表示されたら、右上の[アクション]から[トリガーの追加]を選択します。
トリガーの追加 画面が開いたら、[Gitプロバイダータイプ]に github-push を選択、[workspace]に 永続ボリューム要求 → dojo を選択して [追加]ボタンをクリックしてください。
トリガーテンプレートのURLをクリップボードにコピーし、自身のGitHubリポジトリに戻ります。
[Settings] -> [Webhooks] -> [Add webhook]を選択します。
先ほどクリップボードにコピーしたトリガーURLを[Payload URL]に貼り付けてください。[Control type]は[application/json]を選択してください。
入力後、[Add webhook]を選択します。 以下の図の様に緑のチェックマークが付いたら設定成功です。 すぐにチェックマークが表示されないので、ページを再読み込みしてください。
これでwebhookの設定は完了です。 後はmainブランチが変更されたら自動的にビルドが開始されますが、このパイプラインでは イメージレジストリへのPUSH までを行うので、アプリケーションはデプロイされません。
試しに、ご自身のmainブランチの /SampleApp/Pages/Index.cshtml を右上にある Editボタン から直接変更し、画面下部の [Commit changes]を押してください。
本来であれば feature_dojoブランチ で変更し、問題ないことを確認した後に mainブランチ へマージする流れとなります。
@page
@model IndexModel
@{
ViewData["Title"] = "Sample page";
}
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>This application is sample for Tech Dojo - OpenShift Pipeline/GitOps</p>
<p>mainブランチのトリガー動作確認</p> <!-- この行を追加 -->
</div>
ArgoCDの画面に戻り、左上の[+NEW APP]をクリックします。
下記の通り、[GENERAL]の各項目に値を設定します。
項目 | 入力値 |
---|---|
Application Name | dojo-gitops |
Project | default |
SYNC POLICY | Manual |
続いて、[SOURCE]の各項目に値を設定します。
項目 | 入力値 |
---|---|
Repository URL | ご自身のGitHubリポジトリURL |
Revision | main |
Path | gitops |
続いて、[DESTINATION]の各項目に値を設定します。
項目 | 入力値 |
---|---|
Cluster URL | https://kubernetes.default.svc |
Namespace | dojo |
最後に、[DIRECTORY]の[DIRECTORY RECURSE]にチェックを入れ、[CREATE]をクリックします。
dojo-gitops というアプリケーションが作成されていれば、ArgoCDでのアプリセットアップは完了です。
作成したアプリケーションの[Status]を確認すると、[SYNC STATUS]が「OutOfSync」となっています。
つまり、今はGitリポジトリと同期されていない(=差分がある)状態なので、同期します。
まず、アプリケーションの左下にある[SYNC]をクリックします。
同期メニューが表示されるので、左上の[SYNCHRONIZE]をクリックすると、同期が始まります。
[Status]の[SYNC STATUS]が「Synced」となれば、同期はできています。
[Status]の[HEALTH STATUS]が「Healty」となれば、その同期処理は正常に行われ、アプリケーションがデプロイされています。
デプロイ結果の確認のため、OpenShiftのWebコンソールへ戻ります。
左上のメニューが[管理者]になっている方は、[管理者]から[Developer]に切り替えます。
メニューから[トポロジー]をクリックし、中央上の[プロジェクト]を dojo に変更します。
cicd-dotnet-sample というデプロイメントが存在していれば成功です。
今回は手動で同期を行いましたが、CD(継続的デプロイ)を行えるようにArgoCDの設定を変更します。
ArgoCDの画面に戻り、アプリケーション dojo-gitops をクリックします。
アプリケーションの関連が表示されるので、左上にある[APP DETAILS]をクリックします。
[SUMMARY]タブの下部にある[ENABLE AUTO-SYNC]をクリックします。
確認メッセージが表示されるので、[OK]をクリックします。
以上で、CDのための準備ができました。
再度、ご自身のmainブランチの /SampleApp/Pages/Index.cshtml を更新します。 右上にある Editボタン から直接変更し、画面下部の [Commit changes]を押してください。
本来であれば feature_dojoブランチ で変更し、問題ないことを確認した後に mainブランチ へマージする流れとなります。
@page
@model IndexModel
@{
ViewData["Title"] = "Sample page";
}
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>This application is sample for Tech Dojo - OpenShift Pipeline/GitOps</p>
<p>mainブランチのトリガー動作確認</p>
<p>ArgoCDの自動デプロイ動作確認</p> <!-- この行を追加 -->
</div>
OpenShiftの画面に戻り、[Developer]から[管理者]に切り替えて、[パイプライン]をクリックし、cicd-dotnet-sample-git の完了を待ちます。
パイプラインの完了を確認したら、[ビルド] > [イメージストリームタグ] > cicd-dotnet-sample のリンクをクリックします。
イメージストリームの詳細画面が表示されたら、YAMLタブをクリックし、dockerImageReferenceに記載されているパラメータをコピーします。
複数存在しますが、先頭のものが一番最新のイメージとなるので、2つ目以降の値は使用しないでください。
GitHubリポジトリに移動し、mainリポジトリ の /gitops/dotnet-sample-deployment.yaml の20行目 を更新します。 右上にある Editボタン から直接変更し、画面下部の [Commit changes]を押してください。
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: cicd-dotnet-sample
namespace: dojo
spec:
replicas: 1
selector:
matchLabels:
app: cicd-dotnet-sample
template:
metadata:
labels:
app: cicd-dotnet-sample
deploymentconfig: cicd-dotnet-sample
spec:
containers:
- name: cicd-dotnet-sample
image: # ここに先ほどコピーしたコンテナイメージをペースト (image-registry.openshift-image-registry.svc:5000/dojo/cicd-dotnet-sample@sha256:xxx...)
・
・
・
更新ができたらArgoCDの画面に移動し、同期が開始・完了することを確認します。
3分周期で同期をしているので少し時間がかかる可能性があります。
ArgoCDの同期が完了したらアプリケーションを確認します。 OpenShiftの画面に戻り、[管理者]から[Developer]に切り替えて、[トポロジー]をクリックして cicd-dotnet-sample のルートからアプリケーションを開きます。
アプリケーションが更新されていることが確認できましたでしょうか。
以上で、本ハンズオンは終了となります。