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

2023年9月8日掲載

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

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

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

目次

  • この記事では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デモを検証します
・さいごに
その四

 

5. JenkinsのCDを実行します。

この章では、Jenkinsによりソースコードの自動ビルド及びデプロイを実行します。

流れとしては、まず、Container Registryでローカルレポジトリーを作成し、

ECSからServerless Kubernetesを経由してローカルレポジトリーに接続します。

次に、ECSでBasicイメージを作成し、 JenkinsでPodテンプレートを設定します。

最後に、 JenkinsでPipelineを作成します。

5.1 Container Registryでローカルレポジトリーを作成します。

5.1.1  AlibabaCloudのコンテナレポジトリーを開きます。

45

5.1.2  コンテナーレポジトリーを作成します。

46

5.1.3  Dockerログインパスワードを設定します。

47

5.1.4  パスワードを設定します。

パスワード: 複雑で推測されないものを設定してください
※忘れないようにご注意ください

48

5.1.5  レポジトリを確認します。

49

5.1.6  名前空間(jenkins-ask)を作成します。

50

5.1.7   ローカルレポジトリーを作成します。

51
52

5.1.8   ローカルのレポジトリおよび登録方法を確認します。

53

5.2 ECSからServerless Kubernetes クラスターに接続します。

5.2.1  ECSでkubectlをインストールします。

5.2.1.1  先程作成されたECSを利用します。(セキュルティーグループも設定済)

54

5.2.1.2  ECSに接続します。

55

5.2.1.3  ASKインスタンスのバージョンを確認します。

※互換性のため、kubectlとクラスターのバージョンが同じメジャーバージョンであることをお勧めします。ここではkubectlのバージョンを1.25.0にします。

ASKインスタンスのバージョンは 1.24.6-aliyun.1が使用されています。

56

5.2.1.4  kubect lツールをダウンロードします。

以下のコマンドを入力し、 kubectl ツールをダウンロードします。

curl -LO https://dl.k8s.io/release/v1.25.0/bin/linux/amd64/kubectl

5.2.1.5  kubectl checksum ファイルをダウンロードします。

以下のコマンドを入力し、 kubectl checksum します。

curl -LO https://dl.k8s.io/release/v1.25.0/bin/linux/amd64/kubectl.sha256

5.2.1.6  ECSでkubectlをインストールします。

次のコマンドを入力し、kubectlをインストールします。

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

5.2.1.7  kubectlバージョンを確認します。

インストールされたkubectlのバージョンを確認します。

57

5.2.2  Serverless Kubernetes クラスターに接続します。

5.2.2.1  ASKインスタンスでkubeconfig内容を確認します。

ASKインスタンスの接続情報タグでコンフィグ情報を下記のパスに保存します。$HOME/.kube/config

58
59

5.2.2.2  ECSでフォルダを作成します。

mkdir $HOME/.kube
cd $HOME/.kube
60

5.2.2.3  configファイルを作成します。

vim config
61

5.2.2.4  コンフィグファイルを確認します。

62

5.2.2.5  クラスターの接続を確認します。

kubectl get pod
63

5.3 ECSからローカルレポジトリーに接続します。

5.3.1  ECSでDockerをインストールします。

5.3.1.1  ECSでDockerをインストールします。

ECSからローカルのレポジトリーに接続するために、まず以下のコマンドでECSにDockerをインストールします。

yum -y install docker

5.3.1.2  dockerを起動します。

次のコマンドを入力し、Dockerを起動させます。

systemctl enable docker && systemctl start docker

5.3.1.3  dockerバージョンを確認します。

次のコマンドを入力し、Dockerのバージョンを確認できます。

docker version
64

5.3.2  レポジトリーにログインします。

5.3.2.1  レポジトリーのログイン情報を確認します。

ACRコンソールに戻って、作成されたdemoレポジトリーのログイン情報を確認します。

65

5.3.2.2  レポジトリーにログインします。

次のコマンドにより、demoレポジトリーにログインします。

