banner
云野阁

云野阁

闲云野鹤,八方逍遥

Jenkinsの知識整理

🔜Jenkinsとは?🔚

Jenkins は、Java で開発されたオープンソースの CI&CD ソフトウェアで、ソフトウェアのビルド、テスト、デプロイなどのさまざまなタスクを自動化するために使用されます。Jenkins は、さまざまなインストール方法を提供し、1000 以上のプラグインを提供して、あらゆるプロジェクトのニーズに応えます。

Jenkins の特徴:

  • オープンソースの Java 言語で開発された継続的インテグレーションツールで、継続的インテグレーションと継続的デプロイをサポート。
  • インストールとデプロイの設定が簡単:yum を使用してインストールするか、war パッケージをダウンロードし、docker コンテナなどを通じて迅速にインストールとデプロイを実現し、Web インターフェースでの設定管理が容易。
  • メッセージ通知とテストレポート:RSS/E-mail を統合し、RSS を通じてビルド結果を公開したり、ビルドが完了したときに E メールで通知したり、JUnit/TestNG テストレポートを生成。
  • 分散ビルド:Jenkins は複数のコンピュータで同時にビルド / テストを行うことをサポート。
  • ファイル識別:Jenkins はどのビルドがどの jar を生成したか、どのビルドがどのバージョンの jar を使用したかを追跡できます。
  • 豊富なプラグインサポート:拡張プラグインをサポートし、git、svn、maven、docker など、自分のチームに適したツールを開発できます。

本文では GitLab+Jenkins+Tomcat を使用して CI/CD プロセスを構築します。

ホスト計画#

ホスト名ip必要なソフトウェア用途
121192.168.1.121GitLab-12.4.2コードホスティング
124192.168.1.124Jenkins、JDK-21、Maven-3.9.9、
Git、SonarQube
Jenkins 継続的インテグレーション
125192.168.1.125JDK-1.8、Tomcat-8.5リリーステスト

サーバーのオペレーティングシステムは centos7.9 です。

デプロイ手順#

GitLab のデプロイ#

GitLab のインストール#

依存関係をインストール

yum -y install policycoreutils-python policycoreutils postfix

gitlab をダウンロードしてインストール

#gitlabインストールパッケージをダウンロード
curl -O  http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.4.2-ce.0.el7.x86_64.rpm
#gitlabをインストール
rpm -i gitlab-ce-12.4.2-ce.0.el7.x86_64.rpm

gitlab のデフォルトアクセスポートを変更

vi /etc/gitlab/gitlab.rb

#デフォルトポート80を82に変更
external_url "http://192.168.1.121:82"
nginx['listen_port'] = 82

設定を再読み込みし、gitlab を起動

gitlab-ctl reconfigure
gitlab-ctl restart

ファイアウォールポリシーを設定

firewall-cmd --add-port=82/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all

ブラウザにhttp://192.168.1.121:82 / を入力し、root ユーザーのパスワードを変更し、root ユーザーで gitlab にログインします。

GitLab の管理#

(1)グループを作成

管理者 root を使用してグループを作成します。1 つのグループには複数のプロジェクトブランチが含まれ、開発者をグループに追加して権限を設定できます。異なるグループは会社の異なる開発プロジェクトやサービスモジュールを表し、異なる開発者を追加することで開発者の権限管理を実現できます。

(2)プロジェクトを作成

(3)ユーザーを作成

管理センター - 概要 - ユーザーで新しいユーザーtest1を作成し、パスワードを設定し、ユーザーを先ほど作成したプロジェクトに追加します。

GitLab のユーザーはグループ内で 5 種類の異なる権限を持っています:

  • ゲスト:issue を作成し、コメントを投稿できますが、リポジトリの読み書きはできません。
  • レポーター:コードをクローンできますが、コミットはできません。QA、PM がこの権限を付与できます。
  • 開発者:コードをクローン、開発、コミット、push できます。通常の開発者がこの権限を付与できます。
  • メンテナ:プロジェクトを作成、タグを追加、ブランチを保護、プロジェクトメンバーを追加、プロジェクトを編集できます。コア開発者がこの権限を付与できます。
  • オーナー:プロジェクトのアクセス権限 Visibility Level を設定、プロジェクトを削除、プロジェクトを移行、グループメンバーを管理できます。グループリーダーがこの権限を付与できます。

プロジェクトコードをアップロード#

idea を使用して java プロジェクトを作成し、gitlab リポジトリにアップロードします。

本文で使用する java プロジェクトコードは、bilibili の up 主、'' 涣沷 a 靑惷 '' からのもので、原文リンクは: https://www.yuque.com/huanfqc/jenkins/jenkins です。

java コードのアドレスは: https://share.feijipan.com/s/qdEO7czl

プロジェクトを idea にインポートし、gitlab 関連の設定を行い、コードをプッシュします。具体的な手順は上記の原文リンクを参照してください。

Jenkins のデプロイ#

jenkins-2.19 * バージョンをインストールする際に、中国語プラグインが正常にインストールできませんでした。本記事で使用する jdk は jdk-21、jenkins は 2.492.3 で、いずれも rpm 方式でインストールされています。

(1)jdk をインストール

yum install -y wget && wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm
rpm -ivh jdk-21_linux-x64_bin.rpm
#バージョンを確認
java -version

(2)Jenkins をインストール

#jenkinsをダウンロード
curl -O https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.492.3-1.1.noarch.rpm
#インストール
rpm -ivh jenkins-2.492.3-1.1.noarch.rpm

(3)jenkins の設定ファイルを変更

vi /etc/sysconfig/jenkins
#デフォルトユーザーをrootに変更
JENKINS_USER="root"
#デフォルトポートを8888に変更
JENKINS_PORT=8888

(4)ファイアウォールポリシーを設定し、jenkins を起動

firewall-cmd --add-port=8888/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
#jenkinsを起動
systemctl daemon-reload
systemctl start jenkins
systemctl enable jenkins

(5)jenkins の admin 初期パスワードを確認

cat /var/lib/jenkins/secrets/initialAdminPassword

