kubectl applyなどを使用しないIBM Cloudでの最小限Tekton Pipeline構成実行

備忘



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のユーザーとしておく。
必要に応じて、専用のキーを利用するなど変更する。

```bash
$ [[ -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などのイメージを指定すれば、インフラ操作を、それらの製品をコントローラーに導入することなく実行可能。

```yaml:tekton-pipeline-01/.tekton/task-hello.yaml
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
```

https://tekton.dev/docs/pipelines/tasks/


### パイプライン定義マニフェスト

1タスクのみ定義。


```yaml:tekton-pipeline-01/.tekton/pipeline-hello.yaml
apiVersion: tekton.dev/v1beta1apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: pipeline-hello
spec:
  tasks:
    - name: task-hello
      taskRef:
        name: task-hello
```

https://tekton.dev/docs/pipelines/pipelines/


### EventListenerとTriggerTemplateを定義

実行のトリガーを待つEventListenerと、EventListenerから呼び出すパイプラインを定義するTriggerTemplateを設定する。
IBM Cloud上では、このEventListenerを呼び出すことによりpipelineRunする。

```yaml:tekton-pipeline-01/.tekton/eventlistener.yaml
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での設定


https://cloud.ibm.com/login

IBM Cloudにログイン（予めユーザーを作成してある前提）


![Screenshot from 2022-03-23 09-41-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/89c58304-60a8-318a-691e-de5c8c7e5db2.png)





ログイン後のダッシュボード画面



![Screenshot from 2022-03-23 09-44-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/1b46e358-c446-9ae4-0427-fda01e0ab515.png)

左上角の「Navigation Menu」ボタンを選択し、現れた左列のサブメニューにおいて「DevOps」をクリック


![Screenshot from 2022-03-23 09-44-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/9165b73f-ec89-642d-c537-f7e2ed0fd42f.png)




![Screenshot from 2022-03-23 09-47-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/57d26a2d-1f37-6822-97f7-b106aa2325c8.png)


## ツールチェーンの作成

左列が「ツールチェーン」であることを確認し、「ツールチェーンの作成」ボタンをクリック（どちらのボタンでも良い)
ここでは、リソースグループやロケーションはそのままで作成。


![Screenshot from 2022-03-23 09-54-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/fbfa5987-f205-5a7c-5151-e593e4cbb813.png)

ツールチェーンの作成メニューとなる
表の下の方にある「Build your own ツールチェーン」をクリック


![Screenshot from 2022-03-23 09-56-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/87067748-ca94-0dad-0984-228ef74fca2b.png)


![Screenshot from 2022-03-23 09-57-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/614453e7-9210-ae6e-f863-260e62f16f7e.png)

「作成」をクリック
なお、ツールチェーン名は、ここでは入力されていた値を使用しているが、ユーザーで指定可能。

空のツールチェーンが作成される

![Screenshot from 2022-03-23 10-01-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/da5d0211-57ec-c8d4-0aac-ab52a4dcabd9.png)

## ツールチェーンにGitリポジトリーを追加

右上の「ツールの追加」ボタンをクリック

![Screenshot from 2022-03-23 10-08-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/a6a07284-f0f6-ae71-bc9b-8025484187c9.png)

Gitのリポジトリーサービスとして、ここではIBM Cloudで提供しているGitLabである「Git リポジトリーおよびIssueトラッキング」をクリックし、プライベートリポジトリーとして使用する。
「GitHub」や「GitLab」を選択、使用してもよい。

![Screenshot from 2022-03-23 10-15-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/7437f8f9-7908-c9ea-54a4-ab2a3e93265c.png)

ここでは新規に作成とする。
リポジトリー名はユーザーによる指定。
リポジトリー所有者はIBM Cluodのユーザー。 
「統合の作成」をクリック

![Screenshot from 2022-03-23 13-47-51x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/d4ea10af-d0b3-d4fd-3059-211300b26bed.png)


sshキーが未設定の場合、上の「Add SSH key」より設定可能。

keyには~/.ssh/id_rsa.pubの内容を記載。(画面のキーの値はダミー)
TitleとExpiration dateは適当に。
「Add Key」ボタンをクリック


![Screenshot from 2022-03-23 13-53-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/ac1b16ff-75c2-f35c-6514-9b57a798323a.png)






# ローカルに戻ってGit push

