Jenkinsはマイクロサービスをパッケージ化してDockerイメージを構築し、実行します。

Jenkinsはマイクロサービスをパッケージ化してDockerイメージを構築し、実行します。

環境の準備

1.ジェンキンス
2. GitLab
3.ソナーキューブ
4. 港
5.ドッカー
6. メイヴン
7. JDK1.8
8. マイクロサービスプロジェクト

上記の技術的な部分は前回の記事に書きました

ここでは詳細なデモンストレーションはありません。この記事では主に、マイクロサービス プロジェクトのソース コードを変換 -> リモート リポジトリ GitLab に送信 -> Jenkins が Gitlab からサーバーにコードをプル -> SonarQube コード レビュー -> Maven がコンパイルしてパッケージ化 -> Docker イメージをビルド -> プライベート Harbor イメージ リポジトリにプッシュ -> 他のサーバーにデプロイ、という流れで進めています。

始める

1. GitLabリモートリポジトリがマイクロサービスプロジェクトを作成する

ここに画像の説明を挿入

2. IDEAコードがGitlabにプッシュされる

ここに画像の説明を挿入

デフォルトのフォルダーは正しいので、変更する必要はありません。

ここに画像の説明を挿入

ローカルリポジトリを追加する

ここに画像の説明を挿入

ローカルリポジトリを送信する

ここに画像の説明を挿入

リモートリポジトリをプッシュする

ここに画像の説明を挿入

3.Jenkinsがパイプラインプロジェクトを作成する

ここに画像の説明を挿入

4. パラメータ化された構築

ここに画像の説明を挿入

5. リモートリポジトリのビルドスクリプトを取得する

ここに画像の説明を挿入

アプリケーション保存

6. リモートレビュースクリプト sonar-project.properties を記述する

ここに画像の説明を挿入

ビルドスクリプト

1. プルコード