(6)ブラウザにhttp://192.168.1.124:8888 / を入力し、admin 初期パスワードを入力します。

(7)プラグインを選択してインストールをクリックし、なしを選択してプラグインのインストールをスキップし、後で再構成するための国内ソースの準備をします。

1

(8)ガイドに従って jenkins のインストールを完了します。

国内プラグインソースの設定#

(1)左側のサイドバーから Jenkins -Manage Jenkins-Manage Plugins を選択し、Available を選択して、プラグイン関連ファイルの読み込みを待ちます。

(2)プラグインのディレクトリに入り、アドレスを国内ソースに変更します。

cd /var/lib/jenkins/updates && ll
sed -i 's|http://updates.jenkins-ci.org/download|https://mirrors.tuna.tsinghua.edu.cn/jenkins|g' default.json
sed -i 's|http://www.google.com|https://www.baidu.com|g' default.json

(3)jenkins にアクセスし、左側のサイドバーから Jenkins -Manage Jenkins-Manage Plugins を選択し、Advanced を選択して Update Site をhttps://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json(またはhttps://mirrors.huaweicloud.com/jenkins/updates/update-center.json)に変更し、保存します。ブラウザにhttp://192.168.1.124:8888/restartを入力し、クリックして jenkins を再起動します。

中国語の設定#

中国語プラグインをインストールし、左側のサイドバーから Jenkins -Manage Jenkins-Manage Plugins を選択し、Advanced を選択してchineseを検索し、プラグインにチェックを入れてダウンロードして再起動します。

ユーザー権限の管理#

Role-based Authorization Strategyプラグインをインストールしてユーザー権限を管理します。インストールが完了したら(新しいバージョンの jenkins)、Manage Jenkins-Security を選択し、認可ポリシーを Role-Based Strategy に設定します。Manage Jenkins-Manage and Assign Roles を選択して、役割の作成と割り当てを管理します。

認証情報管理#

(1)Credentials Bindingプラグインをインストールして認証情報を管理します。

認証情報の種類:

  • Username with password:ユーザー名とパスワード
  • SSH Username with private key:SSH ユーザーとキーを使用
  • Secret file:秘密にする必要があるテキストファイルで、使用時に Jenkins がファイルを一時ディレクトリにコピーし、ファイルパスを変数に設定します。ビルド終了後、コピーされた Secret file は削除されます。
  • Secret text:保存する必要がある暗号化されたテキスト文字列(例:DingTalk ロボットや Github の API トークン)
  • Certificate:証明書ファイルをアップロードする方法

一般的に使用される認証情報の種類は:Username with password(ユーザー名とパスワード)と SSH Username with private key(SSH キー)です。

(2)gitプラグインをインストールし、サーバーに git をダウンロードします。

yum -y install git
パスワード認証情報#

(1)jenkins プロジェクトとパスワード認証情報を作成します。Manage Jenkins-Credentials を選択し、全体-Add Credentialsをクリックして gitlab ユーザー test1 のユーザー名とパスワードを追加し、認証情報を作成します。

2

(2)新しいタスクtest01を作成し、設定をクリックしてソース管理を Git に設定し、gitlab のプロジェクトリポジトリアドレス(http で始まる)を入力し、test1 の認証情報を選択して保存します。

(3)test01 に入って Build Now をクリックし、タスクのビルドが完了した後、コンソール出力をクリックして詳細情報を確認します。

3

4

SSH キー認証情報#

(1)jenkins サーバーで SSH キーを作成します。

ssh-keygen -t rsa
#公開鍵の内容を確認
cat ~/.ssh/id_rsa.pub
# SSH接続をテスト
ssh -T [email protected]
# gitlabホストがあるか確認し、なければSSH認証情報を使用する際にエラーが発生します
cat ~/.ssh/known_hosts

(2)管理者アカウントで Gitlab にログインし、設定-SSHキーを選択して SSH 公開鍵の内容を入力し、保存します。

(3)サーバーでcat ~/.ssh/id_rsaコマンドを使用して秘密鍵の内容を確認します。jenkins で SSH キー認証情報を作成し、ユーザー名 root と SSH 秘密鍵の内容を入力して保存します。

5

(4)新しいタスクtest02を作成し、設定をクリックしてソース管理を Git に設定し、gitlab のプロジェクトリポジトリアドレス(git で始まる)を入力し、SSH 認証情報を選択して保存します。

(5)test02 に入って Build Now をクリックし、タスクのビルドが完了した後、コンソール出力をクリックして詳細情報を確認します。

6

Maven のインストール#

(1)Maven をダウンロードしてインストール

curl -O https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz
#ストレージディレクトリを作成
mkdir -p /opt/maven
tar -vxzf apache-maven-3.9.9-bin.tar.gz -C /opt/maven/
#環境変数を設定し、環境を有効にします
echo "
export MAVEN_HOME=/opt/maven/apache-maven-3.9.9
export PATH=\$PATH:\$MAVEN_HOME/bin" >> /etc/profile
source /etc/profile
#mavenのバージョンを確認
mvn -v

(2)jenkins と maven の関連付けを設定

Manage Jenkins-Tools でJDKインストールMavenインストールを設定し、それぞれのインストールパスを設定します。

8

Manage Jenkins-System - 全体のプロパティで、3 つの環境変数を追加します。

7

(3)Maven のローカルリポジトリの位置を変更

#ローカルリポジトリを作成
mkdir -p /data/jenkins/repo
#Mavenの設定ファイルを変更
vi /opt/maven/apache-maven-3.9.9/conf/settings.xml
#<localRepository>/path/to/local/repo</localRepository>を次のように変更
  <localRepository>/data/jenkins/repo</localRepository>
  
#<id>maven-default-http-blocker</id>があるミラーの後にAliyunミラーソースを追加
#    <mirror>
#      <id>maven-default-http-blocker</id>
#      <mirrorOf>external:http:*</mirrorOf>
#      <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
#      <url>http://0.0.0.0/</url>
#      <blocked>true</blocked>
#    </mirror>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
      <mirrorOf>central</mirrorOf>
    </mirror>

