カプチーノ氏の 50 杯目のコーヒー — ジェンキンスによる Bubble APP の自動展開(アップグレード バージョン)

Jenkins の自動展開の完了プロセス

ここに画像の説明を挿入します

Docker に基づいて Jenkins をインストールする

jenkins/jenkins イメージのバージョンを確認する

ここに画像の説明を挿入します

Jenkins イメージをプルする

docker pull jenkins/jenkins:2.346.3-2-lts-jdk11

Jenkins マウント ディレクトリを作成し、それを承認します

mkdir -p /home/jenkins/jenkins_home
chmod 777 /home/jenkins/jenkins_home

ランジェンキンス

docker run -d \
	-p 8850:8080 -p 50000:50000 \
	-v /home/jenkins/jenkins_home:/var/jenkins_home \
	-v /etc/localtime:/etc/localtime \
	--restart=always jenkins/jenkins:2.346.3-2-lts-jdk11

ここに画像の説明を挿入します

docker run コマンドの実行時に以下のエラーが発生した場合は、docker を再起動して再度実行してください。

docker: Error response from daemon: driver failed programming external connectivity on endpoint boring_mclean (bbd33296c7b1a2c851c31db07d6dd7a44a95d1b5fa443c08e59508f1524790b9):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 50000 -j DNAT --to-destination 172.17.0.2:50000 ! -i docker0: iptables: No chain/target/match by that name.

ドッカーを再起動します

systemctl restart docker

ファイアウォールをオフにする

systemctl stop firewalld

Jenkinsの基本構成

Jenkinsの初期化設定

ここに画像の説明を挿入します

キーの取得

docker ps
docker exec -it 容器ID /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
exit

ここに画像の説明を挿入します

はじめにをスキップ

ここに画像の説明を挿入します

ここに画像の説明を挿入します

Jenkins のホームページにアクセスします

ここに画像の説明を挿入します

新しいユーザーを作成する

ここに画像の説明を挿入します

ここに画像の説明を挿入します

パスワードを変更する

ここに画像の説明を挿入します

チャイニーズ・ジェンキンス

プラグインのインストール

ここに画像の説明を挿入します

[利用可能]を選択し、[ローカリゼーション]を検索し、[ローカリゼーション:中国語(簡体字)]プラグインを選択し、[再起動せずにインストール]をクリックします。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

ジェンキンスを再起動します

docker ps
docker restart 容器ID

ここに画像の説明を挿入します

ここに画像の説明を挿入します

JDKの構成
docker ps
docker exec -it 容器ID /bin/bash
echo $JAVA_HOME
exit

ここに画像の説明を挿入します

ここに画像の説明を挿入します

ここに画像の説明を挿入します

Maven環境を構成する

Maven をインストールする

ここに画像の説明を挿入します

[Config File Provider]プラグイン(設定ファイルの管理に使用)をインストールします。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

[管理対象ファイル]にsettings.xmlファイルを作成します。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

ここに画像の説明を挿入します

設定ファイルは変更または削除できます

ここに画像の説明を挿入します

[グローバルツール設定]でsettings.xmlファイルを設定します。

ここに画像の説明を挿入します

コードをコンパイルして Jar にパッケージ化し、Maven プライベート サーバーにアップロードします。

ここに画像の説明を挿入します

  1. Jenkins は Gitlab からコードをプルします。
  2. Jenkins は Nexus から Jar パッケージをプルします。
  3. Jenkins は、コンパイル/パッケージ化されたファイルまたは Jar パッケージを Nexus にアップロードします。
新しいタスクを作成する

ここに画像の説明を挿入します

ここに画像の説明を挿入します

Maven プロジェクトをビルドするオプションがないため、[Maven Integration] プラグインもインストールする必要があります。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

ここに画像の説明を挿入します

構成【概要】

ここに画像の説明を挿入します

ソースコード管理がないため、ソースコード管理用の[Git]プラグインもインストールする必要があります(設定の一時保存)

ここに画像の説明を挿入します

[Git]プラグインをインストールする

ここに画像の説明を挿入します

インストールが完了したら、先ほどの設定ページに戻ります

ここに画像の説明を挿入します

設定 [ソースコード管理]

Gitlab コード リポジトリに接続し、Git 管理資格情報を追加します。

ここに画像の説明を挿入します

Gitlab アカウントのパスワードを入力します

ここに画像の説明を挿入します

赤色のエラー メッセージがない場合は、Git ウェアハウスが正常に接続されていることを意味します。

ここに画像の説明を挿入します

[ビルド環境]を設定する

ここに画像の説明を挿入します

構成【ビルド】

clean install deploy -P prod

ここに画像の説明を挿入します

ビルドタスク

設定を保存して現在のタスクをビルドする

ここに画像の説明を挿入します

申し訳ありませんが、タスクのビルドに失敗しました

ここに画像の説明を挿入します

エラー メッセージによると、これは settings.xml ファイルの問題が原因であることがわかり、[localRepository] ​​を現在の Linux システムのディレクトリとして設定する必要があります。

ここに画像の説明を挿入します

Linuxシステム上の[localRepository]