stage('プルコード') {
      チェックアウト([$class: 'GitSCM', ブランチ: [[name:"*/${branch}"]], doGenerateSubmoduleConfigurations: false, 拡張機能: [], サブモジュール構成: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
   }

ここに画像の説明を挿入

ここに画像の説明を挿入

2. コードを確認する

ステージ('コードレビュー') {
            //現在の Jenkins の SonarQubeScanner ツールを定義します def scannerHome = tool 'SonarQube'
            //現在のJenkinsSonarQube環境を参照する withSonarQubeEnv('SonarQube') {
                 sh """
                         cd ${project_name}//これは定義されたオプションパラメータです ${scannerHome}/bin/sonar-scanner
                 「」
            }
   }

ここに画像の説明を挿入
ここに画像の説明を挿入

3. 共通モジュールをインストールする

 stage('共通のサブプロジェクトをコンパイル、インストール') {
      sh "mvn -f tensquare_common クリーンインストール"
   }

ここに画像の説明を挿入

サーバーを表示

ここに画像の説明を挿入

4. マイクロサービスをコンパイルしてパッケージ化する

 stage('マイクロサービスプロジェクトをコンパイル、パッケージ化') {
         sh "mvn -f ${project_name} クリーンパッケージ"
   }

ここに画像の説明を挿入

サーバーを表示

ここに画像の説明を挿入

これまでのビルドプロセス

ここに画像の説明を挿入

5. Dockerfileファイルを追加してDockerイメージプロジェクトをビルドします。

ここに画像の説明を挿入

#javaから:8
#openjdk:11-jdk-alpine から
openjdk:11より
引数 JAR_FILE
${JAR_FILE} app.jar をコピーする
エクスポーズ9001
エントリポイント ["java","-jar","/app.jar"]

各マイクロサービスプロジェクトにdockerfileプラグインを追加するMaven

			<プラグイン>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <バージョン>1.3.6</バージョン>
                <構成>
                    <リポジトリ>${project.artifactId}</リポジトリ>
                    <ビルド引数>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </構成>
            </プラグイン>

Jenkinsfile ファイルサービスのパッケージを変更し、「dockerfile:build」を追加して Docker イメージのビルドをトリガーします。

 stage('マイクロサービスプロジェクトをコンパイル、パッケージ化') {
         sh "mvn -f ${project_name} クリーンパッケージ dockerfile:build"
   }

そしてリモート倉庫にプッシュする

ジェンキンス再構築

ここに画像の説明を挿入

サーバーを表示

Docker イメージ

ここに画像の説明を挿入

イメージのビルドに成功しました

6. 画像のタグ付け

パブリックプロパティ

//ミラーバージョン番号 def tag = "latest"
//Harbor の URL アドレス def harbor_url = "192.168.0.188:9123"
//ミラーライブラリプロジェクト名 def harbor_project = "tensquare"
 stage('マイクロサービスプロジェクトをコンパイル、パッケージ化し、イメージをアップロードする') {
         // コンパイルしてパッケージ化 -- イメージをビルド sh "mvn -f ${project_name} clean package dockerfile:build"

         //イメージ名を定義します def imageName = "${project_name}:${tag}"

         // イメージにタグを付ける sh "docker tag ${imageName} ${harbor_url}/${harbor_project}/${imageName}"
   }

リモートサーバーにプッシュし、Jenkins をビルドしてサーバーイメージを表示する

ここに画像の説明を挿入

7. 画像を港の専用倉庫にプッシュします。ここでお金を引き出し、港に倉庫を作成する必要があります。
Jenkinsがハーバーユーザー認証情報を追加

ここに画像の説明を挿入

パイプライン構文を入力してハーバー構文を生成します

ここに画像の説明を挿入

stage('マイクロサービスプロジェクトをコンパイル、パッケージ化し、イメージをアップロードする') {
         // コンパイルしてパッケージ化 -- イメージをビルド sh "mvn -f ${project_name} clean package dockerfile:build"


         //イメージ名を定義します def imageName = "${project_name}:${tag}"

         // イメージにタグを付ける sh "docker tag ${imageName} ${harbor_url}/${harbor_project}/${imageName}"

         // 画像を Harbor にプッシュする
         withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
             //Harborにログイン
             sh "docker login -u ${ユーザー名} -p ${パスワード} ${harbor_url}"
             // イメージアップロード sh "docker push ${harbor_url}/${harbor_project}/${imageName}"
             sh 「エコー画像のアップロードが成功しました」
         }
   }

リモートウェアハウスをプッシュし、Jenkins リモートビルドを行い、プライベートウェアハウスにプッシュされたイメージを表示します。

ここに画像の説明を挿入

リモート プッシュ イメージが成功しました。 ! !

8. イメージをプルしてプログラムを起動します。イメージをプルしてプログラムをリモートで起動する必要があるため、まず Jenkins に Publish Over SSH プラグインをインストールして、シェル コマンドをリモートで送信する必要があります。

ここに画像の説明を挿入

プラグインの設定

ここに画像の説明を挿入

ここで注意すべき点は、2 つのサーバーが通信を確立し、ssh リモート接続を使用する必要があることです。つまり、Jenkins は ssh を使用して 188 サーバーをリモートで操作し、イメージをプルします。アプリケーションを起動するプロセスでは、Jenkins のホスト サーバーは公開キーと秘密キーを生成し、それらを 188 サーバーにコピーする必要があります。
1. sshディレクトリに切り替える

/root/.ssh をコピーします
プロンプトが表示されたら: bash: cd: .ssh: no such file or directory execute ssh hostname (自分のホスト名)

2. Jenkinsホストサーバー上で公開鍵と秘密鍵を生成するコマンドを実行する

ssh-keygen -t rsa

次に、次のものを比較します

ここに画像の説明を挿入

id_rsaは秘密鍵、id_rsa.pubは公開鍵です

3. 公開鍵id_rsa.pubを188サーバーにコピーする

sshコピーID 192.168.0.188

4. 188サーバーにコピーされたキーを確認する

ここに画像の説明を挿入

5. Jenkinsのsshリモート接続をテストする

ここに画像の説明を挿入

テスト成功

6. パイプライン構文ジェネレータを使用してsshコマンドを生成する

ここに画像の説明を挿入

Jenkinsfileにコピー

   //アプリケーションのデプロイメント sh "echo application deploy"
         sshPublisher(publishers: [sshPublisherDesc(configName: '188', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/data/Jenkins_shell/deploy.sh $harbor_url $harbor_project $project_name $tag $port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])


/data/Jenkins_shell/deploy.sh このパスは、Docker コンテナを操作するために使用されるスクリプト ファイルを指します。このスクリプトは以下に提供されています。 $harbor_url イメージのプライベート リポジトリ アドレス $harbor_project プライベート リポジトリ内のプロジェクト名 $project_name プロジェクト名 $tag プルするイメージのバージョン $port このパラメーターは、Jenkins ビルドでも提供する必要があります。これらのパラメーターは、このファイル内のパラメーターと 1 対 1 で対応しています。
#!/bin/sh
#外部パラメータを受け取る harbor_url=$1
港プロジェクト=$2
プロジェクト名=$3
タグ=$4
ポート=$5

イメージ名=$harbor_url/$harbor_project/$project_name:$tag

echo "$imageName"

#コンテナが存在するかどうかを確認し、存在する場合は削除します。containerId=`docker ps -a | grep -w ${project_name}:${tag} | awk '{print $1}'`
[ "$containerId" != "" ] の場合;
    #コンテナを停止する docker stop $containerId

    #コンテナを削除する docker rm $containerId
	
	echo "コンテナが正常に削除されました"
フィ

#イメージが存在するかどうかを照会し、存在する場合は削除します imageId=`docker images | grep -w $project_name | awk '{print $3}'`

[ "$imageId" != "" ] の場合;
      
    #イメージを削除する docker rmi -f $imageId
	
	echo "画像を削除しました"
フィ

# ハーバーにログイン
dockerログイン -u ユーザー -p 877425287User $harbor_url

# イメージをダウンロードする docker pull $imageName

# コンテナを起動します docker run -di -p $port:$port $imageName

echo "コンテナが正常に起動しました"

Jenkins入力を追加する

ここに画像の説明を挿入

コードを送信して構築を開始する

ここに画像の説明を挿入

成功を築く

ここに画像の説明を挿入

コードレビュー SonarQube

ここに画像の説明を挿入

ミラーリポジトリ Harbor

ここに画像の説明を挿入

188 リモートサーバーから取得したミラーイメージ

ここに画像の説明を挿入

コンテナの起動ステータスを確認する

ここに画像の説明を挿入

テストコンテナへのアクセス

ここに画像の説明を挿入

Jenkins でマイクロサービスをパッケージ化して Docker イメージをビルドして実行する方法についてはこれで終わりです。Jenkins のパッケージ化と Docker イメージのビルドの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Springboot docker jenkins でイメージを自動的にデプロイしてアップロードするための詳細な手順
  • Jenkins をベースに Docker イメージを構築する方法
  • Jenkins が Docker イメージをビルドする例

<<:  アカウントとパスワードを記憶する機能を実現するVueの考え方とプロセス

>>:  背景画像の配置におけるbackground-position属性の自己理解

推薦する

Docker クリーニングの一般的な方法と問題点

大規模な開発に Docker を使用する場合でも、クリーンアップ戦略がなければ、ディスクがすぐにいっ...

選択ドロップダウンメニューのテキストを左右にスクロールするように設定する

marquee タグを使用してフォントのスクロールを設定したいです。コードは次のように記述しましたが...

フォームにファイルをアップロードした後にアクションを保存するよう促す理由と解決策

jsonデータはhtml形式で返される必要がありますつまり、 response.setContent...

WebpackはTypeScriptコードをパッケージ化するためのスキャフォールディングを構築します

フォルダを作成するディレクトリ構造: dabaots npm init -yを初期化して packa...

Jupyter Notebook で JavaScript を実行する方法

その後、VSC で Jupyter Notebook を使用する方法も追加しました...アナコンダを...

WeChatミニプログラムQRコード生成ツール weapp-qrcode 詳細説明

WeChat ミニプログラム - QR コード ジェネレーターダウンロード: weapp-qrcod...

Nginx http を https にアップグレードする手順を完了する

httpとhttpsの違いは一部のウェブサイトでは、http を開くと、安全ではないというメッセージ...

ページ切り替え効果を実現するJSコード

この記事の例では、ページ切り替え効果を実現するためのJSコードの具体的なコードを参考までに共有してい...

Ubuntu 20.04 は Wi-Fi に接続します (2 つの方法)

最近Ubuntu 20.04をインストールしましたが、Wi-Fiに接続できず、Wi-Fiアイコンも表...

Vueのフロントエンドシステムとフロントエンドとバックエンドの分離の詳細な説明

目次概要フロントエンド知識システムフロントエンドの3つの要素プレゼンテーション層 (CSS)動作レイ...

Vueは物流タイムライン効果を実現します

この記事では、物流タイムライン効果を実現するためのVueの具体的なコードを例として紹介します。具体的...

Vue のクロスドメイン問題の処理と解決策の概要

ネットワークリクエストを送信すると、次の保存情報が表示されます。おめでとうございます。ドメインを越え...

React Contextの理解と応用についてお話ししましょう

目次序文React Context の初見コンテキストの使い方コンテキストを直接取得できるいくつかの...

MySQL では SQL ステートメントはどのように実行されますか?

目次1. MySQLアーキテクチャの分析1.1 コネクタ1.2 クエリキャッシュ1.3 アナライザー...

JS ES6 スプレッド演算子の魔法のような使い方

目次1. 属性を追加する2. 複数のオブジェクトを結合する3. オブジェクトのプロパティを削除する4...