(4)Maven の設定をテスト

jenkins でtest02タスクを選択し、設定 - 環境 - ビルドステップで、Execute shell を選択し、コマンドmvn clean packageを入力し、保存後、Build Now をクリックしてタスクのビルドが完了した後、コンソール出力をクリックして詳細情報を確認します。

9

10

この時、サーバー上の test02 タスクディレクトリにtargetディレクトリが新たに追加されます。

[root@124 workspace]# ls
test01 test01@tmp test02 test02@tmp
[root@124 workspace]# cd test01
[root@124 test01]# ls
pom.xml src
[root@124 test01]# cd ..
[root@124 workspace]# ls
test01 test01@tmp test02 test02@tmp
[root@124 workspace]# cd test02
[root@124 test02]# ls
pom.xml src target
[root@124 test02]# pwd
/var/lib/jenkins/workspace/test02
[root@124 test02]#

Tomcat のインストール#

jdk-1.8 と tomcat-9 をダウンロード

yum install -y java-1.8.0-openjdk*
curl -O https://mirrors.huaweicloud.com/apache/tomcat/tomcat-9/v9.0.104/bin/apache-tomcat-9.0.104.tar.gz
#ストレージディレクトリを作成
mkdir -p /opt/tomcat/
#解凍
tar -zxvf apache-tomcat-9.0.104.tar.gz -C /opt/tomcat/
#tomcatを起動
/opt/tomcat/apache-tomcat-9.0.104/bin/startup.sh

ファイアウォールポリシーを設定

firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all

ブラウザでhttp://192.168.1.125:8080/にアクセスします。

11

tomcat のユーザー役割を設定

vi  /opt/tomcat/apache-tomcat-9.0.104/conf/tomcat-users.xml

<!--tomcat-usersタグの下に以下の内容を追加 -->

<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>

tomcat のリモートアクセスアドレス範囲を設定

vi /opt/tomcat/apache-tomcat-9.0.104/webapps/manager/META-INF/context.xml
<!-- 以下の内容をコメントアウト -->
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

tomcat を再起動し、ユーザー名とパスワードを入力してアクセスします。

#停止
/opt/tomcat/apache-tomcat-9.0.104/bin/shutdown.sh
#起動
/opt/tomcat/apache-tomcat-9.0.104/bin/startup.sh

Jenkins でプロジェクトをビルド#

Jenkins で自動ビルドするプロジェクトのタイプは多く、一般的には以下の 3 つがあります:

  • 自由形式ソフトウェアプロジェクト(FreeStyle Project)
  • Maven プロジェクト(Maven Project)
  • パイプラインプロジェクト(Pipeline Project)

本文でビルドプロジェクトに使用する war パッケージは、bilibili の up 主、'' 涣沷 a 靑惷 '' からのもので、原文リンクは: https://www.yuque.com/huanfqc/jenkins/jenkins です。

war パッケージプロジェクトコードのアドレスは:https://share.feijipan.com/s/BWEO9Jad、war パッケージのビルド具体プロセスは原文を参照してください。

Jenkins で自由形式プロジェクトをビルド#

(1)Deploy to containerプラグインをインストール

(2)新しいプロジェクト freestyle_demo を作成し、設定して gitlab の test_war コードをプルします。このプロセスには《Jenkins のデプロイ》の手順が含まれ、ビルド後の操作も必要です。具体的には以下の図のようになります。

12

(3)設定を保存した後、Build Now をクリックし、タスクのビルドが完了した後、tomcat にアクセスすると/websocketChat-1.0-SNAPSHOT仮想ディレクトリが表示されます。

13

Jenkins で Maven プロジェクトをビルド#

(1)Maven Integrationプラグインをインストール

(2)新しいプロジェクト maven-demo を作成し、設定して gitlab の test_war コードをプルします。このプロセスには《Jenkins で自由形式プロジェクトをビルド》の手順が含まれ、ビルド時に変更が必要です。具体的には以下の図のようになります。

14

ビルド時にエラーが発生した場合は、以前に設定した Aliyun ミラーアドレスを https に変更してください。

(3)設定を保存した後、Build Now をクリックし、タスクのビルドが完了した後、tomcat にアクセスすると/websocketChat-1.0-SNAPSHOT仮想ディレクトリが表示されます。

Jenkins で Pipeline パイプラインプロジェクトをビルド#

Pipeline は、簡単に言えば、Jenkins 上で動作するワークフローフレームワークで、元々単一または複数のノードで独立して実行されるタスクを接続し、単一のタスクでは実現が難しい複雑なプロセスの編成と可視化を実現します。

Jenkins Pipeline を作成するにはどうすればよいでしょうか?

  • Pipeline スクリプトは Groovy 言語で実装されています。

  • Pipeline は 2 種類の構文をサポートします:Declarative(宣言型)と Scripted Pipeline(スクリプト型)構文。

  • Pipeline には 2 つの作成方法があります:Jenkins の Web UI インターフェースに直接スクリプトを入力するか、プロジェクトソースコードリポジトリに Jenkinsfile スクリプトファイルを作成して配置します(一般的には Jenkins で直接ソースコード管理(SCM)から Jenkinsfile Pipeline を読み込む方法を推奨します)。

Jenkins の Web UI で Pipeline スクリプトを作成してプロジェクトを公開#

(1)Pipeline プラグインをインストール

(2)新しいタスク Pipeline-demo を作成し、宣言型構文を使用して Jenkins の Web UI で Pipeline スクリプトを作成します。コードをプルし、コンパイルビルドし、プロジェクトを公開します。

Pipeline-demo の設定画面で、ビルドトリガー - パイプラインを選択し、スクリプトテンプレート Hello Word を選択します。

15

パイプライン構文をクリックし、スニペットジェネレーターでcheckout:Check out from version controlを選択し、ガイドに従ってプロジェクトアドレスと認証情報を入力し、パイプラインスクリプトを生成します。コードをプルするスクリプトを修正されたテンプレートに貼り付けます。

