CI/CD 継続的インテグレーション 継続的リリース (ジェンキンス)

1. 背景

        実際の開発では、開発中にテストを行うことがよくありますが、もちろん、ここで言うテストとは、プログラマ自身のコードの単体テストではなく、同じプログラマのグループからコードが提出された後、テスターがテストすることを指します。

  または、フロントエンドとバックエンドが分離された後、インターフェイスが変更されて再展開されることがよくあります。

  このような状況では、頻繁にパッケージをデプロイする必要があります。

  手動パッケージ化の一般的な手順:

  1. コードを送信する

  2. 同じグループに提出するコードがあるかどうかを尋ねます

  3. コードをプルしてパッケージ化します (war パッケージまたは jar パッケージ)。

  4. Linuxサーバーにアップロードする

  5. 現在のプログラムが実行されているかどうかを確認します

  6. 現在のプログラムを閉じます

  7. 新しい jar パッケージを開始します

  8. ログを観察して、起動が成功したかどうかを確認します。

  9. 同僚がまだ提出していないコードがあると言ったら... 手順 1 ~ 8 をもう一度繰り返します。(ある朝行ってしまった)

  コードを git に送信した後、コードを自動的にパッケージ化してデプロイできるツールがあります。答えは「はい」です: Jenkins

  もちろん、Jenkins に加えて、Hudson など、デプロイメントを自動化できるツールは他にもあります。

  Jenkins が比較的広く使用されているというだけです
 

1. ジェンキンス

1.1 ジェンキンスとは

Jenkins は継続的な開発と展開のためのソフトウェアです

1.2. Jenkins 自動デプロイメントの実装原理

yum install -ycurlpolicycoreutils-python openssh-server perl postfix
systemctl Enable --now sshd postfix

rpm -ivh gitlab-ce-12.3.0-ce.0.el7.x86_64.rpm
 

vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.50.25:82'
nginx['listen_port'] = 82

gitlab-ctl を再構成する
gitlab-ctl を再起動する
 

ブラウザアクセス:http://192.168.50.25:82、502が表示される場合は、しばらく待ってから更新してください


1. 管理者 root ユーザーの新しいパスワードを設定します。形式要件に注意して、ここでは root@123 として設定します。
2. 管理者 root ユーザーを使用してログインします (root/root@123)。
3. ログイン後、ページ右上のユーザーオプションのドロップダウンから[設定]を選択し、左メニューの[環境設定]をクリックし、[ローカリゼーション]の[言語]で[簡体字中国語]を選択し、[変更を保存]ボタンをクリックします。中国語表示を使用するにはページを更新してください。

 

 //Gitlab グループの追加、ユーザーの作成、プロジェクトの作成
#Create Group
ページ左上の [GitLab] アイコンをクリックし、[新しいグループ] をクリック
[グループ名]、[グループ URL]、[グループの説明] をすべて設定しますdevops_group
[可視性レベル]をプライベートに設定し、
その他はデフォルト値のままにして、[グループの作成]をクリックします

#プロジェクトの
作成 [新しいプロジェクト]をクリックします
[プロジェクトURL] グループオプションドロップダウンからdevops_groupを選択します
[プロジェクト名]をweb_demoに設定します
[プロジェクトの説明]をweb_demoに設定します
[表示レベル]をプライベートに設定します
[プロジェクトの作成]をクリックします
 

 

#create user
ページ上部の [レンチ] アイコンをクリックして「管理エリア」に入ります
[新しいユーザー] をクリックします
[名前] を zhangsan に設定します
[ユーザー名] を zhangsan に設定します
[電子メール] を zhangsan@kgc に設定します.com
ここではパスワードがまだ設定されていません。他の人はデフォルト値のままにして、最初に [ユーザーの作成] をクリックします。 注
: アクセス レベル: 通常 (自分のグループとプロジェクトにのみアクセスできる一般ユーザーを表します); 管理者 (ユーザーを表します)管理者はすべてのグループとプロジェクトにアクセスできます)

ユーザー作成後、右上隅の[編集]をクリックすると、ここでパスワードを設定できます(例: zhangsan@123)

#ユーザーをグループに追加
ページ上部の [グループ] ドロップダウンをクリックし、devops_group を選択し、
左側のメニュー [メンバー] をクリックします
[devops_group にメンバーを追加] zhangsan を選択し、ロール権限で所有者を選択し、
[追加] をクリックしますグループへ]
 

#自分で作成したアカウントで管理する
現在のアカウントを終了し、自分で作成したアカウント zhangsan (zhangsan/zhangsan@123) でログインします
初回ログイン時はパスワードの変更を求められます (zhangsan/zhangsan@123)古いパスワードと同じでも構いませんが、再度ログインしてください
 


//ジェンキンスのインストール

