クラウドネイティブ CI/CD フレームワーク Tekton を中国で導入する方法

クラウドネイティブ CI/CD フレームワーク Tekton を中国で導入する方法

[[436836]]

Tekton は、非常に強力で柔軟な CI/CD オープンソース クラウド ネイティブ フレームワークです。フル機能の標準化されたクラウドネイティブ CI/CD ソリューションの提供に取り組んでいます。 [この記事では主にパイプライン自動化を使用して、TektonイメージをTencent Cloudウェアハウスに同期し、Tektonをデプロイします]

アプリケーションイメージ

Alibaba Cloud Image Repository には制限があります... 今回は Tencent Cloud Image Repository に切り替えました。 ccr.ccs.tencentyun.com/tektons/dashboard

パイプライン

GitHub Actions を使用する場合:

  1. イメージを同期し、イメージ マッピング ファイル (json) を生成します。
  2. イメージ マッピング ファイルをアーティファクトとして収集します。
  1. これはアクションを使い始めるのに役立つ基本的なワークフローです
  2.  
  3. 名前: Tekton Images を取得
  4. 環境:
  5. バージョン: v0.29.0
  6.  
  7. の上
  8. 押す:
  9. パス:
  10. - '.github/workflows/tekton.yaml'  
  11. - 'テクトン/**'  
  12.  
  13. 仕事:
  14. 建てる:
  15. 動作環境: ubuntu-18.04
  16. 手順:
  17. - 使用: actions/checkout@v2
  18. -名前:ビルド
  19. 実行: |
  20.        
  21. curl https://storage.googleapis.com/tekton-releases/pipeline/previous/${{ env.VERSION }}/release.yaml -o release.yaml
  22. grep -v "#" release.yaml | grep -v "^$" > release1.yaml ; sed -i 's/\-\-\-/###/g'リリース1.yaml
  23. python3 tekton/get_tekton_images.py ${{ secrets.DOCKER_USER}} ${{ secrets.DOCKER_PASSWD}}
  24. - 使用: actions/upload-artifact@v2
  25. 名前: ${{ env.VERSION }}-tekton-images
  26. パス: tekton_images.json

デプロイメントファイルの解析

1. リリース デプロイメント yaml をダウンロードします。

2. Deployments オブジェクト内のイメージを解析します。

a.tekton パイプライン コントローラー

b.tekton-パイプライン-webhook

c.tekton-dashboard (最新のタグ)

  1. gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller:v0.29.0@sha256:72f79471f06d096cc53e51385017c9f0f7edbc87379bf415f99d4bd11cf7bc2b
  2. gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/kubeconfigwriter:v0.29.0@sha256:6d058f2203b9ab66f538cb586c7dc3b7cc31ae958a4135dd99e51799f24b06c9
  3. gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.29.0@sha256:c0b0ed1cd81090ce8eecf60b936e9345089d9dfdb6ebdd2fd7b4a0341ef4f2b9
  4. gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint:v0.29.0@sha256:66958b78766741c25e31954f47bc9fd53eaa28263506b262bf2cc6df04f18561
  5. gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/nop:v0.29.0@sha256:6a037d5ba27d9c6be32a9038bfe676fb67d2e4145b4f53e9c61fb3e69f06e816
  6. gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/imagedigestexporter:v0.29.0@sha256:e38dd0d32253fce5aaf1e501c0bc71facc3720564b7e97055921cc5390d612e0
  7. gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/pullrequest-init:v0.29.0@sha256:d28202fb8b33a1d4c05f261ef8dcbcdcf3b469887d4dad256ce91f73c917420e
  8. gcr.io/google.com/cloudsdktool/cloud-sdk@sha256:27b2c22bf259d9bc1a291e99c63791ba0c27a04d2db0a43241ba0f1f20f4067f
  9. gcr.io/distroless/base@sha256:aa4fd987555ea10e1a4ec8765da8158b5ffdfef1e72da512c7ede509bc9966c4
  10. mcr.microsoft.com/powershell:nanoserver@sha256:b6d5ff841b78bdf2dfed7550000fd4f3437385b8fa686ec0f010be24777654d6
  11. gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/webhook:v0.29.0@sha256:46d5b90a7f4e9996351ad893a26bcbd27216676ad4d5316088ce351fb2c2c3dd