スニペットジェネレーターでsh:Shell Scriptを選択し、コンパイルコマンドを入力し、パイプラインスクリプトを生成し、修正されたテンプレートにスクリプトを貼り付けます。

スニペットジェネレーターでdeploy:Deploy war/ear to a containerを選択し、ガイドに従って入力し、パイプラインスクリプトを生成し、修正されたテンプレートにスクリプトを貼り付けます。

pipeline {
    agent any

    stages {
        stage('コードをプル') {
            steps {
                checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'fbf87557-40b6-468a-91c5-2cfa1b2e33e8', url: 'http://192.168.1.121:82/test/test_war_demo.git']])
            }
        }
        stage('コンパイルビルド') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('プロジェクトを公開') {
            steps {
                deploy adapters: [tomcat9(credentialsId: '4d9b76aa-078c-462b-81f1-33fe1d9c971c', path: '', url: 'http://192.168.1.125:8080/')], contextPath: null, war: 'target/*.war'
            }
        }
    }
}

(3)設定を保存した後、Build Now をクリックし、タスクのビルドが完了した後、tomcat にアクセスすると/websocketChat-1.0-SNAPSHOT仮想ディレクトリが表示されます。

Jenkinsfile スクリプトを使用してプロジェクトを公開#

(1)idea のプロジェクトディレクトリで、New-File を選択し、Jenkinsfile ファイルを作成し、Pipeline スクリプトの内容を貼り付けて、コードと一緒にプロジェクトリポジトリに公開します。

16

17

(2)タスク Pipeline-demo の設定画面で、ビルドトリガー - パイプラインを選択し、内容を定義してPipeline script from SCM-Gitを選択し、プロジェクトアドレスと認証情報を入力し、スクリプトパスをJenkinsfileとします。

18

(3)設定を保存した後、Build Now をクリックし、タスクのビルドが完了した後、tomcat にアクセスすると/websocketChat-1.0-SNAPSHOT仮想ディレクトリが表示されます。

一般的なビルドトリガー#

Jenkins には 4 種類のビルドトリガーが組み込まれています:

  • リモートビルドをトリガー

  • 他のプロジェクトのビルド後にトリガー(Build after other projects are built)

  • 定期ビルド(Build periodically)

    定期的な文字列は左から右に分:分 時 日 月 週

    定期的な式の例:

    30 分ごとにビルド:H は形参を表します

    H/30 * * * *

    2 時間ごとにビルド:

    H H/2 * * *

    毎日 8 時、12 時、22 時に、1 日 3 回ビルド:(複数の時間点はカンマで区切ります)

    0 8,12,22 * * *

  • SCM をポーリング(Poll SCM)

SCM をポーリングすることは、指定された時間にローカルコードリポジトリのコードに変更があるかどうかをスキャンし、コードに変更があればプロジェクトビルドをトリガーします。

(1)リモートビルドをトリガー

タスク Pipeline-demo の設定画面で、ビルドトリガー-リモートビルドをトリガー(例:スクリプトを使用)を選択し、カスタム認証トークンをtestに設定し、設定を保存します。ブラウザでアクセス:

jenkins アドレス /job/Pipeline-demo/build?token=TOKEN_NAME

http://192.168.1.124:8888/job/Pipeline-demo/build?token=test にアクセスすると、タスクの状態がビルドを開始したことが表示されます。

(2)他のプロジェクトのビルド後にトリガー(Build after other projects are built)

複数のタスクを順番に実行する必要がある場合に使用できます。たとえば、freestyle_demoタスクを実行した後にPipeline-demoを実行したい場合、タスク Pipeline-demo の設定画面で、ビルドトリガー-Build after other projects are builtを選択し、freestyle_demoを入力し、ビルドが安定しているときのみトリガーを選択して設定を保存します。freestyle_demo タスクのビルドが完了した後、freestyle_demo がビルドを開始します。

(3)定期ビルド(Build periodically)

タスク Pipeline-demo の設定画面で、ビルドトリガー-Build periodicallyを選択し、*/1 * * * *(1 分ごと)を設定し、設定を保存します。freestyle_demo タスクは 1 分ごとにビルドされます。

(4)SCM をポーリング(Poll SCM)

SCM をポーリングすることも時間周期を設定する必要がありますが、定期ビルドとは異なり、時間周期内にコードリポジトリに変更がない場合、タスクビルドは行われません。たとえば、タスク Pipeline-demo の設定画面で、ビルドトリガー-Poll SCMを選択し、*/1 * * * *(1 分ごと)を設定し、設定を保存します。その後の 1 分間にコードが変更された場合、Pipeline-demo タスクがビルドされます。逆に、コードが変更されるまでの 1 分間の周期内ではビルドされません。

Git hook ビルドトリガー(一般的)#

GitLab にコード変更が発生した場合、ビルドリクエストが Jenkins に送信され、Jenkins がリクエストを受信した後、ビルドをトリガーします。

(1)GitLab プラグインと GitLab Hook プラグインをインストールします(新しいバージョンには GitLab Hook プラグインが付属しています)。

(2)Jenkins のタスク Pipeline-demo の設定画面で、ビルドトリガー-GitLabにプッシュされた変更時にビルドを選択し、GitLab webhook URL: http://192.168.1.124:8888/project/Pipeline-demo を入力します。以下の表のオプションが表示されるので、デフォルトを選択します。

イベントタイプトリガー条件
Push Eventsコードがブランチまたはタグにプッシュされたとき、または新しいブランチが作成されたとき。
Push on Branch Deleteブランチが削除されたとき。
Opened Merge Request新しいマージリクエストが作成されたときにトリガー。
New Commits in MR既存の MR に新しいコミットがプッシュされたときにトリガー(MR を更新)。
Accepted (Merged) MRマージリクエストがターゲットブランチ(例:main)にマージされたときにトリガー。
Closed MRマージリクエストが閉じられたとき(未マージ)にトリガー。

(3)Jenkins で Manage Jenkins-System-GitLab を選択し、/projectエンドポイントの認証を無効にします。設定を保存します。

(4)GitLab の管理者アカウントで管理センター - 設定 - ネットワーク - 外部リクエストでAllow requests to the local network from web hooks and servicesを選択し、設定を保存します。

