Alibaba CloudでJenkinsを使ったCI/CD(その一)

2023年9月8日掲載

img-alibaba-cloud-linux-migration-blog-20230519-001

皆さんこんにちは。クラウドエンジニアのKangです。

この記事ではServerlessKubernetes にJenkinsをデプロイし、高可用性、柔軟なスケーリング、低コストの自動化CI/CD(継続的インテグレーション/継続的デリバリー) システムを構築する方法を紹介します。

目次

  • この記事ではAlibaba Cloud Container Registryサービスを利用し、Jenkinsを使ったCI/CDシステムを構築します。
  • ある程度Alibaba CloudとKubernetesに関する知識がある事を前提に書いています。
  • Kubernetes masterノードのシングルポイント障害、リソースの利用率が低い、システムの拡張性が悪いと言った問題を解決することを目指します。

はじめに

本記事は、ステップバイステップで丁寧に説明していこうと思います。そのため、記事が長くなっているため4つの記事に分割して解説していきます。

・はじめに
・構成図
・Pipeline
・使用するリソース
・データフロー
1. 構築用のリソースを作成します。
2. ASKにJenkinsをデプロイします。
その一
本記事
3. Jenkinsの共通設定を実行します。
4. JenkinsのCIを実行します。
その二
5. JenkinsのCDを実行します。その三
6. CICDデモを検証します。
さいごに
その四

 

従来のCI/CDシステムにはいくつかの課題点があります

高コスト

ハードウェアやライセンス、専門的な技術スキルを必要とするため、導入および維持に高いコストがかかる場合があります。

複雑なセットアップと管理

セットアップや構成が複雑であり、管理が困難な場合があります。これにより、運用や保守に多くの時間とリソースが必要になります。

柔軟性の欠如

特定のツールやプロセスに依存する場合があり、柔軟性に欠けることがあります。新しいツールや技術への移行が困難な場合があります。

スケーラビリティの課題

大規模なプロジェクトや構成でのスケーラビリティに課題を抱えることがあります。ビルドやデプロイの速度やパフォーマンスが低下する場合があります。

インフラストラクチャの制約

特定のインフラストラクチャに依存することがあります。クラウドベースのシステムやコンテナ化された環境への移行が制約される場合があります。

これまでの課題を克服したCI/CDシステム構築

これらの課題を解決するため、本記事ではAlibabaCloud Elastic Container Instance(ECI)をベースとしたサーバーレスKubernetesサービス(Serverless ACK)とNASストレージを利用し、リソーススケーラブル、低コスト、自動化CI/CDシステムを構築する方法を紹介したいと思います。

ECIをベースとしたServerlss ACKによるCI/CDシステムでは、以下のような課題を解決できます

低コストのデプロイとデリバリー

ECIベースの低コストCI/CDシステムは、従来のシステムと比較してコストを削減し、経済的な解決策を提供します。

煩雑な設定管理は不要

ECIシステムにより、アーティファクト、設定ファイル、重要な知識を集中管理し、設定管理を簡素化できます。

効率的なビルドとデプロイプロセス

ECIベースのCI/CDシステムは、自動化されたビルド、テスト、デプロイプロセスにより、手動操作やエラーを減らし、デリバリーの速度と品質を向上させます。

スケーラビリティと柔軟性

本システムは柔軟で拡張可能であり、複数のチームやプロジェクトの並行開発をサポートし、効率と柔軟性を向上させます。

本記事はAlibabaCloudのベストプラクティス (中国語) も参考にしています。

構成図

本システムの構成図は以下の通りです。

 

Pipeline

今回はGithubに保存されているソースコードをダウンロードし、K8sコンテナ内でDockerイメージをビルドして、アプリケーションを実行するという一連の処理が自動的に完成させるため、予めPipelineを作成して、JenkinsによりPipelineをトリーガーします。

Pipelineには四つのステージがあります。デモコードのJenkinsfileに記載があります。

