フォーム読み込み中
皆さんこんにちは。クラウドエンジニアのKangです。
この記事ではServerlessKubernetes にJenkinsをデプロイし、高可用性、柔軟なスケーリング、低コストの自動化CI/CD(継続的インテグレーション/継続的デリバリー) システムを構築する方法を紹介します。本記事はその3番目の記事です。
Kubernetes masterノードのシングルポイント障害、リソースの利用率が低い、システムの拡張性が悪いと言った問題を解決することを目指します。
この章では、Jenkinsによりソースコードの自動ビルド及びデプロイを実行します。
流れとしては、まず、Container Registryでローカルレポジトリーを作成し、
ECSからServerless Kubernetesを経由してローカルレポジトリーに接続します。
次に、ECSでBasicイメージを作成し、 JenkinsでPodテンプレートを設定します。
最後に、 JenkinsでPipelineを作成します。
5.1.1 AlibabaCloudのコンテナレポジトリーを開きます。
5.1.2 コンテナーレポジトリーを作成します。
5.1.3 Dockerログインパスワードを設定します。
5.1.4 パスワードを設定します。
パスワード: 複雑で推測されないものを設定してください
※忘れないようにご注意ください
5.1.5 レポジトリを確認します。
5.1.6 名前空間(jenkins-ask)を作成します。
5.1.7 ローカルレポジトリーを作成します。
5.1.8 ローカルのレポジトリおよび登録方法を確認します。
5.2.1 ECSでkubectlをインストールします。
5.2.1.1 先程作成されたECSを利用します。(セキュルティーグループも設定済)
5.2.1.2 ECSに接続します。
5.2.1.3 ASKインスタンスのバージョンを確認します。
※互換性のため、kubectlとクラスターのバージョンが同じメジャーバージョンであることをお勧めします。ここではkubectlのバージョンを1.25.0にします。
ASKインスタンスのバージョンは 1.24.6-aliyun.1が使用されています。
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のバージョンを確認します。
5.2.2 Serverless Kubernetes クラスターに接続します。
5.2.2.1 ASKインスタンスでkubeconfig内容を確認します。
ASKインスタンスの接続情報タグでコンフィグ情報を下記のパスに保存します。$HOME/.kube/config
5.2.2.2 ECSでフォルダを作成します。
mkdir $HOME/.kube
cd $HOME/.kube
5.2.2.3 configファイルを作成します。
vim config
5.2.2.4 コンフィグファイルを確認します。
5.2.2.5 クラスターの接続を確認します。
kubectl get pod
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
5.3.2 レポジトリーにログインします。
5.3.2.1 レポジトリーのログイン情報を確認します。
ACRコンソールに戻って、作成されたdemoレポジトリーのログイン情報を確認します。
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.1 ECSでKanikoのBasicイメージを作成します。
5.4.1.1 kanikoフォルダを作成します。
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バージョンに設定します。
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
5.4.1.5 ACRコンソールでkanikoのレポジトリを確認します。
5.4.2 ECSでmavenのBasicイメージを作成します。
5.4.2.1 mavenフォルダを作成します。
5.4.2.2 mavenフォルダ配下のDockerfileを編集し、保存します。
以下の内容を入力して保存します。
vim Dockerfile FROM maven
RUN export JAVA_HOME=/opt/java/openjdk/
RUN export PATH=$PATH:$JAVA_HOME/bin
5.4.2.3 Dockerビルドを作成します。
以下のコマンドを入力して Dockerビルドを作成します。
$ docker build -t
registry-intl-vpc.ap-northeast-1.aliyuncs.com/jenkins-ask/maven:v3 .
5.4.2.4 Dockerレポジトリを作成します。
以下のコマンドを入力し、Dockerレポジトリを作成します。
$ docker push
registry-intl.ap-northeast-1.aliyuncs.com/jenkins-ask/maven:v3
5.4.2.5 ACRコンソールでmavenのレポジトリを確認します。
5.4.3 ECSでkubectlのBasicイメージを作成します。
5.4.3.1 kubectlフォルダを作成します。
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
5.4.3.3 Dockerビルドを作成します。
以下のコマンドを入力し、Dockerビルドを作成します。
$ docker build -t
registry-intl-vpc.ap-northeast-1.aliyuncs.com/jenkins-ask/kubectl:v1.20.1 .
5.4.3.4 Dockerレポジトリを作成します。
以下のコマンドを入力し、Dockerレポジトリを作成します。
$ docker push
registry-intl.ap-northeast-1.aliyuncs.com/jenkins-ask/kubectl:v1.20.1
5.4.3.5 ACRコンソールでkubectlのレポジトリを確認します。
5.4.4 ECSでopenjdkのBasicイメージを作成します。
5.4.4.1 openjdkフォルダを作成します。
5.4.4.2 openjdkフォルダにあるDockerfileファイルを編集します。
以下のコマンドを入力し、Dockerfileを編集します。
vim Dockerfile
FROM docker.io/adoptopenjdk/openjdk11:latest
5.4.4.3 Dockerビルドを作成します。
以下のdocker buildコマンドを実行します。
$ docker build -t
registry-intl-vpc.ap-northeast-1.aliyuncs.com/jenkins-ask/openjdk:v11 .
5.4.4.4 Dockerレポジトリを作成します。
以下のコマンドでDockerレポジトリを作成します。
$ docker push
registry-intl.ap-northeast-1.aliyuncs.com/jenkins-ask/openjdk:v11
5.4.4.5 ACRコンソールでopenjdkのレポジトリを確認します。
5.5.1 Podテンプレートを設定します。
5.5.1.1 Pod Template設定項目画面に遷移します。
Jenkins Dashboard → Manage Jenkins → Config System→ Cloud → a separate configuration page →Pod Template設定項目
5.5.1.2 テンプレート名にslave-pipelineを設定し、詳細ボタンをクリックします。
5.5.1.3 ラベルを設定します。
5.5.2 mavenのコンテナテンプレートを設定します。
5.5.2.1 コンテナテンプレートの項目で表示します。
slave-pipelineのPodTemplateでmavenのコンテナテンプレートを設定します。
5.5.2.2 mavenのDockerイメージを取得します。
registry-intl-vpc.ap-northeast-1.aliyuncs.com/jenkins-ask/maven:v3
5.5.2.3 mavenのコンテナーテンプレートを設定、保存します。
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
5.5.3.2 kanikoのコンテナーテンプレートを設定、保存します。
5.5.4 kubectlのコンテナテンプレートを設定します。
5.5.4.1 kubectlのDockerイメージを取得します。
5.5.4.2 kubectlのコンテナーテンプレートを設定し、保存します。
5.5.5 PodTemplateの環境変数を設定します。
Key:DOCKER_CONFIG
Value:/kaniko/.docker
5.5.6 Secret Volumesを設定します。
5.5.6.1 jenkins-docker-cfgを設定します。
Secret name: jenkins-docker-cfg
Mount path: /kaniko/.docker
5.5.6.2 intranet-kube-configを設定します。
Secret name:intranet-kube-config
Mount path:/root/.kube/
5.5.6.3 その他設定は下記の通りで設定します。
Raw YAML for the Pod:
spec:
containers:
- name: maven
resources:
requests:
memory: "512Mi"
limits:
memory: "1024Mi"
5.5.6.4 イメージPullのパスワードを設定します。
5.6.1 Dashboard→New Itemをクリックします。
5.6.2 APIServerURLを取得します。
https://47.74.**.**:6443
5.6.3 Stringパラメータを追加します。
5.6.4 api_server_urlパラメータを設定します。
name: api_server_url
Default value: https://47.74.**.**:6443
5.6.5 branchパラメータを設定します。
5.6.6 registry_suffixパラメータを設定します。
5.6.7 image_regionパラメータを設定します。
5.6.8 image_namespaceパラメータを設定します。
5.6.9 image_reponameパラメータを設定します。
5.6.10 image_tagパラメータを設定します。
5.6.11 Pipelineのビルドトリガーも設定できます。
例:ほかのProjectがビルドされたらPipelineをビルドします。
5.6.12 Pipelineを設定します。
5.6.13 Scriptfileを設定し、保存します。
5.6.14 demo_pipelineを確認します。
本記事では、Alibaba CloudでJenkinsを使ったCI/CDの構築について、JenkinsのCDの実行までを解説しました。
つづきは、Alibaba CloudでJenkinsを使ったCI/CD(その四)をご覧ください。
条件に該当するページがございません