#JDK のインストール
tar zxvf jdk-11.0.5_linux-x64_bin.tar.gz -C /usr/local/


vim /etc/profileexportJAVA_HOME=/usr/local/jdk-11.0.5exportCLASSPATH=.:${JAVA_HOME}/libexportPATH=${JAVA_HOME}/bin:$PATH
_
_

ソース /etc/profile
java -version

#ジェンキンスのインストール

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
rpm --import https://pkg.jenkins .io/redhat-stable/jenkins.io.key

yum install epel-release -y
yum install jenkins -y

または、ダウンロードしたインストール パッケージを直接使用します

yum localinstall -y jenkins-2.401.2-1.1.noarch.rpm

#jenkins の実行ユーザーとリスニング ポートを変更する


vim /etc/sysconfig/jenkins
JENKINS_USER="root"
JENKINS_PORT="8888"

##新しいバージョンの jenkins では、/usr/lib/systemd/system/jenkins.service ファイル内のユーザー名とポートを変更する必要もあります


vim /usr/lib/systemd/system/jenkins.service
ユーザー=root
グループ=root
環境="JAVA_HOME=/usr/local/jdk-11.0.5"     コメント削除
環境="JENKINS_PORT=8888"

#jenkins の起動スクリプトを変更して Java パスを追加します


vim /etc/init.d/jenkins
候補 =
......
/usr/local/jdk-11.0.5/bin/java
/usr/bin/java

systemctl daemon-reload
systemctl start jenkins
systemctl enkins を有効にする

vim /var/lib/jenkins/hudson.model.UpdateCenter.xml
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>

 sed -i 's#https://www.google.com#https://www.baidu.com#' /var/lib/jenkins/updates/default.json

http://192.168.50.25:8888 

 systemctl ジェンキンスを再起動する

ブラウザ アクセス: http://192.168.50.25:8888、管理者アカウントのパスワードを取得して入力します。

git プラグインをインストールするには、gitlab リポジトリからコードをプルします。 

ユーザー名のドロップダウンをクリックして、「認証情報」->「Jenkins Global」->「認証情報の追加」を選択します
。「ユーザー名とパスワード」を選択し、Gitlab ユーザー名とパスワード (zhangsan/zhangsan@123) を入力し、説明として gitlab-auth-password を入力し、 「OK」をクリックします 

FreeStyle プロジェクトの作成: 新しい項目 -> タスク名 (test01) FreeStyle プロジェクト ->
ソース コードの決定 管理: Git を選択、リポジトリ URL: http://192.168.80.10:82/devops_group/web_demo.git (Gitlab から複製可能) HTTP を使用)、
[資格情報] ドロップダウンから gitlab-auth-password を選択し、[保存] をクリックします。

[今すぐビルド] をクリックしてビルドを開始します。コンソール出力を確認して、ビルドが成功したことを確認します。ビルドされたパッケージは、サーバーの /var/lib/jenkins/workspace/test01 ディレクトリに生成されます。
 

 

//Jenkins が Maven プロジェクトをビルドします

Maven は、主に Java プロジェクト用の自動ビルド ツールです。Maven は、C#、Ruby、Scala、およびその他の言語で開発されたプロジェクトの構築および管理にも使用できます。

#Jenkins サーバーに Maven をインストールして、プロジェクトをコンパイルしてパッケージ化します。
cd /opt
tar -zxvf apache-maven-3.6.2-bin.tar.gz
mv apache-maven-3.6.2 /usr/local/maven

vim /etc/profile
......
export MAVEN_HOME=/usr/local/maven
import PATH=$MAVEN_HOME/bin:${JAVA_HOME}/bin:$PATH

ソース /etc/profile
mvn -v

#Jenkins JDK と Maven をリンクする


tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local/

「Jenkins の管理」 -> 「グローバル ツール構成」 
-> 「JDK」
「JDK の追加」 をクリックし、エイリアスに jdk11 を入力し、「自動的にインストール」のチェックを外して、JAVA_HOME に /usr/local/jdk-11.0.5 を入力し、「
JDK の追加」をクリックし、エイリアスに jdk1.8 を入力します。 [自動的にインストール] のチェックを外し、JAVA_HOME と入力 /usr/local/jdk1.8.0_171
-> Maven [
Maven の追加] をクリックし、名前を maven3 と入力し、[自動的にインストール] のチェックを外し、MAVEN_HOME /usr/local/maven と入力して
[適用] および [保存] をクリックします。

#Jenkins グローバル変数を追加して、Jenkins が JDK および Maven 環境コマンドを認識できるようにします。「
Jenkins の管理」→「システムの構成」→「グローバル プロパティ」で、環境変数の
キーと値のペアのリストを確認して、キー JAVA_HOME、値 /usr/local/jdk を追加します。 -11.0. 5
                キー M2_HOME、値 /usr/local/maven
                キー PATH+EXTRA、値 $M2_HOME/bin