(5)GitLab のプロジェクトリポジトリで設定 - 統合を選択し、webhook URL を入力し、デフォルト設定を選択して保存します。生成された Webhook の右側で、Test-Push events を選択し、Hook executed successfully: HTTP 200が表示されれば成功です。

パラメータ化ビルド#

(1)ソースコード内にブランチ v1 を作成し、Jenkinsfile スクリプト内のブランチ名を変更し、コードを gitlab にコミットします。

変更前: checkout scmGit (branches: [[name: '*/master']]

変更後:checkout scmGit (branches: [[name: '*/${branch}']]

(2)Jenkins のタスク Pipeline-demo の設定画面で、このプロジェクトはパラメータ化されています-文字列パラメータを選択し、具体的な設定は以下の図のようになります。

19

(3)設定を保存し、タスク Pipeline-demo 画面でBuild with Parametersを選択し、ブランチ名を入力して Build をクリックし、ビルドを実行します。

メールサーバーの設定#

(1)Email Extension TemplateVersion プラグインをインストール

(2)Manage Jenkins-Credentials を選択し、全体-Add Credentialsをクリックしてメールサーバーのパスワード認証情報を作成します。アカウントはメールアドレス、パスワードは取得したメールの認証コードです。

(3)Systemを選択し、Jenkins Location- システム管理者メールアドレスに登録メールを入力し、Extended E-mail Notificationで登録メールとポートを入力し、詳細をクリックしてパスワード認証情報を選択し、Use SSLにチェックを入れ、Default user e-mail suffixにメールのサフィックス、Default Content TypeHTML (text/html)に設定し、Default Recipientsに登録メールを入力し、メール通知部分に SMTP サーバーとユーザーのデフォルトメールサフィックスを入力し、詳細を完了させ、テストメールを送信して設定をテストにチェックを入れてメールサーバーをテストします。

(4)メールサーバーテンプレートを作成

プロジェクトのルートディレクトリに email.html テンプレートを作成します。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}回ビルドログ</title>

</head>

<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
      offset="0">
<table width="95%" cellpadding="0" cellspacing="0"
       style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
    <tr>
        <td>(このメールはプログラムによって自動的に送信されたものです。返信しないでください!)</td>

    </tr>

    <tr>
        <td><h2>
                <font color="#0000FF">ビルド結果 - ${BUILD_STATUS}</font>

            </h2></td>

    </tr>

    <tr>
        <td><br />
            <b><font color="#0B610B">ビルド情報</font></b>

            <hr size="2" width="100%" align="center" /></td>

    </tr>

    <tr>
        <td>
            <ul>
                <li>プロジェクト名&nbsp;&nbsp;${PROJECT_NAME}</li>

                <li>ビルド番号&nbsp;&nbsp;第${BUILD_NUMBER}回ビルド</li>

                <li>トリガー理由:&nbsp;${CAUSE}</li>

                <li>ビルドログ:&nbsp;<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>

                <li>ビルド&nbsp;&nbsp;Url&nbsp;&nbsp;<a href="${BUILD_URL}">${BUILD_URL}</a></li>

                <li>作業ディレクトリ&nbsp;&nbsp;<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>

                <li>プロジェクト&nbsp;&nbsp;Url&nbsp;&nbsp;<a href="${PROJECT_URL}">${PROJECT_URL}</a></li>

            </ul>

        </td>

    </tr>

    <tr>
        <td><b><font color="#0B610B">前回の成功したビルドからの変更:</font></b>

            <hr size="2" width="100%" align="center" /></td>

    </tr>

    <tr>
        <td>
            <ul>
                <li>履歴の変更記録 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>

            </ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="ビルド #%nの変更:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat="&nbsp;&nbsp;&nbsp;&nbsp;%p"}
        </td>

    </tr>

    <tr>
        <td><b>失敗したテスト結果</b>

            <hr size="2" width="100%" align="center" /></td>

    </tr>

    <tr>
        <td><pre
                    style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre>

            <br /></td>

    </tr>

    <tr>
        <td><b><font color="#0B610B">ビルドログ (最後の100行):</font></b>

            <hr size="2" width="100%" align="center" /></td>

    </tr>

    <tr>
        <td><textarea cols="80" rows="30" readonly="readonly"
                      style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea>

        </td>

    </tr>

</table>

</body>

</html>

(5)Jenkinsfile ファイルを変更し、stages と同じレベルに post 部分を追加して、ビルド後にメールを送信します。

pipeline {
    agent any

    stages {
        stage('コードをプル') {
            steps {
                checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'fbf87557-40b6-468a-91c5-2cfa1b2e33e8', url: 'http://192.168.1.121:82/test/test_war_demo.git']])
            }
        }
        stage('コンパイルビルド') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('プロジェクトを公開') {
            steps {
                deploy adapters: [tomcat9(credentialsId: '4d9b76aa-078c-462b-81f1-33fe1d9c971c', path: '', url: 'http://192.168.1.125:8080/')], contextPath: null, war: 'target/*.war'
            }
        }
    }
    post {
        always {
            emailext(
                subject: 'ビルド通知:${PROJECT_NAME} - ビルド # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
                body: '${FILE,path="email.html"}',
                to: 'メールアドレス1,メールアドレス2'
            )
        }
    }
}

SonarQube のインストール#

Jenkins と SonarQube を統合してコードレビューを行います。

SonarQube7.9 からは mysql をサポートしなくなりました。SonarQube7.8 のインストールは mysql >=5.6 && <8.0 をサポートしています。

(1)SonarQube をインストールする前に mysql データベースをインストールする必要があります。

#mysql5.7のyumリポジトリを設定
vi /etc/yum.repos.d/mysql-community.repo

[mysql-connectors-community]
name=MySQL Connectors Community
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-connectors-community-el7-$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

[mysql-tools-community]
name=MySQL Tools Community
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-tools-community-el7-$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

[mysql-5.7-community]
name=MySQL 5.7 Community Server
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql-2022


