クラウドネイティブ 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: エッジコンピューティングのイノベーションに注力し、業界のデジタル変革をリード

推薦する

エッジコンピューティングとエッジクラウド連携については、この記事をお読みください。

モノのインターネットなどの技術の継続的な発展とデータの継続的な増加により、クラウドベースのモノのイン...

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

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

なぜ電子商取引企業は Taobao ブランドを作成する必要があるのでしょうか?

関連統計によると、現在、タオバオには600万以上の店舗があり、経営不振により毎日1万店舗が閉店してい...

電子商取引の1年を振り返ると、大手電子商取引企業がプラットフォーム競争を巻き起こした。

多くのビジネス形態の中でも、電子商取引は最も多くの出来事と最も大きな変化を伴うビジネス分野となってい...

新世代の「TopSec 産業用制御ファイアウォールシステム」がリリースされました

近年、産業インターネットの急速な発展に伴い、ビッグデータ、クラウドコンピューティング、ブロックチェー...

Google SEO 用のコンテンツ素材や記事のアイデアはどこで入手しますか? (パート2)

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス前回の号では、杭州鋒蘭が...

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

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

アリババクラウド、データ書き込み効率を100倍向上させるTSDBをリリース

IoT のシナリオでは、大量の時系列データ (時系列データと呼ばれる) が毎瞬生成されます。このデー...

百度百科事典から学ぶSEO

私が初めて SEO を学び始めたとき、SEO の専門家から、ウェブサイトについて何もわからない場合は...

Google のアップデートは何を意味するのでしょうか?

2012年2月7日、Googleは再びPRを更新しました。今回の更新はマイナーアップデートかもしれま...

ウェブマスターデイリーレポート:グループ購入業界のバブルは崩壊し続け、Ctripは価格戦争の包囲に直面している

1. 電子商取引企業は省エネ補助金の受給に障壁に直面:1億元の売上金を前払いする必要がある「オンライ...

Kaiying Network の Wang Yue: 草の根ウェブマスターのゲーム帝国

文/劉 燕 写真/袁建民ゲーム業界には、毎年開発される何千ものゲームのうち、収益を生み出すことができ...

中国モバイルインターネット秋季レポート

2018年9月現在、中国のモバイルインターネットの月間アクティブユーザー数は11億6,700万人に達...