Kubernetes (ACK One) 用分散クラウドコンテナプラットフォームワークフロークラスターは、オープンソースのArgoワークフローに基づいて開発されています。 超高弾力性、自動スケーリング、およびゼロO&Mコストの利点により、ホストされたArgoワークフローは、低コストで継続的統合 (CI) パイプラインを迅速に作成するのに役立ちます。 このトピックでは、ワークフロークラスターでGolangプロジェクトのCIパイプラインを作成する方法について説明します。
概要
ACK OneワークフロークラスターでCIパイプラインを作成するには、BuildKitを使用してコンテナーイメージをビルドおよびプッシュし、BuildKit Cacheを使用してイメージのビルドを高速化します。 Apsara File Storage NAS (NAS) を使用してGo modキャッシュを保存すると、Go Test
およびGo Build
の手順を高速化できます。 これにより、CIパイプラインの作成に必要な時間が大幅に短縮されます。
定義済みのClusterWorkflowTemplateの概要
デフォルトでは、ワークフロークラスターはci-go-v1
という名前の定義済みのClusterWorkflowTemplateを提供します。 テンプレートはBuildKit CacheとNASを使用してGo modキャッシュを格納するため、CIパイプラインの作成が大幅に高速化されます。
定義済みテンプレートを直接使用するか、定義済みテンプレートに基づいてカスタムテンプレートを作成できます。
定義済みのテンプレートは、次の手順で構成されます。
Gitクローン&チェックアウト
Gitリポジトリを複製し、Gitリポジトリを宛先ブランチにチェックアウトします。
コミットIDを取得します。これは、イメージ構築中にイメージタグにサフィックスとして追加されます。
Goテストの実行
デフォルトでは、すべてのテストケース (Goプロジェクト) をGitリポジトリで実行します。
パイプラインパラメーター
enable_test
を設定して、この手順を実行するかどうかを指定できます。Go modキャッシュは、NASファイルシステムの
/pkg/mod
ディレクトリに保存され、Go Test
とGo Build
を高速化します。
画像をビルド&プッシュ
BuildKitを使用してコンテナーイメージをビルドおよびプッシュし、BuildKit Cacheでレジストリタイプのキャッシュを使用してイメージのビルドを高速化します。
デフォルトでは、imageタグは
{container_tag}-{commit_id}
形式です。 パイプラインを送信するときに、イメージタグにコミットIDを追加するかどうかを指定できます。イメージのプッシュ中に、イメージの最新バージョンがプッシュされ、現在のバージョンが上書きされます。
定義済みテンプレートの内容:
次の表に、テンプレートのパラメーターを示します。
パラメーター | 説明 | 例 |
エントリーポイント | エントリテンプレートを指定します。 | メイン |
repo_url | GitリポジトリのURL。 | https://github.com/ivan-cai/echo-server.git |
repo_name | リポジトリの名前。 | エコーサーバー |
target_branch | リポジトリの宛先ブランチ。 デフォルト値: main。 | メイン |
container_image | ビルドするイメージ。The image to be build. 形式: <ACR EEドメイン>/<ACR EE名前空間>/<リポジトリ名> 。 | test-registry.cn-hongkong.cr.aliyuncs.com/acs/echo-server |
container_tag | 画像タグ。 デフォルト: v1.0.0。 | v1.0.0 |
dockerfile | Dockerfileのディレクトリと名前。 ルートディレクトリの相対パスを指定します。 デフォルト: |
|
enable_suffix_commitid | イメージタグにコミットIDを付加するかどうかを指定します。 有効な値:
デフォルト値:true | true |
enable_test | Go Testステップを実行するかどうかを指定します。 有効な値:
デフォルト値:true | true |
前提条件
ワークフロークラスターのkubeconfigファイルがACK Oneコンソールで取得され、kubectlクライアントがワークフロークラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
手順
CIパイプラインの作成方法を示す例として、パブリックGitリポジトリを使用します。 プライベートGitリポジトリを使用する場合は、まずCIパイプラインでプライベートリポジトリのクローンを作成する必要があります。
コンテナーイメージとNASボリュームにアクセスするための資格情報を格納するSecretは、送信されるパイプラインの名前空間に属している必要があります。
手順1: Container Registry Enterprise Editionインスタンスにアクセスするためのワークフロークラスターでの資格情報の作成
資格情報は、BuildKitから画像をプルするために使用されます。
Container Registry Enterprise Editionインスタンスのアクセス資格情報を設定します。 詳細については、「Container Registry Enterprise Editionインスタンスのアクセス資格情報の設定」をご参照ください。
次のコマンドを実行して、ワークフロークラスターにシークレットを作成し、資格情報を保存します。 資格情報はBuildKitによって使用されます。
$username:$password
を、Container Registry Enterprise Editionインスタンスへのアクセスに使用される資格情報に置き換えます。kubectl create secret generic docker-config --from-literal="config.json={\"auths\": {\"$repositoryDomain\": {\"auth\": \"$(echo -n $username:$password|base64)\"}}}"
手順2: NASボリュームをワークフロークラスターにマウントする
NASボリュームは、次の要件を満たすために使用されます。
クローンされたリポジトリに関する情報など、パイプラインのタスク間でデータを共有します。
CIパイプラインで
Go Test
およびGo Build
ステップを高速化するために使用されるGo modキャッシュを保存します。
次の手順を実行して、NASボリュームをワークフロークラスターにマウントします。
NASファイルシステムのマウント対象を取得します。 詳細については、「マウントターゲットの管理」をご参照ください。
次のテンプレートに基づいて、ワークフロークラスターに永続ボリューム (PV) と永続ボリューム要求 (PVC) を作成します。 詳細については、「Use NAS volumes」をご参照ください。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas labels: alicloud-pvname: pv-nas spec: capacity: storage: 100Gi accessModes: - ReadWriteMany csi: driver: nasplugin.csi.alibabacloud.com volumeHandle: pv-nas # Specify the name of the PV. volumeAttributes: server: <your nas filesystem mount point address> path: "/" mountOptions: - nolock,tcp,noresvport - vers=3 --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas spec: accessModes: - ReadWriteMany resources: requests: storage: 100Gi selector: matchLabels: alicloud-pvname: pv-nas
手順3: 定義済みのテンプレートに基づいてパイプラインを起動する
コンソールでパイプラインを送信する
ACK Oneコンソールにログインします。 左側のナビゲーションウィンドウで、[ワークフロークラスター] をクリックします。
[ワークフロークラスター] ページで、[基本情報] タブをクリックします。 [一般的な操作] セクションで、[ワークフローコンソール (アルゴ)] をクリックします。
Argoワークベンチで、左側のナビゲーションウィンドウで [クラスターワークフローテンプレート] をクリックし、[ci-go-v1] という名前の定義済みテンプレートをクリックします。
テンプレートの詳細ページで、右上隅の [+ 送信] をクリックします。 表示されるパネルで、パラメータを設定し、[+ 送信] をクリックします。
テンプレートパラメーターを参照し、パラメーターを設定します。
設定が完了したら、[ワークフロー] の詳細ページでパイプラインのステータスを確認できます。
Argo CLIを使用してパイプラインを送信
workflow.yaml
という名前のファイルを作成し、次の内容をファイルにコピーします。 テンプレートパラメーターを参照し、パラメーターを設定します。apiVersion: argoproj.io/v1alpha 1 kind: ワークフロー メタデータ: generateName: ci-go-v1- ラベル: workflow. argoproj.io/workflow-template: ackone-ci spec: 引数: parameters: -name: repo_url 値: https://github.com/ivan-cai/echo-server.git -name: repo_name 値: echo-server -name: target_branch 値: メイン -name: container_image 値: "test-registry.cn-hongkong.cr.aliyuncs.com/acs/echo-server" -name: container_tag 値: "v1.0.0" -name: dockerfile value: /Dockerfile -name: enable_suffix_commitid value: "true" -name: enable_test value: "true" workflowTemplateRef: 名前: ci-go-v1 clusterScope: true
次のコマンドを実行してパイプラインを送信します。
argo submit workflow.yaml