備忘
IBM Cloudで最小限のTekton Pipelineを構成してみる。
おそらく無料のプランで実現可能。
前提
Gitとssh clientが使用可能なインターネットに接続されたローカル環境 (Fedora Linux 35にて確認)
IBM Cloudのユーザー登録
ローカルでの用意
IBM Cloud上のGitlabを使用する為のssh接続設定
IBM Cloud上のGitlabを使用する為の接続情報を設定する。
なお、これは必須ではなく、GithubやGitlabなども利用可能。
ここではIBM Cloudのユーザー名はgaf01112とする。
SSHキーがなければ用意し、jp-tok.git.cloud.ibm.comへの接続時にユーザーをIBM Cluodのユーザーとしておく。
必要に応じて、専用のキーを利用するなど変更する。
$ [[ -f ~/.ssh/id_rsa ]] || ssh-keygen -N '' -C ''
...
$ cat <<__EOC__ >> ~/.ssh/config
Host jp-tok.git.cloud.ibm.com
User gaf01112
IdentityFile ~/.ssh/id_rsa
__EOC__
Tektonマニフェストの用意
tekton-pipeline-01ディレクトリー下をリポジトリーとする。
IBM Clouldでのデフォルトなので、.tektonにマニフェストを置くが、他でも指定可能。
$ mkdir -p tekton-pipeline-01/.tekton
$ cd tekton-pipeline-01/.tekton
タスク定義マニフェスト
2ステップのタスクを用意する。
タスク内のステップは順番に実行される。
各ステップはコンテナであり、タスクはPODに相当。
ステップ間で/workspaceなどが共有される。
例えばイメージにgit,terraform,ansibleなどのイメージを指定すれば、インフラ操作を、それらの製品をコントローラーに導入することなく実行可能。
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: task-hello
spec:
steps:
- name: step-hello1
image: docker.io/alpine:3.15.1
script: |
#! /usr/bin/env bash
set -ex
grep PRETTY /etc/os-release
echo hello > /workspace/msg
- name: step-hello2
image: registry.access.redhat.com/ubi8:8.5-236.1647448331
script: |
#! /usr/bin/env bash
set -ex
grep PRETTY /etc/os-release
cat /workspace/msg
パイプライン定義マニフェスト
1タスクのみ定義。
apiVersion: tekton.dev/v1beta1apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: pipeline-hello
spec:
tasks:
- name: task-hello
taskRef:
name: task-hello
EventListenerとTriggerTemplateを定義
実行のトリガーを待つEventListenerと、EventListenerから呼び出すパイプラインを定義するTriggerTemplateを設定する。
IBM Cloud上では、このEventListenerを呼び出すことによりpipelineRunする。
apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:
name: template-pipelinerun-hello
spec:
resourcetemplates:
- apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
generateName: pipeline-hello-run-
spec:
pipelineRef:
name: pipeline-hello
---
apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
metadata:
name: listener1
spec:
triggers:
- bindings:
- name: message
value: Hello from the Triggers EventListener!
template:
ref: template-pipelinerun-hello
https://tekton.dev/docs/triggers/eventlisteners/
https://tekton.dev/docs/triggers/triggertemplates/
IBM Cloudでの設定
IBM Cloudにログイン(予めユーザーを作成してある前提)
ログイン後のダッシュボード画面
左上角の「Navigation Menu」ボタンを選択し、現れた左列のサブメニューにおいて「DevOps」をクリック
ツールチェーンの作成
左列が「ツールチェーン」であることを確認し、「ツールチェーンの作成」ボタンをクリック(どちらのボタンでも良い)
ここでは、リソースグループやロケーションはそのままで作成。
ツールチェーンの作成メニューとなる
表の下の方にある「Build your own ツールチェーン」をクリック
「作成」をクリック
なお、ツールチェーン名は、ここでは入力されていた値を使用しているが、ユーザーで指定可能。
空のツールチェーンが作成される
ツールチェーンにGitリポジトリーを追加
右上の「ツールの追加」ボタンをクリック
Gitのリポジトリーサービスとして、ここではIBM Cloudで提供しているGitLabである「Git リポジトリーおよびIssueトラッキング」をクリックし、プライベートリポジトリーとして使用する。
「GitHub」や「GitLab」を選択、使用してもよい。
ここでは新規に作成とする。
リポジトリー名はユーザーによる指定。
リポジトリー所有者はIBM Cluodのユーザー。
「統合の作成」をクリック
sshキーが未設定の場合、上の「Add SSH key」より設定可能。
keyには~/.ssh/id_rsa.pubの内容を記載。(画面のキーの値はダミー)
TitleとExpiration dateは適当に。
「Add Key」ボタンをクリック
ローカルに戻ってGit push
まだ行っていなければ画面下方のGit global setupにガイドされているgit config --globalを実行
その後、Push an existing folderにガイドされているgit init, add, commit, pushを実行
$ cd ..
$ ls -a
. .. .tekton
$ git init --initial-branch=main
...
$ git remote add origin git@jp-tok.git.cloud.ibm.com:<USERNAME>/tekton-pipeline-01.git
$ git add .
$ git commit -m "Initial commit"
...
$ git push -u origin main
...
IBM Cloudのコンソールに戻って定義の続き
右上の「統合の作成」をクリック
「Continuous Delivery サービスが必要です」に含まれる「サービスの追加」リンクをクリック
ブラウザーにおける新規のタブで以下の画面が開く。(動作はブラウザーにより異なるかもしれない。)
ここでは、無償の「ライト」プランを選択。
右下のご利用条件を読んだ上で、同意にチェックを入れ、右下の「作成」を選択。
自動的に以下の説明画面に移動する。
このページはとりあえず使用しないので、ブラウザーで「ツールチェーン」のタブを選択して戻った後、ブラウザーでリロードをすると、「Continuous Delivery サービスが必要です」が消える。
ツールチェーンにDelivery Pipelineを追加
右上の「ツールの追加」をクリック
「Delivery Pipeline」をクリック
パイプライン名は、ここではtekton-pipeline-01とした。
パイプライン・タイプに、「Tekton」を選択。
その後、右上の「統合の作成」ボタンを選択。
以下のようになる。
Delivery Pipelineアイコンをクリック
リポジトリーの項の右上の追加をクリック
リポジトリーにはプルダウンメニューにあるtekton-pipeline-01を選択。
パスの.tektonはデフォルトの値。リポジトリーにおいてTenton用マニフェストの置き場所を変えている場合にはここを変更。
追加をクリック。
指定パス内のマニフェストを連結した内容が表示されているので、保存をクリック
なお、キャプチャー時には一部 apiVersion: triggers.tekton.dev/v1alpha1 で実施したが、v1beta1 に書き換えて動作を確認している。(上のマニフェストは編集済)
ワーカーの設定
左のメニューにおけるワーカーをクリック
ワーカーに、プルダウンメニューからIBMが提供するワーカーを選択し、保存をクリック
トリガーの追加
左のメニューにおけるトリガーをクリック
追加をクリックするとサブメニューでタイプを選択できる。
手動トリガーの追加
まず「手動」を選択してみる。
トリガー名に「tr1」を設定し、画面最下端の「追加」をクリック
tr1という名前の手動タイプのトリガーが作成されていることが確認できる。
Gitリポジトリートリガーの追加
次にGitリポジトリータイプのトリガーを作ってみる。
追加をクリックしサブメニューで「Gitリポジトリー」を選択。
トリガー名に「tr2」を設定
リポジトリーにtekton-pipeline-01を選択。
選択済みのブランチで Git イベントに対してジョブを自動的に実行 の項において、「コミットがプッシュされたとき」にチェック
画面最下端の「追加」をクリック
tr2が追加されている
これで、git pushのたびにパイプラインが実行される。
指定時刻トリガーの追加
次に指定時刻タイプのトリガーを作ってみる。
追加をクリックしサブメニューで「指定時刻」を選択。
トリガー名に「tr3」を設定
CRON式に「0 3 * * *」(毎日AM3:00)を設定
画面下端の「追加」をクリック
tr3が追加されている
これで指定時刻にパイプラインが実行される。
手動でのパイプラインの実行
パイプライン実行
左メニューでPipelineRunsを選択し、右上の「パイプラインの実行」をクリック
トリガーにtr1を選択して、画面下端の実行をクリック
実行中の状態では、状況の矢印が回る。
名前の最後の827wdなどは実行のたびにランダムにわり振られる。これは、TriggerTemplateにおけるgenerateName:による。
実行完了
パイプライン実行結果の確認
結果を確認するため、名前の項のリンク(pipeline-hello-run-827wd)をクリック
step-hello1のログが表示されている
状況タブ
詳細タブ
step-hello2についても同様に表示可能
失敗時、Gitリポジトリートリガーによる実行、指定時刻トリガーによる実行の例
2はpipelineのマニフェストを誤って編集してgit commit, git pushしたケース。状況が×、トリガーがtr2となっている。
3は同様の失敗の為、削除している
4は修正してgit pushして成功したケース
5は指定時刻トリガーによる実行結果。トリガーがtr3となっている。
参考