|
[[436836]] Tektonは、強力かつ柔軟なオープンソースのクラウドネイティブCI/CDフレームワークです。フル機能かつ標準化されたクラウドネイティブCI/CDソリューションの提供を目指しています。[この記事では主に、TektonイメージをTencent Cloudリポジトリに同期し、Tektonをデプロイする自動化されたパイプラインプロセスについて説明します。] アプリケーションイメージAlibaba Cloud のイメージリポジトリには制限があります... 今回は Tencent Cloud のイメージリポジトリに切り替えました: ccr.ccs.tencentyun.com/tektons/dashboard パイプラインGitHub Actions の使用: - イメージを同期し、イメージ マッピング ファイル (JSON) を生成します。
- イメージ マッピング ファイルをアーティファクトとして収集します。
- これはアクションを使い始めるのに役立つ基本的なワークフローです
-
- 名前: Tekton Images を取得
- 環境:
- バージョン: v0.29.0
-
- の上:
- 押す:
- パス:
- - '.github/workflows/tekton.yaml'
- - 'テクトン/**'
-
- 仕事:
- 建てる:
- 動作環境: ubuntu-18.04
- 手順:
- - 使用: actions/checkout@v2
- -名前: ビルド
- 実行: |
-
- curl https://storage.googleapis.com/tekton-releases/pipeline/previous/${{ env.VERSION }}/release.yaml -o release.yaml
- grep -v "#" release.yaml | grep -v "^$" > release1.yaml ; sed -i 's/\-\-\-/###/g' release1.yaml
- python3 tekton/get_tekton_images.py ${{ secrets.DOCKER_USER}} ${{ secrets.DOCKER_PASSWD}}
- - 使用: actions/upload-artifact@v2
- と:
- 名前: ${{ env.VERSION }}-tekton-images
- パス: tekton_images.json
デプロイメントファイルの解析1. リリース デプロイメント YAML をダウンロードします。 2. Deployments オブジェクト内のイメージを解析します。 a.tekton パイプライン コントローラー b.tekton-パイプライン-webhook c.tekton-dashboard (最新のタグ) - gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller:v0.29.0@sha256:72f79471f06d096cc53e51385017c9f0f7edbc87379bf415f99d4bd11cf7bc2b
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/kubeconfigwriter:v0.29.0@sha256:6d058f2203b9ab66f538cb586c7dc3b7cc31ae958a4135dd99e51799f24b06c9
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.29.0@sha256:c0b0ed1cd81090ce8eecf60b936e9345089d9dfdb6ebdd2fd7b4a0341ef4f2b9
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint:v0.29.0@sha256:66958b78766741c25e31954f47bc9fd53eaa28263506b262bf2cc6df04f18561
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/nop:v0.29.0@sha256:6a037d5ba27d9c6be32a9038bfe676fb67d2e4145b4f53e9c61fb3e69f06e816
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/imagedigestexporter:v0.29.0@sha256:e38dd0d32253fce5aaf1e501c0bc71facc3720564b7e97055921cc5390d612e0
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/pullrequest-init:v0.29.0@sha256:d28202fb8b33a1d4c05f261ef8dcbcdcf3b469887d4dad256ce91f73c917420e
- gcr.io/google.com/cloudsdktool/cloud-sdk@sha256:27b2c22bf259d9bc1a291e99c63791ba0c27a04d2db0a43241ba0f1f20f4067f
- gcr.io/distroless/base@sha256:aa4fd987555ea10e1a4ec8765da8158b5ffdfef1e72da512c7ede509bc9966c4
- mcr.microsoft.com/powershell:nanoserver@sha256:b6d5ff841b78bdf2dfed7550000fd4f3437385b8fa686ec0f010be24777654d6
- gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/webhook:v0.29.0@sha256:46d5b90a7f4e9996351ad893a26bcbd27216676ad4d5316088ce351fb2c2c3dd
Python でデータ解析スクリプトを作成します。 - yamlをインポートする
- JSONをインポート
- インポートシステム
- インポートOS
-
- クラス Tekton:
- def __init__(self, ファイル名, レジストリユーザー, レジストリパスワード):
- self.yaml_file = ファイル名
- self.arg_imgs = [ "gcr.io/tekton-releases/github.com/tektoncd/dashboard/cmd/dashboard@sha256:95f71a2568ced67ec370b5360f88bec3280601908cac9e62dfbb801114480437" ]
- self.split_str = "###"
- self.deployments = [ "tekton-pipelines-controller" , "tekton-pipelines-webhook" ]
- self.kind_type = "デプロイメント"
- self.target_registry = "ccr.ccs.tencentyun.com/tektons/"
- self.repos = [ "コントローラ" , "kubeconfigwriter" , "git-init" ,
- 「エントリポイント」 、 「nop」 、 「imagedigestexporter」 、
- 「pullrequest-init」 、 「cloud-sdk」 、 「base」 、 「powershell」 、 「webhook」 ]
- 自己.結果 = []
- self.registry_user = レジストリユーザー
- self.registry_passwd = レジストリパスワード
-
- def load_yaml(self, data):
- コンテンツ = yaml.load (データ)
- コンテンツを返す
-
- def load_json(self, データ):
- コンテンツ = json.loads(データ)
- コンテンツを返す
-
- get_images(self)を定義します。
- f =オープン(self.yaml_file、 'r' ) .read ()
- i をf.split( "###" )[:-1]で分割します:
- 試す:
- コンテンツ = self.load_yaml( i.replace ( "###" , "" ))
- content[ "kind" ] == self.kind_typeの場合:
- deploy_name = コンテンツ[ "メタデータ" ][ "名前" ]
- # 画像を取得
- self.deploymentsにdeploy_name がある場合:
- img = コンテンツ[ "仕様" ][ "テンプレート" ][ "仕様" ][ "コンテナ" ][0][ "画像" ]
- self.arg_imgs.append(画像)
- # パラメータから画像を取得する
- deploy_name == "tekton-pipelines-controller"の場合:
- arg_img = コンテンツ[ "仕様" ][ "テンプレート" ][ "仕様" ][ "コンテナ" ][0][ "引数" ]
- arg_img内のaの場合:
- a.startswith( "-" )でない場合:
- self.arg_imgs.append(a)
- except Exceptionをeとして:
- 印刷(e)
- self.arg_imgsを返す
-
- def save_json_file(self, データ, ファイル名):
- self.arg_imgs内のiについて:
- 自己.結果.追加({
- "s_image" : i,
- "t_image" : self.target_registry + i.split( "/" )[-1].split( "@" )[0]
- })
- 新しいデータ = json.dumps(self.result, インデント=4)
- a= open (ファイル名, 'w' )
- a.write(新しいデータ)
- a.閉じる()
-
- 定義 sync_images(self):
- f =オープン( "tekton_images.json" , 'r' )。読む()
- コンテンツ = self.load_json(f)
- docker_login_cmd = "docker login -u {0} -p {1} {2}" .format(
- self.registry_user、
- self.registry_passwd、
- self.target_registry.split( "/" )[0])
- os.system(docker_login_cmd)
- コンテンツ内のアイテムの場合:
- print( "[GetImages] {}" .format(item))
- docker_pull_cmd = "docker pull {0}" .format(item[ "s_image" ])
- docker_tag_cmd = "docker タグ {0} {1}" .format(item[ "s_image" ], item[ "t_image" ])
- docker_push_cmd = "docker push {0}" .format(item[ "t_image" ])
- os.system(docker_pull_cmd + "&&" + docker_tag_cmd + "&&" + docker_push_cmd)
- print( "[GetImagesDone] {}" .format(item))
-
- __name__ == '__main__'の場合:
- tekton = Tekton( "release1.yaml" , sys.argv[1], sys.argv[2])
- 画像 = tekton.get_images()
- tekton.save_json_file(画像, "tekton_images.json" )
- テクトン.sync_images()
ミラーマッピングファイル s_image は元のイメージ名、t_image はターゲットイメージ名です。ここでは、Tencent Cloud のイメージリポジトリが使用されます。 - [
- {
- "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller:v0.29.0@sha256:72f79471f06d096cc53e51385017c9f0f7edbc87379bf415f99d4bd11cf7bc2b" 、
- 「t_image」 : 「ccr.ccs.tencentyun.com/tektons/controller:v0.29.0」
- },
- {
- "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/kubeconfigwriter:v0.29.0@sha256:6d058f2203b9ab66f538cb586c7dc3b7cc31ae958a4135dd99e51799f24b06c9" 、
- 「t_image」 : 「ccr.ccs.tencentyun.com/tektons/kubeconfigwriter:v0.29.0」
- },
- {
- "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.29.0@sha256:c0b0ed1cd81090ce8eecf60b936e9345089d9dfdb6ebdd2fd7b4a0341ef4f2b9" 、
- "t_image" : "ccr.ccs.tencentyun.com/tektons/git-init:v0.29.0"
- },
- {
- "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint:v0.29.0@sha256:66958b78766741c25e31954f47bc9fd53eaa28263506b262bf2cc6df04f18561" 、
- 「t_image」 : 「ccr.ccs.tencentyun.com/tektons/entrypoint:v0.29.0」
- },
- {
- "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/nop:v0.29.0@sha256:6a037d5ba27d9c6be32a9038bfe676fb67d2e4145b4f53e9c61fb3e69f06e816" 、
- 「t_image」 : 「ccr.ccs.tencentyun.com/tektons/nop:v0.29.0」
- },
- {
- "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/imagedigestexporter:v0.29.0@sha256:e38dd0d32253fce5aaf1e501c0bc71facc3720564b7e97055921cc5390d612e0" 、
- 「t_image」 : 「ccr.ccs.tencentyun.com/tektons/imagedigestexporter:v0.29.0」
- },
- {
- "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/pullrequest-init:v0.29.0@sha256:d28202fb8b33a1d4c05f261ef8dcbcdcf3b469887d4dad256ce91f73c917420e" 、
- 「t_image」 : 「ccr.ccs.tencentyun.com/tektons/pullrequest-init:v0.29.0」
- },
- {
- 「s_image」 : 「gcr.io/google.com/cloudsdktool/cloud-sdk@sha256:27b2c22bf259d9bc1a291e99c63791ba0c27a04d2db0a43241ba0f1f20f4067f」 、
- 「t_image」 : 「ccr.ccs.tencentyun.com/tektons/cloud-sdk」
- },
- {
- "s_image" : "gcr.io/distroless/base@sha256:aa4fd987555ea10e1a4ec8765da8158b5ffdfef1e72da512c7ede509bc9966c4" 、
- 「t_image」 : 「ccr.ccs.tencentyun.com/tektons/base」
- },
- {
- "s_image" : "mcr.microsoft.com/powershell:nanoserver@sha256:b6d5ff841b78bdf2dfed7550000fd4f3437385b8fa686ec0f010be24777654d6" ,
- 「t_image」 : 「ccr.ccs.tencentyun.com/tektons/powershell:nanoserver」
- },
- {
- "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/webhook:v0.29.0@sha256:46d5b90a7f4e9996351ad893a26bcbd27216676ad4d5316088ce351fb2c2c3dd" 、
- 「t_image」 : 「ccr.ccs.tencentyun.com/tektons/webhook:v0.29.0」
- },
- {
- "s_image" : "gcr.io/tekton-releases/github.com/tektoncd/dashboard/cmd/dashboard@sha256:95f71a2568ced67ec370b5360f88bec3280601908cac9e62dfbb801114480437" 、
- 「t_image」 : 「ccr.ccs.tencentyun.com/tektons/dashboard」
-
- }
- ]
ミラー マッピング ファイルは、GitHub Actions ページからダウンロードできます。 画像スクリプトをダウンロード上記で生成されたイメージ ファイルを解析し、`docker pull` を使用して対応するイメージをローカル マシンにダウンロードします。 - JSONをインポート
- インポートOS
-
- クラス Tekton:
- def __init__(self):
- self.json_file = "tekton_images.json"
- self.target_registry = "ccr.ccs.tencentyun.com/tektons/"
- # self.registry_user = レジストリユーザー
- # self.registry_passwd = レジストリパスワード
-
- def load_json(self, データ):
- コンテンツ = json.loads(データ)
- コンテンツを返す
-
- def down_images(self):
- f = open (self.json_file, 'r' ) .read ()
- コンテンツ = self.load_json(f)
-
- # docker_login_cmd = "docker login -u {0} -p {1} {2}" .format(
- # self.registry_user,
- # self.registry_passwd,
- # self.target_registry.split( "/" )[0])
- コンテンツ内のアイテムの場合:
- print( "[GetImages] {}" .format(item[ "t_image" ]))
- docker_pull_cmd = "docker pull {0}" .format(item[ "t_image" ])
- # docker_tag_cmd = "docker タグ {0} {1}" .format(item[ "t_image" ], item[ "s_image" ].split( "@" )[0])
- os.system(docker_pull_cmd + "&&" + docker_tag_cmd)
- print( "[GetImagesDone] {}" .format(item))
-
- __name__ == '__main__'の場合:
- t = テクトン().down_images()
Tektonを展開するデプロイメント ファイル内のイメージを置き換えます。 - release.yaml 内のイメージを手動で更新し、 kubectl apply release.yaml を使用してデプロイします (後でスクリプトを最適化して、release.yaml を自動的に更新します)。
- tekton-dashboard-release.yaml 内のイメージを手動で更新し、デプロイします。
- [root@master ~]# kubectl -n tekton-pipelines ポッドを取得する
- 名前準備完了 ステータス 再起動 年齢
- tekton-dashboard-5c4b89d9-2z8g7 1/1 ランニング 0 21m
- tekton-pipelines-controller-b96f647bb-gff69 1/1 実行中 0 13時間
- tekton-pipelines-webhook-76bc9c97b9-cd2m4 1/1 実行中 0 13時間
Tekton ダッシュボードを公開するための Ingress を作成します。 - apiバージョン: extensions/v1beta1
- 種類: イングレス
- メタデータ:
- 名前: tekton-service
- 名前空間: tekton-pipelines
- 注釈:
- kubernetes.io/ingress.class: nginx
- nginx.ingress.kubernetes.io/proxy-body-サイズ: 256m
- 仕様:
- ルール:
- - ホスト: tekton.idevops.site
- http:
- パス:
- - パス: /
- バックエンド:
- サービス名: tekton-ダッシュボード
- サービスポート: 9097
UI ページにアクセスします。 パイプラインの作成- apiバージョン: tekton.dev/v1beta1
- 種類: タスク
- メタデータ:
- 名前: tektoncd-task
- 仕様:
- リソース:
- 入力:
- -名前: リポジトリ
- タイプ: git
- 手順:
- -名前: 実行テスト
- イメージ: maven:3-jdk-8
- 作業ディレクトリ: /workspace/repo
- コマンド: [ "mvn" ]
- 引数: [ "クリーン" , "パッケージ" ]
-
- apiバージョン: tekton.dev/v1alpha1
- 種類: パイプラインリソース
- メタデータ:
- 名前: tektoncd-resource
- 仕様:
- タイプ: git
- パラメータ:
- -名前: URL
- 値: http://192.168.1.200/devops/devops-maven-service.git
- -名前: リビジョン
- 値: マスター
-
- apiバージョン: tekton.dev/v1beta1
- 種類: タスク実行
- メタデータ:
- 名前: cdpipeline
- 仕様:
- タスク参照:
- 名前: tektoncd-task
- リソース:
- 入力:
- -名前: リポジトリ
- リソース参照:
- 名前: tektoncd-resource
|