![Screenshot from 2022-03-23 14-05-42xx.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/099d569e-695b-865e-84ea-b4d9267a8b1a.png)


まだ行っていなければ画面下方のGit global setupにガイドされているgit config --globalを実行


その後、Push an existing folderにガイドされているgit init, add, commit, pushを実行


```bash
$ 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のコンソールに戻って定義の続き



右上の「統合の作成」をクリック

![Screenshot from 2022-03-23 13-17-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/1436ce15-adee-a5df-b2e9-cd5ff2aa0e5c.png)


「Continuous Delivery サービスが必要です」に含まれる「サービスの追加」リンクをクリック
ブラウザーにおける新規のタブで以下の画面が開く。(動作はブラウザーにより異なるかもしれない。)

![Screenshot from 2022-03-23 13-18-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/195e2e71-8d03-a1ac-c9db-85c04c572c49.png)

ここでは、無償の「ライト」プランを選択。
右下のご利用条件を読んだ上で、同意にチェックを入れ、右下の「作成」を選択。

自動的に以下の説明画面に移動する。




![Screenshot from 2022-03-23 13-22-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/90181c6c-5359-c007-c7b4-994080e5e52c.png)

このページはとりあえず使用しないので、ブラウザーで「ツールチェーン」のタブを選択して戻った後、ブラウザーでリロードをすると、「Continuous Delivery サービスが必要です」が消える。

![Screenshot from 2022-03-23 13-26-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/ea0e485a-c143-99df-3a86-154c8f2c784a.png)

## ツールチェーンにDelivery Pipelineを追加

右上の「ツールの追加」をクリック

![Screenshot from 2022-03-23 13-30-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/cef0c916-e49e-ba70-20e6-6ee1ccda4761.png)

「Delivery Pipeline」をクリック


パイプライン名は、ここではtekton-pipeline-01とした。
パイプライン・タイプに、「Tekton」を選択。
その後、右上の「統合の作成」ボタンを選択。

![Screenshot from 2022-03-23 13-34-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/ca0c2135-4308-d38f-5be9-dc3c3cc2a054.png)

以下のようになる。

![Screenshot from 2022-03-23 13-36-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/4468fc43-51b3-20d2-086a-c06d10257e3c.png)

Delivery Pipelineアイコンをクリック

![Screenshot from 2022-03-23 21-55-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/d312cc85-0c68-96f6-3f50-be70687797e7.png)


![Screenshot from 2022-03-23 13-41-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/b14bf6df-5999-14ea-6973-c775bfd22dd3.png)

リポジトリーの項の右上の追加をクリック

![Screenshot from 2022-03-23 21-59-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/6d1968e4-b340-165c-58a5-38a075eec656.png)

リポジトリーにはプルダウンメニューにあるtekton-pipeline-01を選択。
パスの.tektonはデフォルトの値。リポジトリーにおいてTenton用マニフェストの置き場所を変えている場合にはここを変更。
追加をクリック。

![Screenshot from 2022-03-23 22-03-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/d4623380-af05-24e1-1782-f21ed2f87183.png)

指定パス内のマニフェストを連結した内容が表示されているので、保存をクリック
なお、キャプチャー時には一部 apiVersion: triggers.tekton.dev/v1alpha1 で実施したが、v1beta1 に書き換えて動作を確認している。(上のマニフェストは編集済)

### ワーカーの設定

左のメニューにおけるワーカーをクリック

![Screenshot from 2022-03-23 22-06-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/79590bea-fa9d-9e5f-1e29-684f97405c69.png)

ワーカーに、プルダウンメニューからIBMが提供するワーカーを選択し、保存をクリック

### トリガーの追加


左のメニューにおけるトリガーをクリック

![Screenshot from 2022-03-23 22-08-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/329f812e-3747-22d7-b3b6-46c761f4c88b.png)

追加をクリックするとサブメニューでタイプを選択できる。

#### 手動トリガーの追加


まず「手動」を選択してみる。

![Screenshot from 2022-03-23 22-09-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/ef8e3709-8a41-d168-1634-184fe49c5327.png)

トリガー名に「tr1」を設定し、画面最下端の「追加」をクリック

![Screenshot from 2022-03-23 22-15-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/01ebc963-d5ae-d0ec-cbb5-eb967efdc743.png)


tr1という名前の手動タイプのトリガーが作成されていることが確認できる。

![Screenshot from 2022-03-23 22-15-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/95b52f2c-e617-5da0-e400-948fc2149809.png)


#### Gitリポジトリートリガーの追加


次にGitリポジトリータイプのトリガーを作ってみる。
追加をクリックしサブメニューで「Gitリポジトリー」を選択。

![Screenshot from 2022-03-23 22-16-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/f7489876-7824-5eb5-c8b4-b745a86f23e5.png)


トリガー名に「tr2」を設定
リポジトリーにtekton-pipeline-01を選択。
選択済みのブランチで Git イベントに対してジョブを自動的に実行 の項において、「コミットがプッシュされたとき」にチェック
画面最下端の「追加」をクリック

![Screenshot from 2022-03-23 22-21-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/3c29af76-451f-ccbc-debb-49c3be0a4586.png)


tr2が追加されている

![Screenshot from 2022-03-23 22-21-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/6aa656f7-b7dd-79c5-3068-28809ec7019a.png)

これで、git pushのたびにパイプラインが実行される。


#### 指定時刻トリガーの追加

次に指定時刻タイプのトリガーを作ってみる。
追加をクリックしサブメニューで「指定時刻」を選択。

![Screenshot from 2022-03-23 22-25-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/e958b1dd-4125-51c1-9ff2-6d801dd05d94.png)

トリガー名に「tr3」を設定
CRON式に「0 3 * * *」(毎日AM3:00)を設定
画面下端の「追加」をクリック

![Screenshot from 2022-03-23 22-27-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/cfdad528-1b48-7a46-d2fd-4e7847e628f9.png)


![Screenshot from 2022-03-23 22-31-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/d846a52e-3867-9ec1-f247-3c0e281635a5.png)

tr3が追加されている

![Screenshot from 2022-03-23 22-33-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/36caf2a5-52ae-9e15-59b4-4946368b7773.png)

これで指定時刻にパイプラインが実行される。


## 手動でのパイプラインの実行

### パイプライン実行

左メニューでPipelineRunsを選択し、右上の「パイプラインの実行」をクリック

![Screenshot from 2022-03-23 22-36-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/d977adb6-77f2-0c88-61ec-a4eb50cb5fb6.png)

トリガーにtr1を選択して、画面下端の実行をクリック

![Screenshot from 2022-03-23 22-37-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/ada2f264-4a37-5339-8789-d025408072fb.png)

実行中の状態では、状況の矢印が回る。
名前の最後の827wdなどは実行のたびにランダムにわり振られる。これは、TriggerTemplateにおけるgenerateName:による。

![Screenshot from 2022-03-23 22-38-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/6a2147bb-cf16-3f48-60cc-81dc17340df2.png)


実行完了

![Screenshot from 2022-03-23 22-38-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/daad4334-bb64-62f9-e6e8-96b67dcf536c.png)


### パイプライン実行結果の確認

結果を確認するため、名前の項のリンク(pipeline-hello-run-827wd)をクリック

step-hello1のログが表示されている

![Screenshot from 2022-03-23 22-42-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/d84a1d79-f813-3f81-bfb2-17e29d4729cf.png)

状況タブ

![Screenshot from 2022-03-23 22-44-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/83943d5b-748e-40ea-9133-ac9ce00e49de.png)

詳細タブ

![Screenshot from 2022-03-23 22-44-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/bbfd0438-27d9-913c-dc3c-22225f2660e8.png)


step-hello2についても同様に表示可能

![Screenshot from 2022-03-23 22-42-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/8d0d5247-b856-dfd0-2b0c-c799ee40bff6.png)

## 失敗時、Gitリポジトリートリガーによる実行、指定時刻トリガーによる実行の例

![Screenshot from 2022-03-24 07-59-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187032/f9aecb06-32f9-a201-8ff3-649c522f53d3.png)

2はpipelineのマニフェストを誤って編集してgit commit, git pushしたケース。状況が×、トリガーがtr2となっている。
3は同様の失敗の為、削除している
4は修正してgit pushして成功したケース
5は指定時刻トリガーによる実行結果。トリガーがtr3となっている。

# 参考
https://cloud.ibm.com/docs/ContinuousDelivery?topic=ContinuousDelivery-tekton-pipelines

https://qiita.com/hiroyuki_onodera/items/fb973b40b8640b9b1fc7