#mysqlをインストール
yum -y install mysql-server
#バージョンを確認
mysql -V
systemctl start mysqld
systemctl enable mysqld
# MySQLの初期パスワードを確認
grep "password" /var/log/mysqld.log
# MySQLのセキュリティ設定
mysql_secure_installation
#ガイドに従って設定を完了した後、ログインしてデータベースを作成
mysql -uroot -p
create database sonar;
#データベースを確認
show databases;

(2)SonarQube をインストール

#システム関連パラメータを設定
echo "vm.max_map_count=524288
fs.file-max=131072" >> /etc/sysctl.conf
sysctl -p

#依存ツールをダウンロード
yum install -y unzip
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.8.zip
mkdir -p /opt/sonar
unzip -q sonarqube-7.8.zip -d /opt/sonar
#ユーザーを作成
useradd sonar
passwd sonar
#sonarqubeファイルの権限を変更
chown -R sonar:sonar /opt/sonar/sonarqube-7.8

(3)confディレクトリ内のsonar.properties設定ファイルを変更

sonar.jdbc.username=root
sonar.jdbc.password=データベースパスワード
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

(4)confディレクトリ内のwrapper.confの jdk-1.8 のパスを変更

wrapper.java.command=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/bin/java

(5)bin/linux-x86-64/ディレクトリに入り、sonar ユーザーを使用して sonarqube を起動します。

su sonar
./sonar.sh start
#起動ログを確認
tail ../../logs/sonar.log

デフォルトアカウントでログインします。アカウントとパスワードは両方とも admin です。

(6)sonarqube にログインした後、Administration - Security- Global Permissionsを選択し、admin にAdminister SystemAdministerExecute AnalysisCreate権限をチェックします。右上のアバターのドロップダウンボックスを選択し、My Account - Securityを選択して、トークン名を自由に入力し、トークンを作成します。

Jenkins と sonarqube の統合設定#

(1)Jenkins でSonarQube Scannerプラグインをインストールし、インストールが完了したら、Manage Jenkins -Tools-SonarQube Scannerのインストールを選択し、SonarQube Scannerを追加します。名前を入力し、バージョンをSonarQube Scanner 4.2.0.1873に選択し、保存します。

SonarQube 7.8Sonar-Scanner 4.2 に対応しています。

SonarQube 8.9 LTSSonar-Scanner 4.6 に対応しています。

(2)Jenkins で SonarQube のトークン認証情報を設定します。タイプをSecret textに設定し、トークンを入力して作成します。

(3)Jenkins で System-SonarQube installations を選択し、SonarQubeを追加をクリックして SonarQube のアドレスを入力し、作成したトークン認証情報を選択して SonarQube を統合します。

非パイプラインタスクに SonarQube コードレビューを追加#

freestyle_demo タスクで設定 - ビルドステップを選択し、ビルドステップを追加をクリックしてExecute SonarQube Scannerを選択し、JDK を選択し、分析内容を入力して設定を保存した後、Build Now をクリックしてタスクのビルドが完了します。SonarQube でコード分析結果を確認します。

sonar.projectKey=websocketChat
sonar.projectName=websocketChat
sonar.projectVersion=1.0
sonar.sources=.
sonar.java.binaries=./target/classes
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.java.target=1.8
sonar.sourceEncoding=UTF-8

20

21

パイプラインタスクに SonarQube コードレビューを追加#

(1)プロジェクトのルートディレクトリで、sonar-project.properties を作成し、以下の内容を書き込みます。

sonar.projectKey=Pipeline-demo
sonar.projectName=Pipeline-demo
sonar.projectVersion=1.0
sonar.sources=.
sonar.java.binaries=./target/classes
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.java.target=1.8
sonar.sourceEncoding=UTF-8

(2)Jenkinsfile の stages の前に、Jenkins でインストールした SonarQube Scanner を環境変数として導入し、その後、コードをプルするステップの後にコードレビューのステップを追加します。

pipeline {
    agent any
     environment {
         //JenkinsでインストールしたSonarQube Scannerを導入
        scannerHome = tool 'sonar-scanner-jenkins'
            }
    stages {
        stage('コードをプル') {
            steps {
                checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'fbf87557-40b6-468a-91c5-2cfa1b2e33e8', url: 'http://192.168.1.121:82/test/test_war_demo.git']])
            }
        }
        stage('コードレビュー') {
            steps { 
                    //Jenkinsで設定したSonarQubeサーバー設定を導入
                withSonarQubeEnv('SonarQube-jenkins') {
                    sh '${scannerHome}/bin/sonar-scanner'
                    }
            }
        }
        stage('コンパイルビルド') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('プロジェクトを公開') {
            steps {
                deploy adapters: [tomcat9(credentialsId: '4d9b76aa-078c-462b-81f1-33fe1d9c971c', path: '', url: 'http://192.168.1.125:8080/')], contextPath: null, war: 'target/*.war'
            }
        }
    }
    post {
        always {
            emailext(
                subject: 'ビルド通知:${PROJECT_NAME} - ビルド # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
                body: '${FILE,path="email.html"}',
                to: 'メールアドレス'
            )
        }
    }
}

(3)コードの変更が完了した後、パイプラインタスクが実行され、SonarQube でコード分析結果を確認します。

22

アプリケーションケース#

このアプリケーションケースは bilibili の up 主、'' 涣沷 a 靑惷 '' からの参考です。原文リンクは: https://www.yuque.com/huanfqc/jenkins/jenkins です。

Jenkins+GitLab+Docker+SonarQube を使用して、192.168.1.125 に RuoYi の Spring Boot のフロントエンドとバックエンドを分離したプロジェクトをデプロイします。

環境準備#

Jenkins サーバーを 192.168.1.125 にパスワードなしでログインできるように設定します。

ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

Docker のインストール#

bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
#イメージソースとデフォルト設定ファイルパスを変更
vi /etc/docker/daemon.json
{
  "data-root": "/data/dockerData",
  "registry-mirrors": [
        "https://docker.1ms.run",
        "https://docker.xuanyuan.me"
    ]
}
#dockerを起動
systemctl start docker
systemctl enable docker

