1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-03-23

備忘

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

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

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

1タスクのみ定義。

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

EventListenerとTriggerTemplateを定義

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

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での設定

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

Screenshot from 2022-03-23 09-41-30.png

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

Screenshot from 2022-03-23 09-44-16.png

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

Screenshot from 2022-03-23 09-44-42.png

Screenshot from 2022-03-23 09-47-38.png

ツールチェーンの作成

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

Screenshot from 2022-03-23 09-54-28.png

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

Screenshot from 2022-03-23 09-56-06.png

Screenshot from 2022-03-23 09-57-52.png

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

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

Screenshot from 2022-03-23 10-01-43.png

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

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

Screenshot from 2022-03-23 10-08-25.png

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

Screenshot from 2022-03-23 10-15-36.png

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

Screenshot from 2022-03-23 13-47-51x.png

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

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

Screenshot from 2022-03-23 13-53-07.png

ローカルに戻ってGit push

Screenshot from 2022-03-23 14-05-42xx.png

まだ行っていなければ画面下方の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のコンソールに戻って定義の続き

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

Screenshot from 2022-03-23 13-17-54.png

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

Screenshot from 2022-03-23 13-18-38.png

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

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

Screenshot from 2022-03-23 13-22-09.png

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

Screenshot from 2022-03-23 13-26-52.png

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

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

Screenshot from 2022-03-23 13-30-01.png

「Delivery Pipeline」をクリック

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

Screenshot from 2022-03-23 13-34-10.png

以下のようになる。

Screenshot from 2022-03-23 13-36-15.png

Delivery Pipelineアイコンをクリック

Screenshot from 2022-03-23 21-55-25.png

Screenshot from 2022-03-23 13-41-40.png

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

Screenshot from 2022-03-23 21-59-09.png

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

Screenshot from 2022-03-23 22-03-29.png

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

ワーカーの設定

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

Screenshot from 2022-03-23 22-06-21.png

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

トリガーの追加

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

Screenshot from 2022-03-23 22-08-16.png

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

手動トリガーの追加

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

Screenshot from 2022-03-23 22-09-42.png

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

Screenshot from 2022-03-23 22-15-30.png

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

Screenshot from 2022-03-23 22-15-40.png

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

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

Screenshot from 2022-03-23 22-16-48.png

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

Screenshot from 2022-03-23 22-21-10.png

tr2が追加されている

Screenshot from 2022-03-23 22-21-23.png

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

指定時刻トリガーの追加

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

Screenshot from 2022-03-23 22-25-12.png

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

Screenshot from 2022-03-23 22-27-10.png

Screenshot from 2022-03-23 22-31-09.png

tr3が追加されている

Screenshot from 2022-03-23 22-33-20.png

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

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

パイプライン実行

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

Screenshot from 2022-03-23 22-36-29.png

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

Screenshot from 2022-03-23 22-37-20.png

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

Screenshot from 2022-03-23 22-38-24.png

実行完了

Screenshot from 2022-03-23 22-38-46.png

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

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

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

Screenshot from 2022-03-23 22-42-36.png

状況タブ

Screenshot from 2022-03-23 22-44-39.png

詳細タブ

Screenshot from 2022-03-23 22-44-43.png

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

Screenshot from 2022-03-23 22-42-49.png

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

Screenshot from 2022-03-24 07-59-50.png

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

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?