Tektonパイプラインの作成に役立つ記事

Tektonパイプラインの作成に役立つ記事

[[406227]]

先ほど作成した 2 つのタスク「テスト」と「ビルドとプッシュ」が完了しました。これら 2 つのタスクをパイプラインに整理するパイプラインを作成することもできます。ここで使用する Pipeline の CRD オブジェクトを示します。

パイプラインの作成

たとえば、ここでのパイプライン プロセスでは、最初にテスト タスクを実行し、それが成功した場合は、後続のビルドおよびプッシュ タスクを実行します。次に、次の内容を含む test-pipeline.yaml という名前のリソース オブジェクトを作成します。

  1. # テストパイプライン.yaml
  2. apiバージョン: tekton.dev/v1beta1
  3. 種類: パイプライン
  4. メタデータ:
  5. 名前: テストパイプライン
  6. 仕様:
  7. リソース: # タスクの入力および出力リソース宣言を提供する
  8. -名前: デモgit
  9. タイプ: git
  10. -名前: 港のイメージ
  11. タイプ: 画像
  12. タスク: #パイプラインにタスクを追加する
  13. # アプリケーションテストを実行する
  14. -名前: テスト
  15. タスク参照:
  16. 名前: テスト
  17. リソース:
  18. 入力:
  19. - name : repo # タスク入力名
  20. resource: demo-git # パイプラインリソース名
  21. # Dockerイメージをビルドしてプッシュする
  22. -名前: ビルドプッシュ
  23. タスク参照:
  24. 名前: ビルドプッシュ
  25. 実行後:
  26. - test # テストタスクが実行された後
  27. リソース:
  28. 入力:
  29. - name : repo # 入力gitリポジトリリソースを指定します
  30. リソース: デモgit
  31. 出力: #出力画像リソースを指定する
  32. -名前: 組み込みイメージ
  33. リソース: 港のイメージ

まず、パイプラインに必要なリソース(入力リソースまたは出力リソース)を定義する必要があります。ここで入力されるのは、repo という名前のアプリケーション ソース コードの GitHub リポジトリの 1 つだけです。次に、タスクを定義します。各タスクは taskRef を通じて参照され、タスクに必要な入力パラメータが渡されます。

このリソース オブジェクトを直接作成することもできます。

  1. $ kubectl apply -f テストパイプライン.yaml
  2. pipeline.tekton.dev/test-pipeline が作成されました

先ほど、TaskRun を作成して Task タスクをトリガーするのと同様に、PipelineRun オブジェクトを作成してパイプラインを実行できることを説明しました。ここでは、パイプラインを実行するために、test-pipelinerun.yaml という名前の PipelineRun オブジェクトを作成します。ファイルの内容は次のとおりです。

  1. apiバージョン: tekton.dev/v1beta1
  2. 種類: PipelineRun
  3. メタデータ:
  4. 名前: test-pipelinerun
  5. 仕様:
  6. サービスアカウント名: build-sa
  7. パイプライン参照:
  8. 名前: テストパイプライン
  9. リソース:
  10. - name : demo-git # 入力gitリポジトリリソースを指定します
  11. リソース参照:
  12. 名前: デモgit
  13. - name : harbor-image #出力画像リソースを指定する
  14. リソース参照:
  15. 名前: 港のイメージ

定義方法はTaskRunとほぼ同じです。 ServiceAccount オブジェクトは serviceAccountName 属性を通じて指定され、pipelineRef はパイプライン オブジェクトに関連付けられます。同様に、このリソースを直接作成することもできます。これにより、作成後にパイプライン タスクがトリガーされます。

  1. $ kubectl apply -f テストパイプラインrun.yaml
  2. pipelinerun.tekton.dev/test-pipelinerun が作成されました
  3. $ github kubectl ポッドを取得します | grep テストパイプライン実行
  4. test-pipelinerun-build- and -push-62g65-pod-6jqqf 0/4 初期化:1/2 0 3秒
  5. test-pipelinerun-test-c4r9m-pod-j7jjd 0/2 完了 0 12秒
  6. $ tkn pipelinerun でテストパイプラインの実行を記述します
  7. 名前: test-pipelinerun
  8. 名前空間:デフォルト 
  9. パイプライン参照: test-pipeline
  10. サービスアカウント: build-sa
  11. タイムアウト: 1時間0分0秒
  12. ラベル:
  13. tekton.dev/pipeline=テストパイプライン
  14.  
  15. 🌡️ ステータス
  16.  
  17. 開始期間ステータス
  18. 47秒前 22秒 成功しました
  19.  
  20. 📦 リソース
  21.  
  22. 名前リソース参照
  23. ∙ デモ git デモ git
  24. ∙ 港のイメージ 港のイメージ
  25.  
  26. ⚓ パラメータ
  27.  
  28. パラメータなし
  29.  
  30. 📝 結果
  31.  
  32. 結果なし
  33.  
  34. 📂 ワークスペース
  35.  
  36. ワークスペースなし
  37.  
  38. 🗂 タスクラン
  39.  
  40. 名前タスク開始 所要時間 ステータス
  41. ∙ test-pipelinerun-build- and -push-62g65 build- and -push 38秒前 13秒 成功しました
  42. ∙ test-pipelinerun-test-c4r9m テスト 46秒前 8秒 成功