ソースコードの取得と設定変更#

(1)RuoYi プロジェクトのソースコードをローカルにプルし、ruoyi-ui ディレクトリと RuoYi-Vue プロジェクトを同じレベルに配置します。

git clone https://gitee.com/y_project/RuoYi-Vue.git

23

(2)ruoyi-uiディレクトリ内のvue.config.jsファイルを変更し、localhostをデプロイホストの ip である 192.168.1.125 に変更します。

#変更前
const baseUrl = 'http://localhost:8080' // バックエンドインターフェース
#変更後
const baseUrl = 'http://192.168.1.125:8080' // バックエンドインターフェース

(3)RuoYi-Vue\ruoyi-admin\src\main\resources\application.ymlファイルを変更し、redis 設定の ip を 192.168.1.125 に変更します。

  # redis設定
  redis:
    # アドレス
    host: 192.168.1.125

(4)RuoYi-Vue\ruoyi-admin\src\main\resources\application-druid.ymlファイルを変更し、mysql の接続アドレスを 192.168.1.125 に変更します。

 # メインデータソース
            master:
                url: jdbc:mysql://192.168.1.125:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
              

(5)ruoyi-ui ディレクトリ内に sonar-project.properties を作成し、以下の内容を書き込み、SonarQube コードレビューを追加します。

sonar.projectKey=ruoyi-ui
sonar.projectName=ruoyi-ui
sonar.projectVersion=1.0
sonar.sources=.
sonar.sourceEncoding=UTF-8

(6)ruoyi-ui ディレクトリ内にフロントエンドプロジェクトの Jenkinsfile ファイルを作成します。

pipeline {
    agent any
     environment {
         //JenkinsでインストールしたSonarQube Scannerを導入
        scannerHome = tool 'sonar-scanner-jenkins'
            }
    stages {
        stage('コードをプル') {
            steps {
                checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'fbf87557-40b6-468a-91c5-2cfa1b2e33e8', url: 'http://192.168.1.121:82/test/ruoyi-ui.git']])
            }
        }
        stage('コードレビュー') {
            steps { 
                    //Jenkinsで設定したSonarQubeサーバー設定を導入
                withSonarQubeEnv('SonarQube-jenkins') {
                    sh '${scannerHome}/bin/sonar-scanner'
                    }
            }
        }
               stage('パッケージ化、ウェブサイトをデプロイ') {
		  steps {
		    script {
			    nodejs(nodeJSInstallationName: 'nodejs14') {
                              sh '''
                npm install
                # プロダクション環境を構築
                npm run build:prod
            '''
               }
			    // 構築された成果物をNginxコンテナのマウントディレクトリにデプロイ
          sh '''
            
            # distディレクトリ全体をマウントディレクトリにコピー
            scp -r dist 192.168.1.125:/data/ruoyi/nginx/html/
            ssh 192.168.1.125 docker restart nginx
        '''
			   
			}
		  }
       
        }

    }
}

7)RuoYi-Vue ディレクトリ内に sonar-project.properties を作成し、以下の内容を書き込み、SonarQube コードレビューを追加します。

sonar.projectKey=ruoyi-api
sonar.projectName=ruoyi-api
sonar.projectVersion=1.0
sonar.sources=.
sonar.java.binaries=./ruoyi-admin/target/classes
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.java.target=1.8
sonar.sourceEncoding=UTF-8

(8)RuoYi-Vue ディレクトリ内にバックエンドプロジェクトの Jenkinsfile ファイルを作成します。

pipeline {
    agent any
    environment {
         //JenkinsでインストールしたSonarQube Scannerを導入
        scannerHome = tool 'sonar-scanner-jenkins'
            }
    stages {
        stage('コードをプル') {
            steps {
                checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'fbf87557-40b6-468a-91c5-2cfa1b2e33e8', url: 'http://192.168.1.121:82/test/ruoyi-api.git']])
            }
        }
        stage('コンパイルビルド') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('コードレビュー') {
            steps { 
                    //Jenkinsで設定したSonarQubeサーバー設定を導入
                withSonarQubeEnv('SonarQube-jenkins') {
                    sh '${scannerHome}/bin/sonar-scanner'
                    }
            }
        }
        stage('プロジェクトを公開') {
            steps {
                script {
                    sh '''
                       ssh 192.168.1.125  "mkdir -p /data/ruoyi-api"
                        scp ruoyi-admin/target/*.jar  192.168.1.125:/data/ruoyi-api/ruoyi.jar
                    '''
                    // Dockerfileを作成
                    sh '''
                             ssh 192.168.1.125 'cat > /data/ruoyi-api/Dockerfile <<-EOF
	FROM openjdk:8
	MAINTAINER xie
	VOLUME /tmp
	ADD ruoyi.jar ruoyi.jar
	ENTRYPOINT ["java","-jar","/ruoyi.jar"]
	EXPOSE 8080
	EOF'
                    '''

                    // イメージをビルド
                    sh '''
                        ssh 192.168.1.125 "docker build -t ruoyi:1.0 /data/ruoyi-api"
                    '''

                    // 既存のコンテナを停止して削除
                    sh '''
                        EXISTING_CONTAINER=$(ssh 192.168.1.125 "docker ps -a -q -f name=ruoyi")
                        if [ -n "$EXISTING_CONTAINER" ]; then
                            echo "コンテナ 'ruoyi' が既に存在します。古いコンテナを停止して削除します..."
                           ssh 192.168.1.125 "docker rm -f $EXISTING_CONTAINER"
                        fi
                    '''

                    // 新しいコンテナを実行
                    sh '''
                       ssh 192.168.1.125 "docker run -d --name ruoyi -p 8080:8080 ruoyi:1.0"
                    '''
                }
            }
        }
    }
}

プロジェクトに必要なコンテナをデプロイ#

このプロジェクトでは nginx、mysql、redis を使用する必要があり、事前にコンテナをデプロイしておく必要があります。対応するコンテナのバージョンは nginx:1.18.0、mysql:8.0.19、redis:6.0.8 です。

