DUICUO

Tekton を使用して Kubernetes で最初の CI/CD パイプラインを作成する

Tektonは、継続的インテグレーションおよび継続的デリバリー(CI/CD)システムを構築するためのKubernetesネイティブのオープンソースフレームワークです。基盤となる実装の詳細を抽象化することで、複数のクラウドプロバイダーやオンプレミスシステムにまたがるエンドツーエンド(ビルド、テスト、デプロイ)のアプリケーション開発を支援します。

テクトンの紹介

当初はKnative Buildと呼ばれていたTektonは、後に独自のガバナンス組織を持つ独立したオープンソースプロジェクトに再編され、現在はLinux Foundationプロジェクトとなっています。Tektonは、クラスター全体にわたるコンテナイメージの構築とデプロイメントのワークフローを提供します。つまり、継続的インテグレーション(CI)と継続的デリバリー(CD)のサービスです。Tektonは、Tektonパイプラインと、Tekton CLI、トリガー、カタログなどのサポートコンポーネントで構成されています。

TektonはKubernetesネイティブアプリケーションです。Kubernetesクラスターの拡張機能としてインストールされ、パイプライン用に作成・再利用できる構成要素を定義するカスタマイズされたKubernetesリソースセットで構成されています。TektonはKubernetesネイティブテクノロジーであるため、非常に簡単にスケーリングできます。ワークロードを増やす必要がある場合は、クラスターにノードを追加するだけです。また、スケーラブルな設計とコミュニティ提供のコンポーネントライブラリにより、カスタマイズも容易です。

Tekton は、CI/CD システムを動作させる必要がある開発者や、組織内の開発者向けに CI/CD システムを構築するプラットフォーム エンジニアにとって理想的な選択肢です。

テクトンコンポーネント

CI/CDパイプラインの構築は複雑なプロセスであるため、Tektonは各ステップに対応するツールを提供しています。Tektonが提供する主なコンポーネントは次のとおりです。

  • パイプライン: CI/CD パイプラインを組み立てるために使用するビルディング ブロックとして、カスタム Kubernetes リソースのセットを定義します。
  • トリガー: イベントペイロードから抽出された情報に基づいてパイプラインを作成できるKubernetesカスタムリソースの一種です。例えば、Gitリポジトリへのマージリクエストが作成されるたびに、パイプラインのインスタンス化と実行をトリガーできます。
  • コマンドライン CLI: ​tkn​と呼ばれるコマンドライン インターフェイスを提供します。これを使用して、ターミナルから Tekton と対話できます。
  • ダッシュボード: パイプラインの実行情報を表示する、Tekton パイプラインの Web ベースのグラフィカル インターフェイス。
  • カタログ: 独自のパイプラインで使用できる、コミュニティが提供した高品質の Tekton ビルディング ブロック (タスク、パイプラインなど) のコレクション。
  • セントラル ハブ: Tekton カタログにアクセスするための Web ベースのグラフィカル インターフェイス。
  • オペレーター: これは、Kubernetes クラスターで Tekton プロジェクトをインストール、更新、アップグレード、削除できる Kubernetes オペレーター モードです。
  • Chains: Tekton内でサプライチェーンのセキュリティ問題を処理できるKubernetesカスタムリソース定義(CRD)コントローラー。開発中。
  • 結果: ユーザーが CI/CD ワークロード履歴を論理的にグループ化し、長期的な結果のストレージをパイプライン コントローラーから分離できるように設計されています。

テクトン用語

テクトン用語

  • ステップは、Python ウェブアプリケーションのユニットテストの実行や Java プログラムのコンパイルなど、CI/CD ワークフローにおける最も基本的な構成要素です。Tekton はコンテナイメージを使用して各ステップを実行します。
  • タスク: `:kissing:*` は、特定の順序で並べられたステップの集合です。Tekton はタスクを Kubernetes ポッドとして実行し、各ステップがポッドになります。
  • パイプラインとは、特定の順序で並べられたタスクの集合です。Tektonはすべてのタスクを有向非巡回グラフ(DAG)に接続し、グラフを順番に実行します。つまり、Kubernetesコンテナポッドを作成し、各ポッドが期待どおりに正常に実行されることを保証します。

テクトンパイプライン

  • PipelineRun: 名前が示すように、パイプラインの特定の実行です。
  • TaskRun: これはタスクの実際の実行です。パイプライン外でタスクを実行することで、タスク内の各ステップの具体的な実行内容を確認できます。

CI/CDパイプラインを作成する

