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を完全に理解する

推薦する

新しいウェブサイトはどのようにしてウェブサイトの重みを素早く改善し、Baidu の評価期間を通過できるのでしょうか?

ご存知のとおり、新しいウェブサイトがオンラインになった後、検索エンジンから与えられた重み付けと検索エ...

中国移動が最も価値のある中国ブランドに。デジタルドメイン名の時代が到来!

わが国は13億の人口を抱え、巨大な消費市場を形成している。世界最大の広告・コミュニケーショングループ...

ウェブマスターのソフト記事のアイデアの源泉についての簡単な説明(パート 2)

数日前、私は皆さんと「ウェブマスターのソフト記事のアイデアの源泉についての簡単な議論(パート 1)」...

SEOソフトの記事を書く前に、いくつかの質問について考えてみましょう

私の周りには、いつも惨めな友達がいます。彼らはリベートサイトを運営しているときによく略奪され、記事は...

メタバースは依然として人気があります。クラウド コンピューティングは何をもたらすのでしょうか?

現在、クラウド コンピューティングとメタバースは、新しいテクノロジーが経る推測の段階を超え、将来を左...

ウェブサイトの最適化とSEO効果分析におけるアンカーテキストの役割

アンカー テキスト (一般にアンカー テキスト リンクとも呼ばれます) もリンクの一種です。ハイパー...

hostus-年会費15ドル/2IP/512mメモリ/50gハードディスク/1Tトラフィック

今回リリースされたVPSの特徴は、IPアドレスが多く、構成は低くないが価格が非常に安いことです。ホス...

Baidu は SEO に干渉しているのでしょうか、それとも SEO 実践者がただ利益を得ているだけなのでしょうか?

2012 年 2 月 15 日は、すべての SEO にとって忘れられない日になるはずです。Baidu...

ブラック5の前に、サンノゼの伝説の肉屋「virmach」のVPSをテストしてみましょう

一昨日、virmach から、サンノゼ データ センターの 2G メモリの VPS を更新する必要が...

virpus xen 512M 年払い 30 ドル、1G 年払い 60 ドル

virpus、年末特別プロモーション、SolusVM コントロール パネルを使用、データ センターは...

「アプリクレーム」がモバイルアプリの健全性に波を起こす

現在、App CenterとTencent Mobile Managerは共同で、アプリケーションの...

「リベートサイト」の崩壊を受けて、北京市と他の5カ所は協力してねずみ講を取り締まることになった。

ここ半月ほど、「消費者還元」をマーケティング手段として宣伝していた国内の「キャッシュバックサイト」が...

HostSolutions: 月額 1.56 ドル、KVM/512M メモリ/1T ハードディスク/5T トラフィック、著作権侵害苦情、DDOS の高度な防御保護

ルーマニアのホスティングプロバイダー HostSolutions は、ハロウィーンの前に大規模なプロ...

Wupao.com が電子商取引について語る: 将来の電子商取引マーケティングへの道を開く 7 つの主要なトレンド

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

地方局は地域のホットなニュースを掘り起こし、宣伝してニュースのポイントや価値ポイントを見つけるべきだ

1. 地方局とメディアの接触のタイミングを把握する必要がある。メディアと関わるときにはタイミングをう...