これは、パイプラインが正常に実行されたことを証明します。 Kubernetes クラスターに Tekton をインストールし、タスクを定義し、YAML マニフェストと Tekton CLI を使用して TaskRun を作成してテストしました。私たちは 2 つのタスクで構成される Tektok パイプラインを作成しました。最初のタスクは GitHub からコードを複製してアプリケーション テストを実行し、2 番目のタスクは Docker イメージをビルドして Docker Hub にプッシュします。

結果を使用してデータを渡す

上記のように、イメージをビルドするときに、イメージタグがハードコードされているか、実行されるたびにパラメータを介して渡す必要があるため、面倒です。では、画像タグを自動的に生成する方法はあるのでしょうか?たとえば、タイムスタンプに基づいてビルド ID を生成します。

ここでタスクを定義し、スクリプトを使用してデータを取得し、結果に渡すことができます。これらの結果データをパイプライン内の他のタスクに渡すことができます。たとえば、git コミットの SHA 値を取得したり、ミラー タグとしてランダム ID を生成したりします。たとえば、ここでは generate-build-id という名前のタスクを作成し、get-timestamp と get-buildid という 2 つのステップを定義します。 1 つはタイムスタンプを生成するために使用され、もう 1 つは基本バージョンを含む結果値を生成するために使用され、その結果が結果に追加されます。

  1. # ビルドID.yamlを生成する
  2. apiバージョン: tekton.dev/v1beta1
  3. 種類: タスク
  4. メタデータ:
  5. 名前: ビルドIDを生成する
  6. 仕様:
  7. 説明: >-
  8. ベースバージョンを指定すると、このタスクは、次のコードを追加し一意のビルドIDを生成します。
  9. ベースバージョン現在 タイムスタンプ
  10. パラメータ:
  11. -名前: ベースバージョン
  12. 説明: 基本製品バージョン
  13. タイプ: 文字列
  14. デフォルト: "1.0"  
  15. 結果:
  16. -名前:タイムスタンプ 
  17. 説明:現在の タイムスタンプ 
  18. -名前:ビルドID
  19. 説明:現在ビルドID
  20. 手順:
  21. -名前: get-タイムスタンプ 
  22. イメージ: bash:5.0.18
  23. スクリプト: |
  24. #!/usr/bin/env バッシュ
  25. ts=`日付  「+%Y%m%d-%H%M%S」 `
  26. echo "現在のタイムスタンプ: ${ts}"  
  27. ${ts} をエコーし​​ます | tr -d "\n" | tee $(結果.タイムスタンプ.パス)
  28. -名前: get-buildid
  29. イメージ: bash:5.0.18
  30. スクリプト: |
  31. #!/usr/bin/env バッシュ
  32. ts=`cat $(results. timestamp .path)`
  33. ビルドId=$(inputs.params.base-version)-${ts}
  34. ${buildId} をエコーし​​ます | tr -d "\n" |ティー $(結果.ビルドID.パス)

上記のタスクを直接作成します。

  1. kubectl apply -f ビルドID.yaml を生成します

