OpenShift Pipelines(Tekton)を試してみたので、その経験をここに書きます。
試した環境は、OpenShift 4.6です。
OpenShift Pipelines とは
注意:OpenShift Pipeline は、OpenShift 4.6時点ではテクノロジープレビュー機能です。
OpenShift Pipeline は、TektonをOpenShift用に拡張したものです。Tektonは、Kubernetes上で、継続的インテグレーションおよび継続的デリバリー (CI/CD) を実現するOSSのフレームワークです。
Tektonでは、コンテナ・イメージがロードされ、コンテナ内でCD/CIタスクが実行されます。これによって、CD/CIタスク実現の機能とCD/CIを管理するための機能が分離されます。つまり、リリース・エンジニアは、CD/CIタスクのためのプラグインの管理やライブラリの管理から解放され、CD/DIタスクのためのプラグインやライブラリのバージョンの衝突や互換性で悩むことがなくなります。<
openshift-pipelinesのインストール">OpenShift Pipelinesのインストール
インストール
OpenShift Pipeline は、OperatorHubから、インストールできます。
インストールすると、Open Shiftのメニューに、Pipelinesという項目が表示されます。
Pipelinse配下の各メニューのスクリーンショットは下記です。
OpenShift Pipelinesの概念
大きく、以下のような概念があります。
- ステップ
- タスク
- パイプライン
- トリガー
ステップは、タスクに含まれる最小の作業単位です。コマンドラインや、スクリプトを記述します。このステップ単位に、基準となるイメージを指定します。つまり、ひとつのPodとして動作します。
タスクは、ひとつ、もしくは、複数のステップで構成されます。クラスター・タスクという事前に定義されたタスクがあり、それを利用することで実装時間を低減できます。クラスター・タスクの例として、Gitレポジトリーのクローン等です。タスク単位に実行することができます。タスクを実行するためには、Task Runというオブジェクトを作成します。
パイプラインは、複数のタスクで構成されます。パイプラインを実行するためには、Pipeline Runというオブジェクトを作成します。
トリガーは、パイプラインを起動するための条件を記述します。Gitレポジトリーに変更がPushされたら、パイプラインを起動する、ということを設定できます。
OpenShift Pipelinesのサンプル
サンプルとして、以下のようなタスクを実現するパイプラインを作成します。
- Githubからソースコードをダウンロード
- 静的解析を実施
- Dockerイメージのビルド、および、Image Repositoryにプッシュ
"静的解析を実施するタスクのyaml-spec例">静的解析を実施するタスクのYAML Spec例
このタスクでは、Dockerhubのshellcheckイメージを使用して、静的解析を実施します。
spec:
steps:
- args:
- sample.sh
command:
- /bin/shellcheck
image: 'docker.io/koalaman/shellcheck:v0.7.1'
name: shellcheck-step
resources: {}
workingDir: $(workspaces.output.path)
workspaces:
- name: output
Githubからソースコードをダウンロードタスク、静的解析タスク、ビルドおよびプッシュタスクを含むパイプラインのYAML Spec例
Githubからのソースダウンロード、および、 ドおよびプッシュタスク は、クラスター・タスクを利用しています。
spec:
tasks:
- name: git-clone
params:
- name: url
value: >-
https://github.com/example/sample.git
taskRef:
kind: ClusterTask
name: git-clone
workspaces:
- name: output
workspace: pipeline-ws1
- name: shellcheck-task
runAfter:
- git-clone
taskRef:
kind: Task
name: shellcheck-alpine-task
workspaces:
- name: output
workspace: pipeline-ws1
- name: build-image
params:
- name: TLSVERIFY
value: 'false'
- name: IMAGE
value: >-
image-registry.openshift-image-registry.svc:5000/example/sample
runAfter:
- shellcheck-task
taskRef:
kind: ClusterTask
name: buildah
workspaces:
- name: source
workspace: pipeline-ws1
workspaces:
- name: pipeline-ws1
Pipeline RunのYAML spec例
Pipelineで使用するワークスペースを設定した Pipeline Runオブジェクトを作成して、保存すると、すぐにPipelineは実行されます。
spec:
pipelineRef:
name: pipeline02
serviceAccountName: pipeline02
workspaces:
- name: pipeline-ws1
volumeClaimTemplate:
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
status: {}
Pipeline Run 実行例
Pipeline Runの実行状況は、Open Shift上で、GUIで確認できます。
##トリガー
トリガーを設定すると、下記のようなことを実現することができます。
- Githubが更新されたら、自動的にパイプラインを実行させる
Pipelineのメニューから、Add Triggerを選択する
GithubのPushをトリガーとする等の主要なトリガーは、事前に含まれています
PipelineからTriggerを作成すると、以下のようなイベントリスナーが作成されます。これにより、イベントをリッスンするPodが作成されます。URLという項目は、WebhookのURLです。このURLを、Github等のWebhookに設定します。
まとめ
OpenShift Pipelinesを使用すると、GUIを通して、以下のような事を簡単に実現できます。
- Githubからソースコードをダウンロード
- 静的解析を実施
- コンテナ・イメージのビルド、および、Image Repositoryにプッシュ
- Githubが更新されたら、自動的にパイプラインを実行させる
OpenShift Pipelines のベースとなるTektonでは、コンテナ・イメージを使用して、タスクのステップを実行します。例えば、Gitコマンドを含むコンテナ、静的解析を行うコンテナ、コンテナ・イメージをビルドするコンテナです。この感覚が従来のCD・CIツールとは異なり、興味深い部分です。
細かい部分は割愛しておりますが、なにかの参考になれば幸いです。