(https://github.com/nancyli2008/jenkins-demo/blob/main/Jenkinsfile )

ステージ1:Git→コードクローンタスクを完成します。

ステージ2: Package→ Mavenでコードパッケージを実行します。

ステージ3: Image Build And Publish→ KanikoでイメージビルドとPublishします。(K8sコンテナ内でDockerイメージをビルドする必要があるため、Kanikoを利用しています。)

ステージ4: Deploy to Kubernetes→ kubectlでアプリケーションをデプロイします。

02

使用するリソース

ECIベースの低コストCI/CDシステムを導入するために、以下リソース及びAlibabaCloud サービスを利用しています。

Github:APPコードを格納します。

Maven:コードパッケージを実行します。

Kaniko:イメージを構築するためのツールです。

Openjdk: デモコードではJavaベースなのでOpenjdkを使用します。

PodTemplate Contain: erImage用Basicイメージとデモアプリケーションのレポジトリを格納します。

Alibaba Cloud ECS (Elastic Compute Service): 仮想マシンを提供し、ローカル開発用の環境として利用します。

Alibaba Cloud Apsara File Storage NAS (NAS):アーティファクトの保存や設定ファイルの管理に使用します。

Alibaba Cloud Container Registry(ACR): コンテナイメージの管理と配信に使用します。

Alibaba Cloud Container Service for Kubernetes(K8s):仮想マシンを提供し、CI/CDシステムの実行環境として利用します。

データフロー

本章で紹介するデータフローは以下の通りとなっております。

1.アプリケーションのソースコードを変更します。

2.コードを GitHub にコミットします。

3.継続的インテグレーション トリガーが Jenkins に送られます。

4.Jenkins は動的ビルドエージェントのために AlibabaCloud Serverless Kubernetes (ASK) を使用してビルドジョブをトリガーします。

5.Jenkins はmavenコンテナーを構築しアプリケーションのソースコードをパッケージします。

6.Jenkins はKanikoコンテナーを構築しアプリケーションのレポジトリをAlibabaCloudの Container Registry(ACR) にプッシュします。

7.Jenkins はkubectlコンテナーを構築し、アプリケーションをAlibabaCloud Serverless Kubernetes (ASK) にデプロイします。

8.アプリケーションのデモがブラウザで確認できます。

 

1. 構築用のリソースを作成します。

では早速ですが、構築手順を紹介していきたいと思います。

上記の構成を実現するために、まず必要なクラウドリソースを作成する必要があります。ここでは、VPCとVSwitch、ローカル開発用のECS、NAS、ASKなどのAlibabaCloud リソースを作成します。

1.1 VPCとVSwitchを作成します。

1.1.1 VPCを作成します。

03

1.1.2 Vswitchを作成します。

04
05

1.1.3 VPCとVSwitchが作成されたことを確認します。

06
07

1.2 ローカル開発用のECSを作成します。

1.2.1 RegionとECSのスペックを選択します。

08

1.2.2 イメージとディスクを選択します。

09

1.2.3 VPCとIPを設定します。

10

1.2.4 ログインキーを設定します。

11

1.2.5  ECSの作成が完了していることを確認します。

12
13

1.3 NASを作成します。

1.3.1  NASインスタンスを購入します。

NASのストレージタイプは[nas_extreme]を利用します。

14

1.3.2 注意事項を確認の上、NASを購入します。

15

1.3.3 NASが作成されていることを確認します。

16

1.3.4 RAMコンソールでAliyunNASManageENIRoleを許可します。

17

1.4 ASKを作成します。

1.4.1  k8sクラスター仕様、リージョン、バージョン、VPCなどを選択します。

18

1.4.2  デフォルトの設定のまま、次のステップへ遷移します。

19

1.4.3  サービス許可をチェックし、クラスターを作成します。

20
21

1.4.4  AlibabaCloud ASKが作成完了していることを確認します。

22

2. ASKにJenkinsをデプロイします。

流れとしては、以下のようになっております。

まず、ASKのCloudshellでJenkinsのデプロイファイルをダウンロードします。

次に、NASインスタンスを作成し、マウントポイントを設定します。

その後、Jenkins_homeとNASストレージを設定し、Jenkinsをデプロイします。

最後に、JenkinsでKubernetesのプラグインをインストールします。

2.1 ASKのCloudshellでJenkinsのデプロイファイルをダウンロードします。

2.1.1  ASKのインスタンスを選択し、「CloudShell開く」メニューをクリックします。

23

2.1.2  CloudShell画面を開きます。

24

2.1.3  下記コマンドでデプロイファイルをダウンロードします。

git clone https://github.com/AliyunContainerService/jenkins-on-serverless.git
25

2.1.4   フォルダを変更します。

cd jenkins-on-serverless
26

2.2 NASをマウントします。

2.2.1  NASコンソールにインスタンスを選択します。

27

2.2.2  ターゲットマウントを追加します。

28

2.2.3  VPCとVSwitchを設定します。

29

2.2.4 ターゲットマウントされていることを確認します。

30

2.3 Jenkins_homeを設定し、NASストレージを設定します。

2.3.1  CloudShellコンソール画面を開きます。

31

2.3.2  yamlファイルを確認します。

ls
32

2.3.3  NASコンソール画面からServerアドレスを取得します。

33
255ebf40-1j0n.ap-northeast-1.extreme.nas.aliyuncs.com

2.3.4  yamlファイルのJenkinsHomeにNASのServerアドレスを設定します。

vim serverless-k8s-jenkins-deploy.yaml
34
35
36

2.4 Jenkinsをデプロイします。

2.4.1  Jenkinsをデプロイします。

kubectl apply -f serverless-k8s-jenkins-deploy.yaml
kubectl get pods --all-namespaces
37

2.4.2  podステータスを確認します。

podステータスが[Running]であることが確認できます。

38

2.4.3  Jenkinsに登録します。

ASKインスタンス→Network→Serivce→Jenkins→ExternalEndpointの順で。クリックし、Jenkinsにログインします。

39

2.4.4  JenkinsのPodターミナルに接続します。

40

2.4.5 下記コマンドでJenkinsのパスワードを取得します。

41

2.4.6  プラグインのインストールはとりあえずスキップし、Jenkinsにログインします。

アカウント:admin

パスワード:  f6bddcda90a54ceda77439c4f5******

42
43

2.5  Jenkinsでプラグインをインストールします。

2.5.1 JenkinsでKubernetesのプラグインをインストールします。

Kubernetes-pluginプラグインを使用すると、KubernetesはJenkinsに動的にスレーブを構築する機能を提供することができます。

ユーザーは構築するPodテンプレートを指定し、自動的にjnlpコンテナを注入し、Jenkinsステージがブレーキングを実行してリソースのクリーンアップを完了することで、Serverless Kubernetesが提供するECI機能と合わせて、クラスタリソースのサイジングを事前に計画しなくても、自動的かつ回復力のあるCI/CDシステムを構築することが可能です。

 

2.5.1.1  Jenkinsの画面でプラグインを確認します。

Jenkins Dashboard →Manage Jenkins→→Manage  Plugins→Installedの順でクリックします。

44
45

2.5.1.2  下記のプラグインをインストールします。

Kubernetes
Kubernetes Credentials
Kubernetes CLI
46

2.5.1.3 プラグインをインストールします。

47

2.5.1.4 Kubernetesプラグインを確認します。

48

2.5.2 gitプラグインを作成します。

2.5.2.1  プラグイン管理画面にgit プラグインを選択します。

49

2.5.2.2  git プラグインをインストールします。

50
51

2.5.3  localeプラグインをインストールします。

2.5.3.1  プラグイン管理画面にlocaleプラグインを選択します。

52

2.5.3.2  設定画面でLocaleデフォルト言語を英語に設定します。

53

2.5.4  mavenプラグインをインストールします。

2.5.4.1   プラグイン管理画面にmavenプラグインを選択します。

54

2.5.4.2  mavenプラグインをインストールします。

55

2.5.4.3  Mavenを設定します。

Jenkins Dashboard →Manage Jenkins→Global Tool Configuration→Mavenの順でクリックします。

56
57

2.5.5  BlueOceanプラグインをインストールします。

2.5.5.1  BlueOceanプラグインを選択します。

58

2.5.5.2  BlueOceanプラグインをインストールします。

59

その一のさいごに

本記事では、Alibaba CloudでJenkinsを使ったCI/CDの構築について、課題やその解決のための構成などについて説明し、リソースの構築、Jenkinsのデプロイまでを解説しました。

つづきは、Alibaba CloudでJenkinsを使ったCI/CD(その二)をご覧ください。

 

・はじめに
・構成図
・Pipeline
・使用するリソース
・データフロー
1. 構築用のリソースを作成します。
2. ASKにJenkinsをデプロイします。
その一
本記事
3. Jenkinsの共通設定を実行します。
4. JenkinsのCIを実行します。
その二
5. JenkinsのCDを実行します。その三
6. CICDデモを検証します。
さいごに
その四

 

関連サービス

Alibaba Cloud

Alibaba Cloudは中国国内でのクラウド利用はもちろん、日本-中国間のネットワークの不安定さの解消、中国サイバーセキュリティ法への対策など、中国進出に際する課題を解消できるパブリッククラウドサービスです。

MSPサービス

MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。

おすすめの記事

条件に該当するページがございません