CentOS7 で Jenkins+Maven+Git 継続的インテグレーション環境を構築する方法

CentOS7 で Jenkins+Maven+Git 継続的インテグレーション環境を構築する方法

この記事では、Spring boot + Maven プロジェクトのデプロイメントを例に、Code Cloud をコード ホスティング リポジトリとして使用し、CentOS 7 上に Jenkins 継続的インテグレーション環境を構築します。

1. 準備

1.1 Java環境のインストール

Jenkins は Java に基づいて開発された継続的インテグレーション ツールであり、Java 環境で実行する必要があります。システムに Java がインストールされているかどうかを確認するには、次のコマンドを使用します。

yum インストール済みリスト | grep jdk

そうでない場合は、yum search コマンドを使用して openjdk のバージョンを見つけ、インストールする適切な jdk を選択します。

yum 検索 openjdk 
yum -y java-1.8.0-openjdk-devel をインストールします

Java が正常にインストールされていることを確認します。

java バージョン

1.2 Mavenをインストールする

次の 2 つのコマンドを順番に実行します。

wget http://repos.fedorapeople.org... -O /etc/yum.repos.d/epel-apache-maven.repo 
yum -y でApache-Mavenをインストールします

Maven が正常にインストールされていることを確認します。

mvn -v

1.3 Gitをインストールする

yum を介して直接インストールします。インストールが完了したら、バージョンをチェックしてインストールが成功したかどうかを確認します。

yum -y gitをインストール 
git --version

2. Jenkins をインストールして設定します。

2.1 Jenkinsをインストールする

次の 3 つのコマンドを順番に実行します。

sudo wget https://pkg.jenkins.io/redhat... -O /etc/yum.repos.d/jenkins.repo 
sudo rpm --import https://pkg.jenkins.io/redhat... 
yum -y ジェンキンスをインストール

以前に Jenkins からキーがインポートされている場合、キーがすでに存在するため rpm --import は失敗します。無視してインストールを続行します。

2.2 Jenkinsを起動する

Jenkins を起動し、起動時に自動的に起動するように設定します。

systemctl jenkins.service を起動します 
chkconfig jenkins オン

Jenkins はデフォルトでポート 8080 を使用します。次のリンクにアクセスすると、Jenkins Web インターフェイスが表示されます。

http://<サーバーアドレス>:8080

アクセスできない場合は、ファイアウォールで開いているポートがあるかどうかを確認するか、netstat -ntulp コマンドを使用してポートが占有されているかどうかを確認します。

2.3 Jenkinsの導入

Jenkins に初めてアクセスするときは、管理者パスワードを入力する必要があります。初期パスワードを表示するには、次のコマンドを使用します。

cat /var/lib/jenkins/secrets/initialAdminPassword

プラグインをインストールするには、デフォルトでinstall suggested pluginsを選択します。インストールが完了したら、手順に従ってユーザーを作成します。作成が完了したら、ログインできます。

2.4 Jenkinsの設定

Manage Jenkins -> Global Tool Configurationに移動し、JDK、Git、Maven のパスを順番に設定します。

2.4.1 JDKパスを確認する

yum を使用してインストールされたソフトウェアは、環境変数の設定には役立ちません。 echo $JAVA_HOME コマンドを直接使用してもパスを確認することはできません。

まず、次のコマンドを使用してパスを確認します。

どのJava

表示される結果は /usr/bin/java ですが、実際にはこれは単なるソフト リンクであり、JDK が配置されている実際のディレクトリではありません。

引き続き次のコマンドを使用して表示します。

ls -l /usr/bin/java

/usr/bin/java が /etc/alternatives/java を指していることがわかります。残念ながら、これは実際に探しているパスではありません。

追跡を続ける:

ls -l /etc/alternatives/java

結果は/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/javaを指します。JDK のバージョンによってディレクトリ名が若干異なる場合があります。これは JDK が実際に配置されている場所です。

同様に、Maven が配置されているパスを取得できます。

2.4.2 プラグインのインストールと設定

Manage Jenkins -> Manage Pluginsに移動し、 Publish Over SSHおよびMaven Integrationプラグインを検索してインストールします。Git Git Pluginsプラグインはデフォルトですでにインストールされているため、再度インストールする必要はありません。