ここに画像の説明を挿入します

[localRepository] ​​ディレクトリを作成して承認します (Jenkins には Jar パッケージを書き込むための権限が必要です)

docker ps
docker exec -ti --user root 容器ID sh
mkdir -p /usr/maven/bubble
chmod 777 /usr/maven/bubble
exit

ここに画像の説明を挿入します

タスクを再構築します。次の図は、タスクが正常に構築されたことを示しています。

ここに画像の説明を挿入します

プロジェクトコードが Maven プライベートサーバーに正常にデプロイされたかどうかを確認するには、最終変更時刻 (GMT はグリニッジ標準時、北京時間 CST=GMT+8 時間) に基づいて判断できます。

ここに画像の説明を挿入します

コンパイル/パッケージ化された Jar パッケージをデプロイメント サーバーにアップロードして実行します。

この時点で、Git からコードを取得してビルドできますが、ビルド後もコードの自動デプロイメントを実装する必要があります。

ここに画像の説明を挿入します

  1. Jenkins は Gitlab からコードをプルします。
  2. Jenkins は Nexus から Jar パッケージをプルします。
  3. Jenkins は、コンパイル/パッケージ化されたファイルまたは Jar パッケージを Nexus にアップロードします。
  4. Jenkins は、コンパイル/パッケージ化された Jar パッケージをデプロイメント サーバーの指定されたディレクトリにアップロードし、シェル スクリプトを実行して Jar パッケージを実行します。
新しいタスクを作成する

新しいタスクを作成し、bubble-parent の設定内容をコピーします。

ここに画像の説明を挿入します

状況に応じて差別化された構成を調整する

【一般的な】

ここに画像の説明を挿入します

【ソースコード管理】

ここに画像の説明を挿入します

【建てる】

clean install deploy -Dmaven.test.skip=true -P prod

ここに画像の説明を挿入します

導入サービス

調整した構成を保存します。自動展開を実装する前に、いくつかの準備が必要です。展開プロジェクト用にサーバーを準備する必要があります。

次に、このクラウド サーバーを使用してマイクロサービスをデプロイします

ここに画像の説明を挿入します

デプロイ方法: Jenkins がプロジェクトをビルドし、それを Jar パッケージとしてサーバー (マイクロサービスがデプロイされる場所) にアップロードした後、sh ファイルを実行して Jar パッケージを Docker イメージにして実行します。たとえば、Jenkins が bubble-gateway をビルドするとき、パッケージ化された bubble-gateway.jar を /home/bubble-app/bubble-gateway にアップロードします (具体的なディレクトリ構造は次のとおりです)。 Gateway.sh スクリプトが実行されるので、bubble-gateway.jar を Docker イメージにして実行します。

ディレクトリ構造:

ここに画像の説明を挿入します

ファイルの例:

Dockerfile

FROM adoptopenjdk/openjdk11:jdk-11.0.8_10-alpine
# 复制文件到容器
ADD bubble-gateway.jar /bubble-gateway.jar
# 配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","-Duser.timezone=GMT+08 -XX:+HeapDumpOnOutOfMemoryError -Xms512m -Xmx512m","/bubble-gateway.jar"]

バブルゲートウェイ.sh

#!/bin/bash
server_name=bubble-gateway
server_port=81

echo $server_name
if [[ -n $(docker ps | grep $server_name) ]];then
	echo $server_name
	
	docker stop $server_name
	
	docker rm -f $server_name
	
	docker rmi -f $server_name
fi

docker build -t $server_name .

docker run --name $server_name -it --restart=always -v /etc/localtime:/etc/localtime:ro -d -p $server_port:$server_port $server_name
デプロイメントサーバーに接続する

これらを準備したら、Jenkins にビルドされた Jar パッケージをクラウド サーバーにアップロードさせる必要があります。

まず、リモートサーバーに接続するために、Jenkins に [Publish over SSH] プラグインをインストールする必要があります。

ここに画像の説明を挿入します

SSH キーを生成し、公開キーをサーバー (マイクロサービスがデプロイされている場所) に公開します。

Jenkins サーバーで次の操作を実行します。

SSHをインストールする

yum install -y openssl openssh-server

公開鍵と秘密鍵を生成する

ssh-keygen

Enterを押すだけです

ここに画像の説明を挿入します

[パスフレーズ] パスワードを設定するか、パスワードを追加せずに直接 Enter キーを押します。ここに[honey]などのパスワードを設定しました。

ここに画像の説明を挿入します

パスワードを認証する

ここに画像の説明を挿入します

ここに画像の説明を挿入します

キーのデフォルトのストレージ パス: /root/.ssh

ここに画像の説明を挿入します

このうち、id_rsa が秘密鍵、id_rsa.pub が公開鍵です。

公開キーをサーバー (マイクロサービスがデプロイされている場所) に発行します (root はリモート サーバーのログイン名で、@ の後にターゲット サーバーの IP が続きます)

ssh-copy-id [email protected]

ここに画像の説明を挿入します

パスワード不要の接続が成功したかどうかを確認するには、パスワードを入力せずに 47.102.152.222 にログインします。