Tektonを使い始める最も簡単な方法は、シンプルなパイプラインを自分で作成することです。Kubernetesを日常的に使用している方なら、YAMLに馴染みがあるでしょう。TektonのパイプラインはまさにYAMLで定義されます。以下は、クローンしたコードベースを使ったシンプルなパイプラインの例です。

まず、 ​task.yaml​ファイルを作成し、お好みのテキストエディタで開きます。このファイルには、実行するステップを定義します。この例ではリポジトリのクローンを作成するため、このステップの名前を「clone」としています。このファイルでは、いくつかの環境変数を設定し、簡単なシェルスクリプトを使用してクローンを実行します。

次はタスクです。ステップはタスクから呼び出される関数と考えることができ、ステップに必要なパラメータとワークスペースを設定します。

 apiバージョン: tekton.dev/v1beta1
種類:タスク
メタデータ
名前: git-clone
仕様:
ワークスペース:
-名前:出力
説明: Git リポジトリは、このワークスペースをバックアップするボリュームにクローンされます。
パラメータ:
-名前: URL
説明:クローン元のリポジトリの URL。
タイプ:文字列
-名前:リビジョン
説明:チェックアウトするリビジョン。(ブランチ、タグ、sha、ref など)
タイプ:文字列
デフォルト ""
手順:
-名前:クローン
イメージ: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.21.0"
環境:
-名前: PARAM_URL
: $(params.url)
-名前: PARAM_REVISION
: $(params.revision)
-名前: WORKSPACE_OUTPUT_PATH
: $(workspaces.output.path)
スクリプト: |
#!/usr/bin/env sh
セット -eu

CHECKOUT_DIR="${WORKSPACE_OUTPUT_PATH}"

/ko-app/git-init \
-url="${PARAM_URL}" \
-revision="${PARAM_REVISION}" \
-path="${CHECKOUT_DIR}"
cd "${CHECKOUT_DIR}"
EXIT_CODE="$?"
[ "${EXIT_CODE}" != 0 ] の場合;
終了 "${EXIT_CODE}"
フィ
# Readme ファイルを読んでクローンが成功したことを確認します。
${CHECKOUT_DIR}/README.md を cat します。

2つ目のファイル​pipeline.yaml​を作成し、お好みのテキストエディタで開きます。このファイルでは、タスクを実行および処理できるワークスペースなどの重要なパラメータを設定することで、パイプラインを定義します。

 apiバージョン: tekton.dev/v1beta1
種類:パイプライン
メタデータ
名前: cat-branch-readme
仕様:
パラメータ:
-名前:リポジトリURL
タイプ:文字列
説明:クローン元の Git リポジトリの URL。
-名前:ブランチ名
タイプ:文字列
説明:クローンする Git ブランチ。
ワークスペース:
-名前:共有データ
説明: |
このワークスペースはクローンされたgitリポジトリを受け取り、渡されます
リポジトリの README.md ファイルを読み込むための次のタスクに進みます。
タスク:
-名前:フェッチリポジトリ
タスク参照:
名前: git-clone
ワークスペース:
-名前:出力
ワークスペース:共有データ
パラメータ:
-名前: URL
: $(params.repo-url)
-名前:リビジョン
: $(params.branch-name)

最後に、` ​pipelinerun.yaml​ファイルを作成し、お好みのテキストエディタで開きます。このファイルはパイプラインが実際に実行される場所です。パイプラインで定義されたパラメータ(そしてタスクファイルで定義されたタスク)が呼び出されます。

 apiバージョン: tekton.dev/v1beta1
種類: PipelineRun
メタデータ
名前: git-clone-ブランチのチェックアウト
仕様:
パイプライン参照:
名前: cat-branch-readme
ワークスペース:
-名前:共有データ
ボリュームクレームテンプレート:
仕様:
アクセスモード:
-一度だけ読み書き可能
リソース
リクエスト:
ストレージ: 1Gi
パラメータ:
-名前:リポジトリURL
: < https://github.com/tektoncd/pipeline.git >
-名前:ブランチ名
:リリースv0.12.x

異なるタスクを異なるファイルに分割する利点は、 ​git-clone​タスクを複数のパイプラインで再利用できることです。

例えば、パイプラインプロジェクトのエンドツーエンドテストを実行したいとします。git ​git-clone​タスクを使用すると、各テストが最新のコードに基づいていることを確認できます

要約

Kubernetes を使い慣れている方なら、Tekton は他のネイティブ Kubernetes アプリケーションと同じくらい簡単に使えます。パイプラインの作成と操作に役立つツールが多数用意されています。自動化に興味がある方は、ぜひ Tekton をお試しください。