#Maven の settings.xml を変更する


mkdir /root/repo #ローカル ウェアハウス ディレクトリを作成する

vim /usr/local/maven/conf/settings.xml
54 --> #ローカル ウェアハウスが /root/repo/
   <localRepository>/root/repo</localRepository>に変更されました

153 --> #追加阿里云私服地址
    <mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com /nexus/content/groups/public/</url>
    </mirror>
  </mirrors>

//Tomcat のインストールと設定


#Tomcat8.5
tar zxvf jdk-8u171-linux-x64.tar.gz をインストールします -C /usr/local/


vim /etc/profileexportJAVA_HOME=/usr/local/jdk1.8.0_171exportJRE_HOME=${JAVA_HOME}/jreexportCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexportPATH=${JAVA_HOME
_
_
_ }/bin:${JRE_HOME}/bin:$PATH

ソース/etc/profile

tar zxvf apache-tomcat-9.0.16.tar.gz

mv /opt/apache-tomcat-9.0.16/ /usr/local/tomcat

/usr/local/tomcat/bin/startup.sh

//Tomcat のユーザー ロールのアクセス許可を設定するデフォルトでは、Tomcat はユーザー ロールのアクセス
許可を設定しません。
403ページ。

ただし、Tomcat サーバーへの後続の Jenkins デプロイメント プロジェクトでは、リモート デプロイメントに Tomcat ユーザーを使用する必要があるため、Tomcat の次の構成を変更し、ユーザーと権限を追加します (vim /usr/local/tomcat/conf/tomcat-users.xml
43
--) > #Tomcat ユーザー ロールの権限を追加し、ユーザーとパスワードを Tomcat として指定し、権限を付与します。
   <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" パスワード="tomcat " 役割="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
</tomcat-users>

vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
<!-- # Valve 設定をコメントアウト
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allowed="127\.\ d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> --
>

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

もう一度アクセスしてください: http://192.168.80.12:8080/manager/html、アカウント/パスワード tomcat/tomcat を入力すると、正常にログインできます。

 再度ログインしてください

//Jenkins が Maven プロジェクトをビルドします


// フリースタイルプロジェクトのビルド

プロジェクト統合プロセス: プルコード -> コンパイル -> パッケージ -> デプロイ

#コードを引っ張る

新しいアイテムの作成 -> タスク名 (web_demo_freestyle) FreeStyle プロジェクト -> OK
ソースコード管理: Git を選択、リポジトリ URL: [email protected]:devops_group/web_demo.git
資格情報プルダウンで gitlab-auth-ssh を選択し、[保存
]をクリックして「今すぐビルド」をクリックし、プロジェクトをビルドしてみてください

# コンパイルとパッケージ化

[構成] -> [ビルド] -> [ビルド ステップの追加] -> [シェルの実行] で、次のコマンドを入力します。
echo "コンパイルとパッケージ化の開始"
mvn clean package
echo "コンパイルとパッケージ化の終了" [
今すぐビルド] をクリックして、プロジェクトをビルドしてみます。

#プロジェクトをリモート Tomcat にデプロイします

1) Deploy to Container プラグインをインストールします.
Jenkins 自体は Tomcat へのリモート デプロイ機能を実装できません. これを実現するには、Deploy to Container プラグインをインストールする必要があります:
Jenkins の管理 -> プラグインの管理 - オプションのプラグイン - ins -> コンテナへのデプロイ プラグインを検索し、それを選択して直接インストールします