Python でデータ解析スクリプトを作成します。

  1. yamlをインポートする
  2. jsonをインポート
  3. インポートシステム
  4. インポートOS
  5.  
  6. クラス Tekton :
  7. def __init__(自己、ファイル名、レジストリユーザー、レジストリパスワード):
  8. self.yaml_file = ファイル名
  9. self.arg_imgs = [ "gcr.io/tekton-releases/github.com/tektoncd/dashboard/cmd/dashboard@sha256:95f71a2568ced67ec370b5360f88bec3280601908cac9e62dfbb801114480437" ]
  10. 自己.split_str = "###"  
  11. self.deployments = [ "tekton-pipelines-controller" "tekton-pipelines-webhook" ]
  12. self.kind_type = "デプロイメント"  
  13. self.target_registry = "ccr.ccs.tencentyun.com/tektons/"  
  14. self.repos = [ "コントローラ" "kubeconfigwriter" "git-init"
  15. 「エントリポイント」 「nop」 「イメージダイジェストエクスポーター」
  16. ["pullrequest-init" "cloud-sdk" "base" "powershell" "webhook" ]
  17. 自己.結果 = []
  18. self.registry_user = レジストリユーザー
  19. self.registry_passwd = レジストリパスワード
  20.  
  21. def load_yaml(自分自身、データ):
  22. コンテンツ = yaml.load (データ)
  23. コンテンツを返す
  24.  
  25. def load_json(自分自身、データ):
  26. コンテンツ = json.loads(データ)
  27. コンテンツを返す
  28.  
  29. get_images(self)を定義します。
  30. f =オープン(self.yaml_file、 'r' ) .read ()
  31. if.split( "###" )[:-1]場合:
  32. 試す:
  33. コンテンツ = self.load_yaml( i.replace ( "###" , "" ))
  34. content[ "kind" ] == self.kind_typeの場合:
  35. deploy_name = コンテンツ[ "メタデータ" ][ "名前" ]
  36. # 画像を取得
  37. self.deploymentsdeploy_name がある場合:
  38. img = content[ "仕様" ][ "テンプレート" ][ "仕様" ][ "コンテナ" ][0][ "画像" ]
  39. self.arg_imgs.append(画像)
  40. # パラメータ内の画像を取得する
  41. deploy_name == "tekton-pipelines-controller"の場合:
  42. arg_img = コンテンツ[ "仕様" ][ "テンプレート" ][ "仕様" ][ "コンテナ" ][0][ "引数" ]
  43. arg_img内のaの場合:
  44. a.startswith( "-" )でない場合:
  45. 自己.arg_imgs.append(a)
  46. except例外をeとして:
  47. 印刷する
  48. self.arg_imgsを返す
  49.  
  50. def save_json_file(自分自身、データ、ファイル名):
  51. self.arg_imgs内のiの場合:
  52. 自己.結果.追加({
  53. "s_image" : 私,
  54. "t_image" : self.target_registry + i.split( "/" )[-1].split( "@" )[0]
  55. })
  56. 新しいデータ = json.dumps(self.result、インデント=4)
  57. a = open ( ファイル名 , 'w' )
  58. a.write(新しいデータ)
  59. a.近い()
  60.  
  61. 定義:
  62. f =オープン( "tekton_images.json" , 'r' )。読む()
  63. コンテンツ = self.load_json(f)
  64. docker_login_cmd = "dockerログイン-u {0} -p {1} {2}" .format(
  65. 自己.registry_user、
  66. 自己.registry_passwd、
  67. self.target_registry.split( "/" )[0])
  68. os.system(docker_login_cmd)
  69. コンテンツ内の項目:
  70. print( "[GetImages] {}" .format(item))
  71. docker_pull_cmd = "docker pull {0}" .format(item[ "s_image" ])
  72. docker_tag_cmd = "docker タグ {0} {1}" .format(item[ "s_image" ], item[ "t_image" ])
  73. docker_push_cmd = "docker push {0}" .format(item[ "t_image" ])
  74. os.system(docker_pull_cmd + "&&" + docker_tag_cmd + "&&" + docker_push_cmd)
  75. print( "[GetImagesDone] {}" .format(item))
  76.          
  77. __name__ == '__main__'の場合:
  78. tekton = Tekton( "release1.yaml" , sys.argv[1], sys.argv[2])
  79. 画像 = tekton.get_images()
  80. tekton.save_json_file(画像, "tekton_images.json" )
  81. tekton.sync_images()

イメージマッピングファイル

s_image は元のイメージ名、t_image はターゲットイメージ名です。ここでは Tencent Cloud のイメージリポジトリを使用します。

  1. [
  2. {
  3. "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller:v0.29.0@sha256:72f79471f06d096cc53e51385017c9f0f7edbc87379bf415f99d4bd11cf7bc2b"
  4. "t_image" : "ccr.ccs.tencentyun.com/tektons/controller:v0.29.0"  
  5. },
  6. {
  7. "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/kubeconfigwriter:v0.29.0@sha256:6d058f2203b9ab66f538cb586c7dc3b7cc31ae958a4135dd99e51799f24b06c9"
  8. "t_image" : "ccr.ccs.tencentyun.com/tektons/kubeconfigwriter:v0.29.0"  
  9. },
  10. {
  11. "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.29.0@sha256:c0b0ed1cd81090ce8eecf60b936e9345089d9dfdb6ebdd2fd7b4a0341ef4f2b9"
  12. "t_image" : "ccr.ccs.tencentyun.com/tektons/git-init:v0.29.0"  
  13. },
  14. {
  15. "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint:v0.29.0@sha256:66958b78766741c25e31954f47bc9fd53eaa28263506b262bf2cc6df04f18561"
  16. "t_image" : "ccr.ccs.tencentyun.com/tektons/entrypoint:v0.29.0"  
  17. },
  18. {
  19. "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/nop:v0.29.0@sha256:6a037d5ba27d9c6be32a9038bfe676fb67d2e4145b4f53e9c61fb3e69f06e816"
  20. "t_image" : "ccr.ccs.tencentyun.com/tektons/nop:v0.29.0"  
  21. },
  22. {
  23. "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/imagedigestexporter:v0.29.0@sha256:e38dd0d32253fce5aaf1e501c0bc71facc3720564b7e97055921cc5390d612e0"
  24. "t_image" : "ccr.ccs.tencentyun.com/tektons/imagedigestexporter:v0.29.0"  
  25. },
  26. {
  27. "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/pullrequest-init:v0.29.0@sha256:d28202fb8b33a1d4c05f261ef8dcbcdcf3b469887d4dad256ce91f73c917420e"
  28. "t_image" : "ccr.ccs.tencentyun.com/tektons/pullrequest-init:v0.29.0"  
  29. },
  30. {
  31. "s_image" : "gcr.io/google.com/cloudsdktool/cloud-sdk@sha256:27b2c22bf259d9bc1a291e99c63791ba0c27a04d2db0a43241ba0f1f20f4067f"
  32. 「t_image」 : 「ccr.ccs.tencentyun.com/tektons/cloud-sdk」  
  33. },
  34. {
  35. "s_image" : "gcr.io/distroless/base@sha256:aa4fd987555ea10e1a4ec8765da8158b5ffdfef1e72da512c7ede509bc9966c4"
  36. "t_image" : "ccr.ccs.tencentyun.com/tektons/base"  
  37. },
  38. {
  39. "s_image" : "mcr.microsoft.com/powershell:nanoserver@sha256:b6d5ff841b78bdf2dfed7550000fd4f3437385b8fa686ec0f010be24777654d6"
  40. "t_image" : "ccr.ccs.tencentyun.com/tektons/powershell:nanoserver"  
  41. },
  42. {
  43. "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/webhook:v0.29.0@sha256:46d5b90a7f4e9996351ad893a26bcbd27216676ad4d5316088ce351fb2c2c3dd"
  44. "t_image" : "ccr.ccs.tencentyun.com/tektons/webhook:v0.29.0"  
  45. },
  46. {
  47. "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/dashboard/cmd/dashboard@sha256:95f71a2568ced67ec370b5360f88bec3280601908cac9e62dfbb801114480437"
  48. 「t_image」 : 「ccr.ccs.tencentyun.com/tektons/dashboard」  
  49.      
  50. }
  51. ]

イメージ マッピング ファイルは、GitHubActions ページからダウンロードできます。

ミラースクリプトをダウンロード

上記で生成されたイメージ ファイルを解析し、docker pull は対応するイメージをローカル コンピューターにダウンロードします。

  1. jsonをインポート
  2. インポートOS
  3.  
  4. クラス Tekton:
  5. __init__(self)を定義します。
  6. self.json_file = "tekton_images.json"  
  7. self.target_registry = "ccr.ccs.tencentyun.com/tektons/"  
  8. # self.registry_user = レジストリユーザー
  9. # self.registry_passwd = レジストリパスワード
  10.  
  11. def load_json(自分自身、データ):
  12. コンテンツ = json.loads(データ)
  13. コンテンツを返す
  14.  
  15. def down_images(self):
  16. f =オープン(self.json_file、 'r' ) .read ()
  17. コンテンツ = self.load_json(f)
  18.  
  19. # docker_login_cmd = "dockerログイン-u {0} -p {1} {2}" .format(
  20. # 自己.registry_user、
  21. # 自己.registry_passwd、
  22. # self.target_registry.split( "/" )[0])
  23. コンテンツ内の項目:
  24. print( "[GetImages] {}" .format(item[ "t_image" ]))
  25. docker_pull_cmd = "docker pull {0}" .format(item[ "t_image" ])
  26. # docker_tag_cmd = "docker タグ {0} {1}" .format(item[ "t_image" ], item[ "s_image" ].split( "@" )[0])
  27. os.system(docker_pull_cmd + "&&" + docker_tag_cmd) を実行します。
  28. print( "[GetImagesDone] {}" .format(item))
  29.  
  30. __name__ == '__main__'の場合:
  31. t = テクトン().down_images()

Tektonを展開する

デプロイメント ファイル内のイメージを置き換えます。

  1. release.yaml 内のイメージを手動で更新します。次に、kubectl apply release.yaml でデプロイします (後でスクリプトを最適化して、release.yaml を自動的に更新します)
  2. tekton-dashboard-release.yaml 内のイメージを手動で更新します。次に展開します。
  1. [root@master ~]# kubectl -n tekton-pipelines ポッドを取得します
  2. 名前準備完了 ステータス 再起動 年齢
  3. tekton-dashboard-5c4b89d9-2z8g7 1/1 ランニング 0 21m
  4. tekton-pipelines-controller-b96f647bb-gff69 1/1 実行中 0 13h
  5. tekton-pipelines-webhook-76bc9c97b9-cd2m4 1/1 実行中 0 13h

Tekton ダッシュボードを公開するための Ingress を作成します。

  1. apiバージョン: extensions/v1beta1
  2. 種類: イングレス
  3. メタデータ:
  4. 名前: tekton-service
  5. 名前空間: tekton-pipelines
  6. 注釈:
  7. kubernetes.io/ingress.class: nginx
  8. nginx.ingress.kubernetes.io/proxy-body-サイズ: 256m
  9. 仕様:
  10. ルール:
  11. - ホスト: tekton.idevops.site
  12. http:
  13. パス:
  14. - パス:​​ /
  15. バックエンド:
  16. サービス名: tekton-dashboard
  17. サービスポート: 9097

UI ページにアクセスします。

パイプラインの記述

  1. apiバージョン: tekton.dev/v1beta1
  2. 種類: タスク
  3. メタデータ:
  4. 名前: tektoncd-task
  5. 仕様:
  6. リソース:
  7. 入力:
  8. -名前: リポジトリ
  9. タイプ: git
  10. 手順:
  11. -名前: 実行テスト
  12. イメージ: maven:3-jdk-8
  13. 作業ディレクトリ: /workspace/repo
  14. コマンド: [ "mvn" ]
  15. 引数: [ "クリーン" "パッケージ" ]
  16. ---  
  17. apiバージョン: tekton.dev/v1alpha1
  18. 種類: パイプラインリソース
  19. メタデータ:
  20. 名前: tektoncd-resource
  21. 仕様:
  22. タイプ: git
  23. パラメータ:
  24. -名前: URL
  25. 値: http://192.168.1.200/devops/devops-maven-service.git
  26. -名前: リビジョン
  27. 値: マスター
  28. ---  
  29. apiバージョン: tekton.dev/v1beta1
  30. 種類: タスク実行
  31. メタデータ:
  32. 名前: cdpipeline
  33. 仕様:
  34. タスク参照:
  35. 名前: tektoncd-task
  36. リソース:
  37. 入力:
  38. -名前: リポジトリ
  39. リソース参照:
  40. 名前: tektoncd-resource

<<:  Linuxシステムの仮想化モデルと障害

>>:  Akamai: エッジコンピューティングのイノベーションに注力し、業界のデジタル変革をリード

推薦する

Oracle Cloudは顧客にエンドツーエンドのデータセキュリティを提供します

オラクルは本日、インフラストラクチャ コアからクラウド エッジまで完全なデータ保護を顧客に提供する新...

コミュニティサービスO2Oゴールドラッシュ? それはそんなに単純ではありません!

コミュニティサービスO2Oは、インターネットの「仮想から実用への転換」におけるもう一つの大きな前進で...

タオバオ無料ブログマーケティング

誰もが Taobao Affiliate をよく知っています。Taobao Affiliate とは...

APPプロモーションノート:100日間の無料/有料チャンネルプロモーションの概要

実際にやってみるまで、APPを宣伝するさまざまな方法について聞いていました。お金をかけずにチャンネル...

モバイル決済が活発化:Google が検索部門の従業員を Google Wallet にリダイレクト

Google ウォレット新浪科技報、北京時間10月9日朝のニュース、米国のテクノロジーブログBusi...

Dockerはビッグデータを活用することで強力なソフトウェア開発プラットフォームになることができる

ビッグデータは今日、世界を大きく変えています。ビッグデータが最も大きな影響を与える分野の 1 つはソ...

コーヒーショップに偽装したスタートアップインキュベーター:大物株主多数

3W Cafeではインターネットサロンを開催し、KPCBの投資マネージャーらが同社の事業紹介を行った...

ちょっと立ち止まって美しい女の子を送ってください

そのウェブサイトは午後中ずっと CC に攻撃され、ちょっと不愉快でした。「狂犬に噛まれたら、狂犬も噛...

アマゾン ウェブ サービスと PwC が中国での戦略的提携強化を発表

2021年10月18日、先日開催されたアマゾン ウェブ サービス チャイナ サミットにおいて、PwC...

ユーザーの検索習慣とBaiduの単語分割の相関関係を分析する

2012 年の検索マーケティングは、前年と比べて根本的な変化を遂げました。検索分野で最も多く言及され...

1 時間以内に Baidu と Google に新しいサイトをインデックスさせる方法

最適化したいのは「paike.com」と「dianzhang.com」という2つのキーワードなので、...

Baidu スナップショットが HTTP 304 ステータス コードで更新されない

少し前に、百度は百度スナップショットについての説明を公式に発表し、百度スナップショットの更新と後退の...

TICのブロックチェーン技術、UCloudがブロックチェーンセキュリティアプリケーションの実装をリード

2018年5月15日、「中立で信頼できる、夢想家に力を与える」をテーマにしたThink in Clo...