Jenkinsによる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 プライベート サーバーにアップロードします。
- Jenkins は Gitlab からコードをプルします。
- Jenkins は Nexus から Jar パッケージをプルします。
- 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 からコードを取得してビルドできますが、ビルド後もコードの自動デプロイメントを実装する必要があります。
- Jenkins は Gitlab からコードをプルします。
- Jenkins は Nexus から Jar パッケージをプルします。
- Jenkins は、コンパイル/パッケージ化されたファイルまたは Jar パッケージを Nexus にアップロードします。
- 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 を使用できます。
- 開発者はコードを指定されたブランチ (マスター) にプッシュ/マージします。
- Gitlab は Webhook を通じて Webhook リクエストを Jenkins に送信し、Jenkins はリクエストを受信した後にビルド タスクを開始します。
- Jenkins は Gitlab からコードをプルします。
- Jenkins は Nexus から Jar パッケージをプルします。
- Jenkins は、コンパイル/パッケージ化されたファイルまたは Jar パッケージを Nexus にアップロードします。
- 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 を再構築すると、効果がわかります。
ビルドはすべてのタスクを完了します