SSHパスワードフリーログインを設定する

プラグインを設定する前に、Jenkins サーバーでキー ペアを生成します。次のコマンドを実行して、jenkins ユーザーに切り替えます。

sudo su ジェンキンス

切り替えることができない場合は、/etc/passwd ファイルを開き、jenkins の行を見つけて、/bin/fasle を /bin/bash に変更します。

切り替えが成功すると、コマンドプロンプトのユーザー名は bash-4.2$ になる場合があります。ユーザー名を通常どおりに表示したい場合は、root ユーザーに戻って、次の操作を実行します。

vi ~/.bash_profileファイルを編集します。
ステートメント export PS1='[u@h W]&dollar;' を追加します。
すぐに有効になります。source ~/.bash_profile

その後、jenkins ユーザーに切り替えると、正常に表示されます。次に、次のコマンドを実行してキー ペアを生成します。

ssh-keygen -t rsa

Enter キーを押して完了すると、id_rsa と id_rsa.pub の 2 つのファイルが /var/lib/jenkins/.ssh/ ディレクトリに生成されます。

id_rsa.pub ファイルの内容を、アプリケーション サーバーの /root/.ssh/authorized_keys ファイルの末尾に、1 行に 1 つのキーずつ追加します。アプリケーション サーバーであることに注意してください。アプリケーション サーバーで ssh サービスを再起動します。

systemctl sshd.service を再起動します。

これで、Jenkins はパスワードなしでアプリケーション サーバーにログインできるようになりました。jenkins ユーザーとしてコマンドを実行してテストします。

ssh root@<アプリケーション サーバーのアドレス>

最初の接続では確認プロンプトが表示されるので、「yes」と入力してください。このステップは非常に重要です。初回の接続時に手動での確認がないと、Jenkins は接続できません。

Public over SSHプラグインの設定

Manage Jenkins -> Configure Systemに移動し、 Publish over SSH設定を入力します。

キーへのパス: 生成された id_rsa キー ファイルのパスを入力します。
名前: サービス名、お好きなように入力してください。
HostName: アプリケーション サーバーの IP アドレスまたはドメイン名。
ユーザー名: アプリケーション サーバーにログインするためのユーザー ID。
リモート ディレクトリ: リモート ディレクトリは、アプリケーション サーバー上でアプリケーションが保存されるディレクトリです。Jenkins はアプリケーションをこのディレクトリにコピーします。このディレクトリが存在することを確認してください。

保存〜

3. Mavenプロジェクトをデプロイする

「新規項目」をクリックして新しいタスクを作成し、タスク名を入力して、Maven プロジェクトを選択し、「OK」をクリックします。

[全般] で、[古いビルドを破棄する] をオンにし、保持する最大日数とビルド ファイルの最大数を設定します。そうしないと、各ビルドによって生成されたファイルが保持され、ディスク領域を占有します。

Jenkins がコードを取得するリモート コード リポジトリ アドレスを構成します。プロンプトがリポジトリの読み取りに失敗した場合は、次の可能性があることに注意してください。

  • 公開キーは、リモート コード サーバーの authorized_keys ファイルに追加されません。上記の SSH ログイン不要の構成は、Jenkins がアプリケーション サーバーにアクセスするためのものです。アプリケーション サーバーとコード サーバーが同じマシンでない限り、Jenkins のコード サーバーへのアクセスも構成する必要があります。 Code Cloud や GitHub などのコード ホスティング プラットフォームを使用する場合は、対応する SSH キー設定ページがあります。
  • 公開キーは対応するファイルに追加されていますが、初めて手動で接続されていません。解決策は非常に簡単です。jenkins ユーザーとしてリポジトリを手動で 1 回クローンし、はいを確認します。

Add timestamps to the Console Output

Maven パッケージ化の指示を入力します。-DMaven.test.skip=true はテストをスキップすることを意味します。

Run only if build succeedsをチェックし、 Send files or execute commands over SSHを選択します。

次のステップは、jar パッケージを Jenkins サーバーからアプリケーション サーバーにコピーし、ビルドを設定した後に実行することです。

