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

推薦する

HTML タグのメタ概要、HTML5 のヘッド メタ属性の概要

序文metaはhtml言語のhead領域にある補助タグです。おそらく、これらのコードは不要だと思うで...

Zookeeperスタンドアロン環境とクラスタ環境の構築

1. 単一マシン環境の構築# 1.1 ダウンロードZookeeper の対応するバージョンをダウンロ...

Linux CentOS でスクリプトを定期的に実行するように設定する方法

多くの場合、サーバーでスクリプトを定期的に実行して操作をトリガーする必要があります。たとえば、Qin...

MySQL 5.7.15 のインストールと設定方法のグラフィック チュートリアル (Windows)

MySQL をインストールする必要があるため、インストール手順を以下のように記録します。 自分なり...

Reactフック入門チュートリアル

ステートフック例: 'react' から useState をインポートします。 関...

sysbenchツールによるMySQLデータベースのパフォーマンステストの実装方法

1. 背景Sysbench は、システムのハードウェア パフォーマンスをテストできるストレス テスト...

Reactは、読み込み、読み込み完了、読み込み失敗の3つの段階の原則分析を実装します。

最近ブログに書いたのですが、プロジェクトリストの中に写真がたくさんあり、最初は読み込みが遅いので、ス...

ウォーターフォールフローレイアウトを実装する3つの方法

序文今日、Xianyuを閲覧していたとき、各行の高さが同じではないことに気付きました。調べてみると、...

CentOS7 systemdにカスタムシステムサービスを追加する方法

システムド: CentOS 7のサービスsystemctlスクリプトは、/usr/lib/syste...

Linux で大きなファイルの内容を消去または削除する 5 つの方法

Linux ターミナルでファイルを操作しているときに、Linux コマンドライン エディターでファイ...

Vueは適切なスライドアウトレイヤーアニメーションを実装します

この記事では、適切なスライドアウトレイヤーアニメーションを実装するためのVueの具体的なコードを例と...

ウェブデザイナーのウェブデザイン学習経験とスキルのまとめ

会社の影響力が拡大し、製品が改良され続けるにつれて、関連するイメージデザインもそれに追いつき、徐々に...

HTML の類似タグと属性の違いの詳細な説明

【1】<i></i>タグと<em></em>タグ同じ...

ウェブデザインの発展と西洋建築の類似点は何でしょうか?

歴史は常に驚くほどうまく繰り返される。西洋建築とウェブデザインは、どちらも工学と芸術の組み合わせです...

Vueのカスタムディレクティブの詳細なガイド

目次1. カスタム指示とは何ですか? 2. 指示をカスタマイズする方法フック機能3. 応用シナリオ入...