(1)必要なディレクトリを作成

mkdir -p /data/ruoyi
mkdir -p /data/ruoyi/nginx/conf
mkdir -p /data/ruoyi/mysql/db

(2)nginx の一時コンテナを作成し、設定ファイルを変更します。

docker run --rm -v /data/ruoyi/nginx/conf:/backup nginx:1.18.0 \
  sh -c "cp -r /etc/nginx/. /backup"

/data/ruoyi/nginx/conf/conf.d内の default.conf ファイルを変更します。

server {
    listen 80;

    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;

    server_name localhost;

    location / {
        root /usr/share/nginx/html/dist;
        index index.html index.htm;
        try_files $uri /index.html;
    }

    location /prod-api/ {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://192.168.1.125:8080/;   #注意してipを変更
    }

    if ($request_uri ~ "/actuator") {
        return 403;
    }
}

(3)RuoYi-Vue\sql内の sql ファイルを 192.168.1.125 ホストの/data/ruoyi/mysql/dbディレクトリにコピーします。

(4)yml を作成し、docker compose でコンテナを編成してデプロイします。

#ymlファイルを作成
vi ruoyi.yml


services:
  nginx:
    image: nginx:1.18.0
    container_name: nginx
    restart: always
    volumes:
      - /data/ruoyi/nginx/conf:/etc/nginx
      - /data/ruoyi/nginx/logs:/var/log/nginx
      - /data/ruoyi/nginx/html:/usr/share/nginx/html
    environment:
      TZ: "Asia/Shanghai"
    ports:
      - "80:80"
    networks:
      ruoyi:
        ipv4_address: 172.20.112.11
  mysql:
    container_name: mysql
    image: mysql:8.0.19
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: "password"
      MYSQL_ALLOW_EMPTY_PASSWORD: "no"
      MYSQL_DATABASE: "ry-vue"
      TZ: "Asia/Shanghai"
    ports:
      - "3306:3306"
    volumes:
      - /data/ruoyi/mysql/db:/var/lib/mysql
      - /data/ruoyi/mysql/conf:/etc/my.cnf
      - /data/ruoyi/mysql/init:/docker-entrypoint-initdb.d
    command: --default-authentication-plugin=mysql_native_password
    networks:
      ruoyi:
        ipv4_address: 172.20.112.12
  redis:
    container_name: redis
    image: redis:6.0.8
    restart: always
    environment:
      TZ: "Asia/Shanghai"
    ports:
      - "6379:6379"
    volumes:
      - /data/ruoyi/redis/conf:/etc/redis/redis.conf
      - /data/ruoyi/redis/data:/data
    command: redis-server /etc/redis/redis.conf
    networks:
      ruoyi:
        ipv4_address: 172.20.112.13


networks:
 ruoyi:
  driver: bridge
  ipam:
   config:
    - subnet: 172.20.112.0/24

(5)コマンドを実行してコンテナを作成します。

docker compose -f ruoyi.yml up -d
#コンテナの実行状態を確認
docker ps
#データベースをインポート
docker exec -it mysql bash
mysql -u root -ppassword ry-vue < /var/lib/mysql/ry_20250417.sql
mysql -u root -ppassword ry-vue < /var/lib/mysql/quartz.sql

コードを GitLab にアップロード#

(1)ruoyi-ui と ruoyi-api の 2 つのリポジトリを作成し、それぞれフロントエンドとバックエンドのコードを保存します。

(2)ruoyi-ui ディレクトリ内で cmd を開き、コードをアップロードするために次のコマンドを入力します。

git init
git remote add origin http://192.168.1.121:82/test/ruoyi-ui.git
#このディレクトリ内のgit権限設定を追加
git config  user.name "test1"
git config  user.email "test1@gitlab"
#続けてアップロード
git add .
git commit -m "ruoyi-ui"
git push -u origin master

(3)RuoYi-Vueディレクトリ内で cmd を開き、コードをアップロードするために次のコマンドを入力します。

git init
git remote add origin http://192.168.1.121:82/test/ruoyi-api.git
#このディレクトリ内のgit権限設定を追加
git config  user.name "test1"
git config  user.email "test1@gitlab"
#続けてアップロード
git add .
git commit -m "ruoyi-api"
git push -u origin master

Jenkins パイプラインの設定#

(1)nodejs と NodeJS プラグインをインストールします。

jenkins サーバーに nodejs をインストールします。

wget https://nodejs.org/dist/latest-fermium/node-v14.21.3-linux-x64.tar.gz
tar -vxzf node-v14.21.3-linux-x64.tar.gz  -C /opt
mv /opt/node-v14.21.3-linux-x64 /opt/nodejs
#環境変数を設定
echo "
export NODE_HOME=/opt/nodejs
export PATH=$NODE_HOME/bin:$PATH" >> /etc/profile
#変数を有効にする
 source /etc/profile
#バージョンを確認
node -v
npm -v
#ミラーソースを設定
npm config set registry https://registry.npmmirror.com
npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass

(2)NodeJS 設定を行います。

Manage Jenkins -Tools-NodeJS インストールで、NodeJSを追加をクリックし、nodejs の名前をnodejs14、サーバーにインストールした nodejs のパスを/opt/nodejsと入力し、アプリケーションを保存します。

(3)ruoyi-uiパイプラインタスクを作成し、パイプライン - 定義でPipeline script from SCMを選択し、SCM をGitに選択し、ruoyi-ui の git リポジトリアドレスとログイン認証情報を入力し、他のオプションはデフォルトのままにして保存します。

(4)Build Nowをクリックし、タスクの実行が完了するのを待ちます。ブラウザでhttp://192.168.1.125/にアクセスし、フロントエンドのデプロイ状況を確認します。

24

(5)ruoyi-apiパイプラインタスクを作成し、パイプライン - 定義でPipeline script from SCMを選択し、SCM をGitに選択し、ruoyi-api の git リポジトリアドレスとログイン認証情報を入力し、他のオプションはデフォルトのままにして保存します。

(6)Build Nowをクリックし、タスクの実行が完了するのを待ちます。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。