名前: 先ほど作成したサービスを選択します。
ソース ファイル: Maven パッケージ化後に生成される jar ファイル、つまり実行のためにアプリケーション サーバーにコピーされるプログラム。複数のファイルをカンマで区切って入力できます。
プレフィックスを削除: プレフィックスを無視します。ターゲットの下に jar パッケージをコピーするだけでよく、アプリケーション サーバー上にターゲット ディレクトリを生成する必要はありません。
リモート ディレクトリ: ターゲット フォルダーはグローバル設定を継承します。たとえば、jar パッケージは /usr/local/app/demo ディレクトリにコピーされます。
実行コマンド: コピーが完了した後にアプリケーション サーバーで実行されるコマンドまたはスクリプト。

save 」→「 build nowビルド」。ビルドが成功したら、ブラウザを開いてサイトにアクセスします。

4. 結論

実際、プロセス全体はそれほど複雑ではありません。Jenkins はリモート コード ライブラリからコードを取得し、Maven 命令を呼び出してプロジェクトをパッケージ化し、Jenkins はパッケージ化されたファイルをリモート アプリケーション サーバーにコピーし、リモート アプリケーション サーバーでシェル命令を実行してプログラムを起動します。 Jenkins のリモート操作は両方とも SSH を介して完了しました。
yum 経由で Jenkins と Java をインストールするのは便利ですが、設定が比較的面倒です。インストール パスを自分で見つけなければなりません。SSH を設定する場合も、root ではなく jenkins ユーザー ID を使用する必要があります。unzip パッケージ方式を使用すると、自由度が高まります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Jenkins+Maven継続的インテグレーションの実装

<<:  React+Koa によるファイルアップロードの実装例

>>:  Centos 6.9 に MySQL をインストールするための詳細なチュートリアル

推薦する

mysql の認証、起動、およびサービスの起動のための一般的なコマンド

1. 4つの起動方法: 1.mysqld MySQL サーバーを起動します: ./mysqld --...

フロントエンドインタビューに必要なホモロジーとクロスドメインの詳細な説明

序文ご存知のとおり、ブラウザの相同性戦略とクロスドメイン方式も、フロントエンド面接で頻繁に遭遇する問...

動的画像読み込み技術の応用とjquery.lazyloadプラグインの使用例

アプリケーション例ウェブサイト http://www.uhuigou.net画像の動的読み込みは目新...

div 内の img と span の垂直方向の中央揃えの問題について

以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピー<htm...

MySQL でのログインを取り消す

コンセプト紹介: MySQL の redo ログにはトランザクションの動作が記録されることはご存じの...

Vue-cliに基づくコードセットは複数のプロジェクトをサポートします

目次アプリケーションシナリオアイデアプロジェクト構造全体的なプロジェクト構造webpack パッケー...

Tomcat が非同期サーブレットを実装する方法の詳細な説明

序文これまでの Tomcat シリーズの記事を通じて、私のブログを読んでいる学生は Tomcat に...

Linuxターミナルでファイルを作成する2つの一般的な方法を簡単に理解する

mkdir コマンドを使用して新しいディレクトリを作成できることは誰もが知っていますが、多くの場合、...

MYSQL ロック解除とロックテーブルの紹介

MySQL ロックの概要他のデータベースと比較すると、MySQL のロック メカニズムは比較的単純で...

Echarts バー水平棒グラフのサンプルコード

目次横棒グラフデータとスタイルを動的に更新するeChartsの幅と高さの適応の問題を解決する縦棒グラ...

Angularデータバインディングとその実装の詳細な説明

目次序文データバインディングとは何ですか? Angular のデータバインディングの種類一方向データ...

Vue の get リクエストと post リクエストの違いのまとめ

このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...

プロジェクトにaxiosをカプセル化する実際のプロセス

目次序文axiosカプセル化の利点パッケージのアイデア設定の優先順位axiosインスタンス構成1. ...

MySQL 5.7.23 winx64 のインストールと設定方法のグラフィックチュートリアル (win10 の場合)

この記事はMySQL 5.7.23 winx64のインストールチュートリアルを記録します。具体的な内...

WeChatミニプログラムで検索キーワードを強調表示するサンプルコード

1. はじめにプロジェクトで要件に遭遇したら、データを検索してキーワードを強調表示します。要件を受け...