作成が完了したら、パイプラインでこのタスクを使用してビルド ID を生成できるようになります。 test-pipeline.yaml を変更し、generate-build-id タスクを追加します。

  1. # テストパイプライン.yaml
  2. apiバージョン: tekton.dev/v1beta1
  3. 種類: パイプライン
  4. メタデータ:
  5. 名前: テストパイプライン
  6. 仕様:
  7. リソース: # タスクの入力および出力リソース宣言を提供する
  8. -名前: デモgit
  9. タイプ: git
  10. -名前: 港のイメージ
  11. タイプ: 画像
  12. パラメータ:
  13. -名前:画像タグ
  14. タイプ: 文字列
  15. タスク: #パイプラインにタスクを追加する
  16. # アプリケーションテストを実行する
  17. -名前: テスト
  18. タスク参照:
  19. 名前: テスト
  20. リソース:
  21. 入力:
  22. - name : repo # タスク入力名
  23. resource: demo-git # パイプラインリソース名
  24. -名前: ビルドIDを取得
  25. タスク参照:
  26. 名前: ビルドIDを生成する
  27. パラメータ:
  28. -名前: ベースバージョン
  29. 値: $(params.image-tag)
  30. # Dockerイメージをビルドしてプッシュする
  31. -名前: ビルドプッシュ
  32. タスク参照:
  33. 名前: ビルドプッシュ
  34. 実行後:
  35. - test # テストタスクが実行された後
  36. リソース:
  37. 入力:
  38. - name : repo # 入力gitリポジトリリソースを指定します
  39. リソース: デモgit
  40. 出力: #出力画像リソースを指定する
  41. -名前: 組み込みイメージ
  42. リソース: 港のイメージ
  43. パラメータ:
  44. -名前: イメージタグ
  45. 値: "$(tasks.get-build-id.results.build-id)"  

次に、ビルド アンド プッシュ タスクで、「$(tasks.get-build-id.results.build-id)」を通じてビルド ID を取得し、この ID をタスクにパラメーターとして渡します。そのため、ビルド アンド プッシュ タスクに build-id パラメーターも追加する必要があります。

  1. # タスクビルドプッシュ.yaml
  2. apiバージョン: tekton.dev/v1beta1
  3. 種類: タスク
  4. メタデータ:
  5. 名前: ビルドプッシュ
  6. 仕様:
  7. リソース:
  8. 入力: #入力リソースを定義する
  9. - name : repo #GitHub上のリポジトリであるリソースを入力します
  10. タイプ: git
  11. 出力: #出力リソースを定義する
  12. - name :builtImage # 出力イメージ名
  13. タイプ: 画像
  14. パラメータ:
  15. - name : pathToDockerfile #リポジトリ内のdockerfileの場所を指定します
  16. タイプ: 文字列
  17. デフォルト: $(resources.inputs.repo.path)/Dockerfile # リポジトリリソースへのパス
  18. 説明:ビルドするdockerfileパス
  19. - name : pathToContext #ウェアハウス内のdockerfileの場所を指定します
  20. タイプ: 文字列
  21. デフォルト: $(resources.inputs.repo.path) # リポジトリリソースのパス
  22. 説明: dockerデーモン使用するビルドコンテキスト
  23. -名前: イメージタグ
  24. タイプ: 文字列
  25. デフォルト: "v0.2.0"  
  26. 説明: Docker イメージタグ
  27. 手順:
  28. -名前: ビルドプッシュ
  29. イメージ: docker:stable
  30. スクリプト: |
  31. #!/usr/bin/envsh
  32. docker ログインharbor.k8s.local  
  33. docker ビルド -t $(resources.outputs.builtImage.url):$(params.imageTag) -f $(params.pathToDockerfile) $(params.pathToContext)
  34. docker push $(resources.outputs.builtImage.url):$(params.imageTag) # ここでのパラメータは入力と出力で定義されます
  35. ボリュームマウント:
  36. - name : dockersock #docker.sock ファイルをマウントし、ホストの docker デーモンを使用してイメージを構築します
  37. マウントパス: /var/run/docker.sock
  38. ボリューム:
  39. -名前: dockersock
  40. ホストパス:
  41. パス: /var/run/docker.sock