docker login --username=lixxxxx@53xxxxxxx0 
registry-intl.ap-northeast-1.aliyuncs.com

5.3.2.3  レポジトリーの権限を設定するため、jenkins-docker-cfgを作成します。

以下のコマンドを入力し、jenkins-docker-cfgを作成します。

kubectl create secret generic jenkins-docker-cfg 
--from-file=/root/.docker/config.json

5.4 ECSでBasicイメージを作成します。

5.4.1  ECSでKanikoのBasicイメージを作成します。

5.4.1.1  kanikoフォルダを作成します。

66
67

5.4.1.2  kanikoフォルダ配下のDockerfileを編集し、保存します。

vim Dockerfile
FROM gcr.io/kaniko-project/executor:v1.9.0-debug
ENTRYPOINT ["/bin/sh", "-c"]

※Shellコマンドが使えるv1.9.0-debugバージョンに設定します。

68
69

5.4.1.3  Dockerビルドを作成します。

以下のコマンドを入力してDockerビルドを作成します。

$ docker build -t registry-intl-vpc.ap-northeast-1.aliyuncs.com/jenkins-ask/kaniko:1.9.0-debug .

5.4.1.4  Dockerレポジトリを作成します。

以下のコマンドを入力してDockerレポジトリを作成します。

$ docker push registry-intl-vpc.ap-northeast-1.aliyuncs.com/jenkins-ask/kaniko:1.9.0-debug
70

5.4.1.5  ACRコンソールでkanikoのレポジトリを確認します。

71
72

5.4.2  ECSでmavenのBasicイメージを作成します。

5.4.2.1  mavenフォルダを作成します。

73
74

5.4.2.2  mavenフォルダ配下のDockerfileを編集し、保存します。

以下の内容を入力して保存します。

vim Dockerfile FROM maven
RUN export JAVA_HOME=/opt/java/openjdk/
RUN export PATH=$PATH:$JAVA_HOME/bin
75
76

5.4.2.3  Dockerビルドを作成します。

以下のコマンドを入力して Dockerビルドを作成します。

$ docker build -t 
registry-intl-vpc.ap-northeast-1.aliyuncs.com/jenkins-ask/maven:v3 .
77

5.4.2.4  Dockerレポジトリを作成します。

以下のコマンドを入力し、Dockerレポジトリを作成します。

$ docker push 
registry-intl.ap-northeast-1.aliyuncs.com/jenkins-ask/maven:v3
78

5.4.2.5  ACRコンソールでmavenのレポジトリを確認します。

79
80

5.4.3  ECSでkubectlのBasicイメージを作成します。

5.4.3.1  kubectlフォルダを作成します。

81
82

5.4.3.2  kubectlフォルダにDockerfileを編集します。

以下の内容を入力し、Dockerfileファイルを保存します。

vim Dockerfile

FROM jenkins/inbound-agent
USER root
RUN curl -L https://storage.googleapis.com/kubernetes-release/release/v1.20.1/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl
RUN chmod a+x /usr/local/bin/kubectl
83

5.4.3.3  Dockerビルドを作成します。

以下のコマンドを入力し、Dockerビルドを作成します。

$ docker build -t 
registry-intl-vpc.ap-northeast-1.aliyuncs.com/jenkins-ask/kubectl:v1.20.1 .
84

5.4.3.4  Dockerレポジトリを作成します。

以下のコマンドを入力し、Dockerレポジトリを作成します。

$ docker push
registry-intl.ap-northeast-1.aliyuncs.com/jenkins-ask/kubectl:v1.20.1
85

5.4.3.5  ACRコンソールでkubectlのレポジトリを確認します。

86
87

5.4.4  ECSでopenjdkのBasicイメージを作成します。

5.4.4.1  openjdkフォルダを作成します。

88
89

5.4.4.2  openjdkフォルダにあるDockerfileファイルを編集します。

以下のコマンドを入力し、Dockerfileを編集します。

vim Dockerfile

FROM docker.io/adoptopenjdk/openjdk11:latest
90

5.4.4.3  Dockerビルドを作成します。

