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属性の自己理解

推薦する

CSS3を使用して背景画像の色を変更するさまざまな方法

CSS3 では画像の色を変更できます。これからは複数の絵をデザインする必要がなくなり、いつでも修正で...

MySQL 5.7.31 64 ビット無料インストール版チュートリアル図

1. ダウンロードダウンロードアドレス: https://dev.mysql.com/get/Dow...

VMware+centOS 8 で http プロトコルに基づく Git サービスを構築する方法

目次1. 原因2. デバイス情報3. 準備4. Apacheをインストールする5. gitを設定する...

MySQLからElasticsearchにデータを同期する方法の詳細な説明

目次1. 同期の原理2. ログスタッシュ入力JDBC 3. go-mysql-elasticsear...

nginx 設定ファイルパスとリソースファイルパスを表示する方法

nginx 設定ファイルのパスを表示する nginx -t 経由nginx -t コマンドの本来の機...

CentOS7 に Redis をインストールして設定する方法

導入Redis を詳しく説明する必要はありません。インストールと設定を始めましょう。インストールソー...

HTML における DTD の使用法の概要

DTD はマークアップの文法規則のセットです。これは XML 1.0 仕様の一部であり、HTML フ...

Linux マルチスレッドにおけるフォークとミューテックス ロック プロセスの例

目次質問: 1. 最初の試み2. 合理的な分析3. 問題解決(1) pthread_join()の使...

ElementUIテーブルのヘッダーアイコンにフローティングプロンプトを追加します。

この記事では主に、ElementUI テーブルのヘッダー アイコンにフローティング プロンプトを追加...

HTMLチェックボックス説明テキストをクリックして状態を選択/チェック解除します

Web 開発では、チェックボックスは小さく、ユーザーにとって操作があまり便利ではないため、ユーザーが...

MySQL のファントムリード問題を解決する方法

目次序文1. ファントムリーディングとは何ですか? 2. ファントムリーディングの問題点は何ですか?...

解決策 - BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 権限が不十分です

1) jdkファイルが保存されているフォルダパスを入力します私はここにいますusr/local/jd...

Google Recaptcha 認証を使用した Vue 実装例

最近のプロジェクトでは、Google ロボット認証を使用する必要があります。これには VPN が必要...

MySQL データベース SELECT クエリ式分析

データ管理の大部分は検索であり、SELECT はその大部分を占めています。 SELECT selec...