次に、builtImage 出力リソースの URL 定義からイメージ タグを削除し、PipelineRun オブジェクトに image-tag パラメータを追加する必要があります。

  1. # テストパイプライン実行.yaml
  2. apiバージョン: tekton.dev/v1beta1
  3. 種類: PipelineRun
  4. メタデータ:
  5. 名前: test-pipelinerun
  6. 仕様:
  7. サービスアカウント名: build-sa
  8. パイプライン参照:
  9. 名前: テストパイプライン
  10. リソース:
  11. - name : demo-git # 入力gitリポジトリリソースを指定します
  12. リソース参照:
  13. 名前: デモgit
  14. - name : harbor-image #出力画像リソースを指定する
  15. リソース参照:
  16. 名前: 港のイメージ
  17. パラメータ:
  18. -名前:画像タグ
  19. 値: "v0.3.0"  

すべての変更が完了したら、パイプライン全体を再実行できます。

  1. $ tkn pipelinerun ログ test-pipelinerun
  2. [test : git-source-repo-g68nd] { "level" : "info" , "ts" :1623934515.6170688, "caller" : "git/git.go:169" , "msg" : "https://github.com.cnpmjs.org/cnych/tekton-demo @ 5e1e3a1d0f167b9b639df5b802a0f0f81064d21e (grafted、HEAD、origin/master) をパス /workspace/repo に正常にクローンしました" }
  3. [テスト: git-source-repo-g68nd] { "level" : "info" , "ts" :1623934515.6349964, "caller" : "git/git.go:207" , "msg" : "パス/workspace/repoのサブモジュールが正常に初期化され、更新されました" }
  4.  
  5. [テスト: run-test] 合格
  6. [テスト: run-test] ok _/workspace/repo 0.002秒
  7.  
  8. [get-build-id : get- timestamp ]現在 タイムスタンプ: 20210617-125634
  9. [ビルドIDの取得:タイムスタンプの取得] 20210617-125634
  10.  
  11. [ビルドIDの取得: ビルドIDの取得] v0.3.0-20210617-125634
  12.  
  13.  
  14. [build- and -push : git-source-repo-v2lhk] { "level" : "info" , "ts" :1623934601.68953, "caller" : "git/git.go:169" , "msg" : "https://github.com.cnpmjs.org/cnych/tekton-demo @ 5e1e3a1d0f167b9b639df5b802a0f0f81064d21e (grafted、HEAD、origin/master) をパス /workspace/repo に正常にクローンしました" }
  15. [build- and -push : git-source-repo-v2lhk] { "level" : "info" , "ts" :1623934601.7080255, "caller" : "git/git.go:207" , "msg" : "パス /workspace/repo のサブモジュールが正常に初期化され、更新されました" }
  16.  
  17. [build- and -push : build- and -push]既存の資格情報を使用して認証しています...
  18. [build- and -push : build- and -push] ログインに成功しました
  19. [ビルドプッシュ: ビルドプッシュ] 警告!パスワード暗号化されずに/root/.docker/config.json保存されます
  20. [build- and -push : build- and -push]この警告を削除するには、資格情報ヘルパーを構成します見る
  21. [ビルドプッシュ: ビルドプッシュ] https://docs.docker.com/engine/reference/commandline/login/#credentials-store
  22. [ビルドプッシュ: ビルドプッシュ]
  23. [build- and -push : build- and -push] ビルドコンテキストをDocker デーモン送信しています 154.1kB
  24. [ビルドプッシュ: ビルドプッシュ] ステップ 1/6: FROM golang:1.14-alpine
  25. ......
  26. [ビルドプッシュ: ビルドプッシュ] 2358e77bbe0e が正常にビルドされました
  27. [build- and -push : build- and -push] harbor.k8s のタグ付けに成功しました。ローカル/course/tekton-demo:v0.3.0-20210617-125634
  28. [build- and -push : build- and -push] プッシュはリポジトリ [harbor.k8s]参照しますローカル/course/tekton-demo]
  29. [ビルドプッシュ: ビルドプッシュ] f9a271a3fb3c: 準備中
  30. ......
  31. [ビルドプッシュ: ビルドプッシュ] 26ec43d351f2: プッシュされました
  32. [ビルドプッシュ: ビルドプッシュ] v0.3.0-20210617-125634: ダイジェスト: sha256:68be388e3f85dd10a6689a986eb2f7f7f5a5c89bb03f40c3db3178e0ce242752サイズ: 2198
  33.  
  34. [build- and -push: image-digest-exporter-t54fb] { "severity" : "INFO" "timestamp" : "2021-06-17T12:56:46.54052284Z" "caller" : "logging/config.go:116" "message" : "ロガーが正常に作成されました。" }
  35. [build- and -push: image-digest-exporter-t54fb] { "severity" : "INFO" "timestamp" : "2021-06-17T12:56:46.541010181Z" "caller" : "logging/config.go:117" "message" : "ログレベルが info に設定されました" }
  36. [build- and -push: image-digest-exporter-t54fb] { "severity" : "INFO" "timestamp" : "2021-06-17T12:56:46.541254959Z" "caller" : "imagedigestexporter/main.go:59" "message" : "builtImage の index.json が見つかりません" "commit" : "7ca5d61" }

