[[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 を使用する場合: - イメージを同期し、イメージ マッピング ファイル (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'リリース1.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.yaml_file = ファイル名
- self.arg_imgs = [ "gcr.io/tekton-releases/github.com/tektoncd/dashboard/cmd/dashboard@sha256:95f71a2568ced67ec370b5360f88bec3280601908cac9e62dfbb801114480437" ]
- 自己.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」 、 「イメージダイジェストエクスポーター」 、
- ["pullrequest-init" 、 "cloud-sdk" 、 "base" 、 "powershell" 、 "webhook" ]
- 自己.結果 = []
- self.registry_user = レジストリユーザー
- self.registry_passwd = レジストリパスワード
-
- def load_yaml(自分自身、データ):
- コンテンツ = yaml.load (データ)
- コンテンツを返す
-
- def load_json(自分自身、データ):
- コンテンツ = 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 = content[ "仕様" ][ "テンプレート" ][ "仕様" ][ "コンテナ" ][0][ "画像" ]
- self.arg_imgs.append(画像)
- # パラメータ内の画像を取得する
- deploy_name == "tekton-pipelines-controller"の場合:
- arg_img = コンテンツ[ "仕様" ][ "テンプレート" ][ "仕様" ][ "コンテナ" ][0][ "引数" ]
- arg_img内のaの場合:
- a.startswith( "-" )でない場合:
- 自己.arg_imgs.append(a)
- except例外をeとして:
- 印刷する
- self.arg_imgsを返す
-
- def save_json_file(自分自身、データ、ファイル名):
- self.arg_imgs内のiの場合:
- 自己.結果.追加({
- "s_image" : 私,
- "t_image" : self.target_registry + i.split( "/" )[-1].split( "@" )[0]
- })
- 新しいデータ = json.dumps(self.result、インデント=4)
- a = open ( ファイル名 , 'w' )
- a.write(新しいデータ)
- a.近い()
-
- 定義:
- f =オープン( "tekton_images.json" , 'r' )。読む()
- コンテンツ = self.load_json(f)
- docker_login_cmd = "dockerログイン-u {0} -p {1} {2}" .format(
- 自己.registry_user、
- 自己.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" )
- tekton.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」
-
- }
- ]
イメージ マッピング ファイルは、GitHubActions ページからダウンロードできます。 ミラースクリプトをダウンロード上記で生成されたイメージ ファイルを解析し、docker pull は対応するイメージをローカル コンピューターにダウンロードします。 - jsonをインポート
- インポートOS
-
- クラス Tekton:
- __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(自分自身、データ):
- コンテンツ = json.loads(データ)
- コンテンツを返す
-
- def down_images(self):
- f =オープン(self.json_file、 'r' ) .read ()
- コンテンツ = self.load_json(f)
-
- # docker_login_cmd = "dockerログイン-u {0} -p {1} {2}" .format(
- # 自己.registry_user、
- # 自己.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 13h
- tekton-pipelines-webhook-76bc9c97b9-cd2m4 1/1 実行中 0 13h
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-dashboard
- サービスポート: 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
|