2) ビルド後の操作を追加します。
構成 -> ビルド後の操作 -> ビルド後の操作ステップの追加 -> war/ear をコンテナーにデプロイします。 WAR
/EAR ファイル 入力ターゲット/*.war
コンテナー -> コンテナーの追加 -> Tomcat 9 .x Remote -> Credentials、Add -> Jenkins
ユーザー名を入力 tomcat、パスワードを入力 tomcat、説明を入力 tomcat-auth、Add
Credentials ドロップダウンをクリックして tomcat-auth を選択
Tomcat URL を入力 http://192.168.80.12:8080


「保存」をクリックします。「
今すぐビルド」をクリックして、プロジェクトをビルドしてみます。

3) デプロイメントが成功したら、http://192.168.80.12:8080/manager/html ページを更新します。アプリケーションに追加のプロジェクトがあることがわかります。新しいプロジェクトをクリックしてアクセスします。 


//パイプライン パイプライン プロジェクトの建設

パイプライン スクリプトは Groovy 言語によって実装されますが、Groovy
パイプラインを単独でサポートする 2 つの文法: 宣言型 (宣言型) 文法とスクリプト化されたパイプライン (スクリプト型) 文法

#Pipeline プラグインをインストールします (推奨プラグインはデフォルトでインストールされます)
Jenkins の管理 -> プラグインの管理 -> オプションのプラグイン -> Pipeline および Pipeline Stage View のインストール

#パイプライン文法クイックスタート
1) スクリプト化されたスクリプト化されたパイプライン 
新しい項目 -> タスク名 (web_demo_pipeline) パイプライン -> OK

流水線 -> 定义选择 パイプライン スクリプト -> 选择 スクリプト化されたパイプライン 
生成内容如下:
node {     def mvnHome     stage('Preparation') { // 表示目的         // GitHub リポジトリからコードを取得します         git 'https://github.com /jglick/simple-maven-project-with-tests.git'         // Maven ツールを取得します。         // ** 注: この「M3」Maven ツールは         // ** グローバル構成で構成する必要があります。         mvnHome = ツール 'M3'     }     stage('Build') {         // Maven ビルドを実行         withEnv(["MVN_HOME=$mvnHome"]) {             if (isUnix()) {













                sh '"$MVN_HOME/bin/mvn" -Dmaven.test.failure.ignore クリーン パッケージ'
            } else {                 but(/"%MVN_HOME%\bin\mvn" -Dmaven.test.failure.ignore クリーン パッケージ/)             }         }     }     stage('結果') {         junit '**/target/surefire-reports/TEST-*.xml'         archiveArtifacts 'target/*.jar'     } }








●ノード: ノード。ノードは Jenkins ノード、マスター ノード、またはエージェント ノードを表します。ステップを実行するための特定の動作環境であり、後で Jenkins のマスター/スレーブ アーキテクチャについて説明するときに使用します。
●ステージ: ステージ。パイプラインは複数のステージに分割できます。各ステージはビルド、テスト、デプロイなどの一連の操作を表します。ステージは論理的なグループ化の概念です。
●ステップ: ステップ、ステップは最も基本的な操作単位であり、文を印刷したり、コマンド: sh 'make' など、さまざまな Jenkins プラグインによって提供される Docker イメージを構築したりすることができます。通常のシェル端末と同等 make コマンドの実行は同じです。

単純なスクリプト化されたパイプラインを作成します。node
{     def mvnHome     stage('pull code') {         echo 'pull code'     }      stage('compile and build') {         echo 'compile and build'     }      stage('projectdeployment') {         echo 'プロジェクトの展開' }     }










2) 宣言型
パイプライン -> HelloWorld テンプレートを選択して
、次のコンテンツを生成します。
パイプライン {     エージェント任意の     ステージ { #stages: パイプライン全体のすべての実行ステージを表します。通常、ステージは 1 つだけあり、そこには複数のステージが含まれます。         stage('Hello') { #stage: パイプライン内の特定のステージを表し、n 個ある場合があります。通常、コードのプル、コンパイルとビルド、デプロイなどのステージに分かれています。steps             { #steps: ステージで実行する必要があるロジックを表します。この手順には、シェル スクリプト、git プル コード、SSH リモート リリース、およびその他の任意のコンテンツが含まれています。                 echo 'Hello World'             }         } }     }








   単純        な 宣言            型            パイプ
ライン        を        作成                し    ます            。                _            _        _         _ 'プロジェクトのデプロイ') {            ステップ {                echo 'プロジェクトのデプロイ'            }        }    } } [保存] をクリックします。 [今すぐビルド] をクリックし、コンソール出力を確認してビルド プロセス全体を確認します。




















# コード ジェネレーターを使用してパイプライン スクリプトを生成します:
パイプライン -> パイプライン構文 -> フラグメント ジェネレーター

#プルステージを生成する
チェックアウトを選択: バージョン管理
SCM からチェックアウト Git、リポジトリ URL を選択: [email protected]:devops_group/web_demo.git
資格情報ドロップダウンで gitlab-auth-ssh
指定のブランチを選択 */master
クリックしてパイプライン スクリプトを生成
スクリプトをパイプラインにコピーした後、「保存」をクリックしてビルドを試みます。

#Generate a build stage
sh: Shell Script
Shell Script を選択します。 mvn clean package と入力し
、Generate Pipeline Script をクリックします
。 生成されたスクリプトをパイプラインにコピーした後、Save をクリックしてビルドを試行します。

#デプロイメントステージを生成します
デプロイを選択します: war/ear をコンテナにデプロイします
WAR ファイル targer/*.war を入力します
コンテナ —> コンテナの追加 —> Tomcat 8.x リモート -> 認証情報ドロップダウンで tomcat-auth を選択
Tomcat URL http: と入力します: // 192.168.80.12:8080
[パイプライン スクリプトの生成] をクリックします
。生成されたスクリプトをパイプラインにコピーした後、[保存] をクリックしてビルドとデプロイを試行します。

おすすめ

転載: blog.csdn.net/zhangchang3/article/details/131854498