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

推薦する

Centos に PHP7.4 と Nginx をインストールする方法

準備する1. 必要なインストールパッケージをダウンロードするhttps://www.php.net/...

MySQL Innodb インデックス メカニズムの詳細な紹介

1. インデックスとは何ですか?インデックスは、ストレージ エンジンがレコードをすばやく検索するため...

Spring環境を構成するためのDocker-composeの手順

最近、メンバーがテストできるようにプロジェクトをパッケージ化する必要がありますが、パッケージ化された...

React Hooksコンポーネント間で値を渡す方法の詳細な説明(tsを使用)

目次父から息子へ息子から父へクロスレベルコンポーネント(親から子孫)父から息子へpropsを通じて値...

MySQL統計の概要

MySQL は、SQL 解析とクエリ最適化のプロセスを通じて SQL を実行します。パーサーは SQ...

HTMLでは、div内のコンテンツが次のサイズを超えたときに自動的にスクロールバーが表示されるように設定します。

HTML ページでは、div 内のコンテンツが制限を超えた後に自動的にスクロール バーを表示する必要...

WeChatミニプログラムの基本チュートリアル:Echartの使用

序文まずは最終的な効果を見てみましょう。私が自分で作った小さなデモです。まずEChartsの公式サイ...

HTMLはシンプルで美しいログインページを作成します

まずは見てみましょう。 HTML ソースコード: XML/HTML コードコンテンツをクリップボード...

Tencent インタビュー: SQL ステートメントの実行が非常に遅くなる理由は何ですか? ---後悔シリーズは見ないで(推奨)

正直に言うと、この質問には MySQL のコア知識がかなり必要で、コンピュータ ネットワークの知識を...

包括的なウェブサイト評価ソリューション

<br />「XXXのウェブサイトを見てみませんか?」といった質問をされることもあります...

Linux で Jenkins プロジェクトを構築するプロセス (CentOS 7 を例に)

https://gitee.com/tengge1/ShadowEditor のデプロイメントを例...

GET POSTの違い

1. Get はサーバーからデータを取得するために使用され、Post はサーバーにデータを渡すために...

vitrualBox+ubuntu16.04 python3.6 最新チュートリアルと詳細な手順のインストール

最近ディープラーニングを学ぶためにUbuntu+Python 3.6バージョンを使う必要があるため、...

Dockerにlogstashをインストールする詳細な手順

docker-compose.yml を編集し、次のコンテンツを追加します。 バージョン: '...

Vueはドラッグアンドドロップを使用して構造ツリーを作成します

この記事の例では、ドラッグアンドドロップを使用して構造ツリーを作成するVueの具体的なコードを共有し...