以下のdocker buildコマンドを実行します。

$ docker build -t 
registry-intl-vpc.ap-northeast-1.aliyuncs.com/jenkins-ask/openjdk:v11 .
91

5.4.4.4  Dockerレポジトリを作成します。

以下のコマンドでDockerレポジトリを作成します。

$ docker push 
registry-intl.ap-northeast-1.aliyuncs.com/jenkins-ask/openjdk:v11
92

5.4.4.5  ACRコンソールでopenjdkのレポジトリを確認します。

93
94

5.5 JenkinsでPodテンプレートを設定します。

5.5.1 Podテンプレートを設定します。

5.5.1.1  Pod Template設定項目画面に遷移します。

Jenkins Dashboard → Manage Jenkins → Config System→  Cloud → a separate configuration page →Pod Template設定項目

95
96

5.5.1.2  テンプレート名にslave-pipelineを設定し、詳細ボタンをクリックします。

97

5.5.1.3  ラベルを設定します。

98

5.5.2  mavenのコンテナテンプレートを設定します。

5.5.2.1  コンテナテンプレートの項目で表示します。

slave-pipelineのPodTemplateでmavenのコンテナテンプレートを設定します。

99

5.5.2.2  mavenのDockerイメージを取得します。

registry-intl-vpc.ap-northeast-1.aliyuncs.com/jenkins-ask/maven:v3
100
101

5.5.2.3  mavenのコンテナーテンプレートを設定、保存します。

102

5.5.3  kanikoのコンテナテンプレートを設定します。

5.5.3.1  kanikoのDockerイメージを取得します。

registry-intl-vpc.ap-northeast-1.aliyuncs.com/jenkins-ask/kaniko:1.9.0-debug
103
104

5.5.3.2  kanikoのコンテナーテンプレートを設定、保存します。

105

5.5.4  kubectlのコンテナテンプレートを設定します。

5.5.4.1  kubectlのDockerイメージを取得します。

106
107

5.5.4.2  kubectlのコンテナーテンプレートを設定し、保存します。

108
109

5.5.5  PodTemplateの環境変数を設定します。

Key:DOCKER_CONFIG
Value:/kaniko/.docker
110

5.5.6  Secret Volumesを設定します。

5.5.6.1  jenkins-docker-cfgを設定します。

Secret name: jenkins-docker-cfg
Mount path:  /kaniko/.docker
111

5.5.6.2  intranet-kube-configを設定します。

Secret name:intranet-kube-config
Mount path:/root/.kube/
112

5.5.6.3  その他設定は下記の通りで設定します。

Raw YAML for the Pod:

spec:
    containers:
    - name: maven
      resources:
        requests:
          memory: "512Mi"
        limits:
          memory: "1024Mi"
113

5.5.6.4  イメージPullのパスワードを設定します。

114

5.6 JenkinsでPipelineを作成します。

5.6.1  Dashboard→New Itemをクリックします。

115
116

5.6.2  APIServerURLを取得します。

https://47.74.**.**:6443
117

5.6.3  Stringパラメータを追加します。

118

5.6.4  api_server_urlパラメータを設定します。

name: api_server_url
Default value: https://47.74.**.**:6443
119

5.6.5  branchパラメータを設定します。

120

5.6.6  registry_suffixパラメータを設定します。

121

5.6.7  image_regionパラメータを設定します。

122

5.6.8  image_namespaceパラメータを設定します。

123
124

5.6.9  image_reponameパラメータを設定します。

125
126

5.6.10  image_tagパラメータを設定します。

127

5.6.11  Pipelineのビルドトリガーも設定できます。

例:ほかのProjectがビルドされたらPipelineをビルドします。

128

5.6.12  Pipelineを設定します。

129

5.6.13  Scriptfileを設定し、保存します。

130

5.6.14  demo_pipelineを確認します。

131
132
133

その三のさいごに

本記事では、Alibaba CloudでJenkinsを使ったCI/CDの構築について、JenkinsのCDの実行までを解説しました。

つづきは、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)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。

おすすめの記事

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