ssh [email protected]

ここに画像の説明を挿入します

[システム構成]を入力します

ここに画像の説明を挿入します

[SSH経由で公開]を設定する

ここに画像の説明を挿入します

設定完了後、下の「設定のテスト」をクリックし、「成功」と表示されれば接続成功です。

【後ステップ】を設定する

ここに画像の説明を挿入します

構成【SSH経由でファイル送信またはコマンド実行】

ここに画像の説明を挿入します

ビルドタスク

バブルゲートウェイを構築する前に:

ここに画像の説明を挿入します

バブルゲートウェイの構築

ここに画像の説明を挿入します

ビルド結果:

bubble-gateway.jar ファイルが /home/bubble-app/bubble-gateway ディレクトリに正常にアップロードされ、bubble-gateway コンテナーが作成されて実行されました。

ここに画像の説明を挿入します

ファイアウォールを構成する

ここに画像の説明を挿入します

実行中のバブルゲートウェイプロジェクトにアクセスする

ここに画像の説明を挿入します

開発者がコードを指定されたブランチ (マスター) にプッシュ/マージすると、ビルドがトリガーされます。

これは、自動デプロイメントが成功したことを示しています。次に、Jenkins ビルドのトリガー方法を最適化する必要があります。指定されたブランチ (マスター ブランチなど) にコードをプッシュまたはマージするときにビルドをトリガーできるようにしたいと考えています。 Gitlab. この機能には Webhook を使用できます。

ここに画像の説明を挿入します

  1. 開発者はコードを指定されたブランチ (マスター) にプッシュ/マージします。
  2. Gitlab は Webhook を通じて Webhook リクエストを Jenkins に送信し、Jenkins はリクエストを受信した後にビルド タスクを開始します。
  3. Jenkins は Gitlab からコードをプルします。
  4. Jenkins は Nexus から Jar パッケージをプルします。
  5. Jenkins は、コンパイル/パッケージ化されたファイルまたは Jar パッケージを Nexus にアップロードします。
  6. Jenkins は、コンパイル/パッケージ化された Jar パッケージをデプロイメント サーバーの指定されたディレクトリにアップロードし、シェル スクリプトを実行して Jar パッケージを実行します。
ジェンキンスの構成

[Gitlab]プラグインをインストールする

ここに画像の説明を挿入します

[Gitlab]プラグインをインストールすると、以下のようなオプションが表示されます。

ここに画像の説明を挿入します

[http://192.168.102.130:8850/project/bubble-parent] は Webhook アドレスです。このアドレスは、Gitlab を構成するときに使用する必要があります。Gitlab がユーザーのマージ リクエストやその他の操作を受信すると、 Web フック: 自動化の目的を達成するため。

[詳細設定]をクリックして詳細を設定します。

ここに画像の説明を挿入します

[生成]をクリックしてセキュリティトークンを生成します。

ここに画像の説明を挿入します

GitLab を構成する

Webhook アドレスとセキュリティ トークンを入力します

ここに画像の説明を挿入します

[Webフックの追加]をクリックすると例外が発生しました

ここに画像の説明を挿入します

【理由】

セキュリティ上の理由から、Gitlab 10.6 以降のバージョンでは、デフォルトでは Webhook リクエストをローカル ネットワークに送信できませんが、デフォルト値は変更できます。

【解決】

ここに画像の説明を挿入します

テスト効果

再[Webフックの追加]が成功したら、Pushイベントを送信してテストします。

ここに画像の説明を挿入します

試験結果:

HTTP 200 (リクエストが正常に送信されたことを示します)

ここに画像の説明を挿入します

Jenkins はビルド タスクも開始します

ここに画像の説明を挿入します

補足構成

イベントは、開発者がマスター ブランチにプッシュ/マージした場合にのみ送信されます。

ここに画像の説明を挿入します

Jenkins は、master ブランチへのプッシュ/マージ リクエストを受信した場合にのみビルドをトリガーします。

ここに画像の説明を挿入します

全工程テスト

開発者がコードを Gitlab にプッシュする

ここに画像の説明を挿入します

ジェンキンスが構築を開始

ここに画像の説明を挿入します

このビルドの修正記録

ここに画像の説明を挿入します

Jenkins のビルドが成功しました

ここに画像の説明を挿入します

デプロイメントサーバーは Jar パッケージを受信すると、それを Docker イメージにして実行します。

ここに画像の説明を挿入します

ファイアウォールを構成する

ここに画像の説明を挿入します

しかし、訪問中にプロジェクトの起動が異常であることが判明し、エラーログからデータベース接続等の設定が一律に bubble-common に配置されており、bubble-common と bubble-auth が設定されていることが判明しました。パブリック依存関係は、bubble-common が構築される前のコードのままです。その後、プロジェクトの関係に注意を払い、上流と下流のプロジェクト関係を確立して、複数のプロジェクトを秩序だった方法で構築できるようにします。

ここに画像の説明を挿入します

bubble-auth を再構築すると、効果がわかります。

ここに画像の説明を挿入します

ビルドはすべてのタスクを完了します

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/sinat_41888963/article/details/129325285