get-build-id タスクでは、v0.3.0-20210617-125634 などのミラー タグが生成され、最終的に結果を通じて次のビルド タスクに渡され、ミラー タグも更新されていることがわかります。

テクトンカタログ

もちろん、これらのタスクは実際には非常に普遍的です。このため、Tekton はいくつかの一般的なタスクを提供するカタログ サービスを公式に提供しています。たとえば、Git Commit に関する関連情報を取得したい場合は、https://artifacthub.io/packages/tekton-task/tekton-catalog-tasks/git-clone にあるカタログを使用できます。この文書には関連する使用手順も記載されています。

これまで、Tekton を使用して CI/CD パイプラインを作成する簡単な例を完了しましたが、この例は比較的単純です。次に、少し複雑なアプリケーションを使用して、以前の Jenkins パイプラインを完成させます。

<<:  従来型からクラウドへ: エンタープライズ近代化の 3 つのフェーズ

>>:  3分でKafkaを完全に理解する

推薦する

不正なURLとリンクを偽装する集約ページ

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますSEO 最...

Namecheap - ドメイン名 5 年 $5.58、ホスティング初年度 $9.98、サーバー $58.98

今後、Namecheapではさまざまな商品を販売しており、その中には[1]ドメイン名、16種類のドメ...

ビデオ検索は必要ですか?

このクリップはどこから来たのですか?この問題は、掻くことのできない背中のかゆみのようなものです。ほと...

データ分析から始めてウェディングフォトサイトのコンバージョン率を向上させる

私は重慶のウェディング写真ウェブサイトの SEO を 3 か月間行っており、「コンテンツが王様」であ...

SEOクライアントはこれらの問題を心配する必要はありません

「どの業界にも独自の障壁がある」という古い格言はまさに真実です。最近、王世凡はSEO顧客からのいくつ...

serversub-$8.99/香港/Xen/G ポート/無制限/512M メモリ/20gSSD

serversub からメールを受け取りました。香港に新しいデータ センターが追加されました。数日前...

クラウド支出を管理するための6つのヒント

一般的に、クラウド コンピューティングは、IT インフラストラクチャ、運用、保守、人件費を削減するこ...

リンクベイティングを使って強力なトラフィックを獲得する方法

ウェブサイトを最適化するときに、誰もがこのような問題に遭遇すると思います。ウェブサイトをどのように最...

JiukuaiyouのデータはHao123の影響を示している

前回の記事では、Jiukuai MailがHao123に組み込まれるまでに半年かかりました。その時、...

継続的な進歩に向けて協力 - サンフォーと西安テレコムが共同でネットワークセキュリティ研究所を設立

1月8日、「共存、融合、共創」をテーマにした中国電信西安支社のDICTエコロジカルパートナー会議が成...

最適化は道の終わりではありません。リンク構築は困難な状況において新しいアイデアを持つべきです。

ウェブサイトの最適化はますます難しくなってきている、という共通の認識をほとんどの人が持っています。こ...

#おすすめ# raksmart: 499元、L5630*2、16Gメモリ、1T SSD、100M無制限、中国本土最適化帯域幅、Alipay

米国西海岸サンノゼのRaksmartデータセンターから、3月の独立サーバーのプロモーション情報が届き...

テンセント前海銀行が正式に承認

1年ほど前から噂されていたテンセントのプライベートバンクの準備がついに完了した。深セン金融事務所によ...

raksmart: 「香港\日本\米国 cn2」指定シリーズ VPS が 50% オフ、トラフィック無制限の全 VPS が 20% オフ

Raksmart は今月、大規模な VPS プロモーションを開催しています。1G メモリと無制限トラ...

企業のWeiboマーケティングはどれほど重要ですか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeibo はセルフメデ...