環境の準備1.ジェンキンス 上記の技術的な部分は前回の記事に書きました ここでは詳細なデモンストレーションはありません。この記事では主に、マイクロサービス プロジェクトのソース コードを変換 -> リモート リポジトリ 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. 画像を港の専用倉庫にプッシュします。ここでお金を引き出し、港に倉庫を作成する必要があります。 パイプライン構文を入力してハーバー構文を生成します 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 サーバーにコピーする必要があります。 /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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: アカウントとパスワードを記憶する機能を実現するVueの考え方とプロセス
>>: 背景画像の配置におけるbackground-position属性の自己理解
目次1. 穴に落ちる2. 無駄な努力3. 若さの衝動4. 希望の光5. 問題KO 6. 追記1. 穴...
CSS3 では画像の色を変更できます。これからは複数の絵をデザインする必要がなくなり、いつでも修正で...
1. ダウンロードダウンロードアドレス: https://dev.mysql.com/get/Dow...
目次1. 原因2. デバイス情報3. 準備4. Apacheをインストールする5. gitを設定する...
目次1. 同期の原理2. ログスタッシュ入力JDBC 3. go-mysql-elasticsear...
nginx 設定ファイルのパスを表示する nginx -t 経由nginx -t コマンドの本来の機...
導入Redis を詳しく説明する必要はありません。インストールと設定を始めましょう。インストールソー...
DTD はマークアップの文法規則のセットです。これは XML 1.0 仕様の一部であり、HTML フ...
目次質問: 1. 最初の試み2. 合理的な分析3. 問題解決(1) pthread_join()の使...
この記事では主に、ElementUI テーブルのヘッダー アイコンにフローティング プロンプトを追加...
Web 開発では、チェックボックスは小さく、ユーザーにとって操作があまり便利ではないため、ユーザーが...
目次序文1. ファントムリーディングとは何ですか? 2. ファントムリーディングの問題点は何ですか?...
1) jdkファイルが保存されているフォルダパスを入力します私はここにいますusr/local/jd...
最近のプロジェクトでは、Google ロボット認証を使用する必要があります。これには VPN が必要...
データ管理の大部分は検索であり、SELECT はその大部分を占めています。 SELECT selec...