パイプラインパイプラインプロジェクトのプロジェクトは、(c)はJAVAをリリース

パイプラインパイプラインプロジェクトのプロジェクトは、(c)はJAVAをリリース

6.プロジェクト事例II:JAVAのリリースパイプラインの自動化プロジェクト

ホスト名 IPアドレス リマーク
Gitの 192.168.200.61 Gitのサーバー
ジェンキンス 192.168.200.62 ジェンキンスサーバ
WEB01 192.168.200.65 Tomcatサーバー
#所有服务器进行如下操作
[root@Git ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 
[root@Git ~]# uname -r
3.10.0-862.3.3.el7.x86_64
[root@Git ~]# systemctl stop firewalld
[root@Git ~]# systemctl disable firewalld
[root@Git ~]# systemctl stop NetworkManager
[root@Git ~]# systemctl disable NetworkManager

6.1 Tomcatサーバー・デプロイメント環境

#在tomcat服务器进行如下操作
#部署jdk
[root@Web02 ~]# ls
anaconda-ks.cfg  apache-maven-3.5.0-bin.tar.gz  apache-tomcat-8.5.33.tar.gz  jdk-8u171-linux-x64.tar.gz
[root@Web02 ~]# tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local/
[root@Web02 ~]# cd /usr/local/
[root@Web02 local]# mv jdk1.8.0_171 jdk
[root@Web02 local]# ln -s /usr/local/jdk/bin/java /usr/local/bin/
[root@Web02 local]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
#部署java环境变量
[root@Web02 local]# vim /etc/profile
[root@Web02 local]# tail -4 /etc/profile
#部署java环境变量
export JAVA_HOME=/usr/local/jdk/
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
[root@Web02 local]# source /etc/profile
#部署maven
[root@Web02 ~]# tar xf apache-maven-3.5.0-bin.tar.gz -C /usr/local
[root@Web02 ~]# cd /usr/local/
[root@Web02 local]# mv apache-maven-3.5.0 maven
[root@Web02 local]# ln -s /usr/local/maven/bin/mvn /usr/local/bin/
[root@Web02 local]# mvn -version
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: /usr/local/jdk/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.14.4.el7.x86_64", arch: "amd64", family: "unix"

#部署maven环境变量
[root@Web02 local]# vim /etc/profile
[root@Web02 local]# tail -3 /etc/profile
#部署maven环境变量
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:${MAVEN_HOME}
[root@Web02 local]# source /etc/profile
#解压tomcat
[root@Web02 ~]# tar xf apache-tomcat-8.5.33.tar.gz -C /usr/local/
[root@Web02 ~]# cd /usr/local/
[root@Web02 local]# mv apache-tomcat-8.5.33 tomcat
[root@Web02 local]# cd tomcat/
[root@Web02 tomcat]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
[root@Web02 tomcat]# rm -rf webapps/*
[root@Web02 tomcat]# ls webapps/
[root@Web02 tomcat]# 
#部署tomcat环境变量
[root@Web02 tomcat]# vim /etc/profile
[root@Web02 tomcat]# tail -2 /etc/profile
#部署tomcat环境变量
export TOMCAT_HOME=/usr/local/tomcat
[root@Web02 tomcat]# source /etc/profile

#自动部署需要解压maven构建后的war包,因此需要安装unzip
[root@Web02 tomcat]# yum -y install unzip
[root@Web02 tomcat]# rpm -qa unzip
unzip-6.0-19.el7.x86_64

#自动部署需要git远程仓库代码,因此需要安装git
[root@Web02 tomcat]# yum -y install git
[root@Web02 tomcat]# rpm -qa git
git-1.8.3.1-14.el7_5.x86_64

ラインB-JAVAプログラムの6.2建設

image.png-83KB

image.png-38.2kB

image.png-23.5kB

image.png-60.9kB

6.3ソロプロジェクトのソースコードをダウンロードして、Gitのリモートリポジトリをアップロード

ソースコードのソロをダウンロードhttps://github.com/b3log/solo

#在Git服务器上创建用于存放solo源代码的仓库
[root@Git ~]# hostname -I
192.168.200.61 
[root@Git ~]# cd /home/git/repos/
[root@Git repos]# mkdir solo.git
[root@Git repos]# cd solo.git/
[root@Git solo.git]# git --bare init
初始化空的 Git 版本库于 /home/git/repos/solo.git/
[root@Git solo.git]# cd ..
[root@Git repos]# chown -R git.git solo.git
#在jenkins服务器上进行如下操作
#解压solo.tar.gz源代码包
[root@Jenkins ~]# tar xf solo.tar.gz
[root@Jenkins ~]# mkdir -p /mycode
[root@Jenkins ~]# cd /mycode/
[root@Jenkins mycode]# git clone [email protected]:/home/git/repos/solo.git
正克隆到 'solo'...
warning: 您似乎克隆了一个空版本库。
[root@Jenkins mycode]# ls
solo
[root@Jenkins mycode]# cd solo/
[root@Jenkins solo]# ls
[root@Jenkins solo]# mv /root/solo/* .
[root@Jenkins solo]# ls
CHANGE_LOGS.html    Dockerfile   LICENSE       pom.xml    README_zh_CN.md
docker-compose.yml  gulpfile.js  package.json  README.md  src
[root@Jenkins solo]# rm -rf /root/solo
#为了最后的测试,我们需要修改源代码的一个配置文件
[root@Jenkins solo]# cd src/main/resources/
[root@Jenkins resources]# ll -d latke.properties 
-rw-r--r-- 1 root root 1241 10月 25 14:29 latke.properties
[root@Jenkins resources]# vim latke.properties 
[root@Jenkins resources]# cat -n latke.properties | sed -n '29p;31p'
    29  serverHost=192.168.200.65
    31  serverPort=8080
    

#将solo源代码提交到Git仓库
[root@Jenkins resources]# cd /mycode/solo/
[root@Jenkins solo]# git add *
[root@Jenkins solo]# git commit -m "第一次提交"
[root@Jenkins solo]# git push -u origin master
[root@Jenkins solo]# git push -u origin master
Counting objects: 2099, done.
Compressing objects: 100% (2044/2044), done.
Writing objects: 100% (2099/2099), 27.44 MiB | 9.27 MiB/s, done.
Total 2099 (delta 367), reused 0 (delta 0)
To [email protected]:/home/git/repos/solo.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
#将代码克隆到本地进行克隆验证
[root@Jenkins solo]# mkdir -p /test
[root@Jenkins solo]# cd /test/
[root@Jenkins test]# git clone [email protected]:/home/git/repos/solo.git
正克隆到 'solo'...
remote: Counting objects: 2099, done.
remote: Compressing objects: 100% (1677/1677), done.
remote: Total 2099 (delta 367), reused 2099 (delta 367)
接收对象中: 100% (2099/2099), 27.44 MiB | 22.41 MiB/s, done.
处理 delta 中: 100% (367/367), done.
[root@Jenkins test]# ls
solo
[root@Jenkins test]# cd solo/
[root@Jenkins solo]# ls
CHANGE_LOGS.html    Dockerfile   LICENSE       pom.xml    README_zh_CN.md
docker-compose.yml  gulpfile.js  package.json  README.md  src

6.4パイプライン化されたスクリプトを作成し、Gitリポジトリを提出

#在jenkins服务器上进行如下操作
[root@Jenkins ~]# mkdir -p /jenkinsfile
[root@Jenkins ~]# cd /jenkinsfile/
[root@Jenkins jenkinsfile]# git clone [email protected]:/home/git/repos/jenkinsfile
正克隆到 'jenkinsfile'...
remote: Counting objects: 20, done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 20 (delta 3), reused 0 (delta 0)
接收对象中: 100% (20/20), done.
处理 delta 中: 100% (3/3), done.

[root@Jenkins jenkinsfile]# ls
jenkinsfile
[root@Jenkins jenkinsfile]# cd jenkinsfile/
[root@Jenkins jenkinsfile]# ls
itemA

image.png-55.4kB

image.png、16kBの

image.png-28.8kB

image.png-10.1kB

image.png-43.5kB

[root@Jenkins jenkinsfile]# mkdir itemB
[root@Jenkins jenkinsfile]# cd itemB/
[root@Jenkins jenkinsfile]# vim itemB/jenkinsfile-java-solo
[root@Jenkins jenkinsfile]# cat itemB/jenkinsfile-java-solo
node ("PHP-slave2-192.168.200.65") {
   stage('git checkout') {
      checkout([$class: 'GitSCM', branches: [[name: '${branch}']], 
      doGenerateSubmoduleConfigurations: false, extensions: [],submoduleCfg: [], 
      userRemoteConfigs: [[credentialsId: 'f58165e3-e5a7-408a-a57d-a4b643b14308', 
      url: '[email protected]:/home/git/repos/solo.git']]])
   }
   stage('maven build') {
      sh '/usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true'
   }
   stage('deploy') {
      sh '''WWWROOT=/usr/local/tomcat/webapps/ROOT
      [ -d /data/backup ] || mkdir -p /data/backup
      if [ -d $WWWROOT ];then
         mv $WWWROOT /data/backup/tomcat-$(date +%F_%T)
      fi
      unzip ${WORKSPACE}/target/*.war -d $WWWROOT
      PID=$(ps -ef | grep tomcat | egrep -v "grep|$$" | awk \'{print $2}\')
      [ -n "$PID" ] && kill -9 $PID
      /bin/bash /usr/local/tomcat/bin/startup.sh'''
   }
   stage('test') {
       sh 'echo susses'
   }
}
#推送本地仓库到远程Git
[root@Jenkins jenkinsfile]# git add *
[root@Jenkins jenkinsfile]# git commit -m "java流水线脚本"
[master 89a206e] java流水线脚本
 1 file changed, 25 insertions(+)
 create mode 100644 itemB/jenkinsfile-java-solo
[root@Jenkins jenkinsfile]# git push -u origin master
Counting objects: 6, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 913 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To [email protected]:/home/git/repos/jenkinsfile
   6106cee..89a206e  master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
#进行流水线脚本克隆测试
[root@Jenkins jenkinsfile]# cd /test/
[root@Jenkins test]# ls
solo
[root@Jenkins test]# rm -rf *
[root@Jenkins test]# git clone [email protected]:/home/git/repos/jenkinsfile
正克隆到 'jenkinsfile'...
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 24 (delta 4), reused 0 (delta 0)
接收对象中: 100% (24/24), done.
处理 delta 中: 100% (4/4), done.
[root@Jenkins test]# ls
jenkinsfile
[root@Jenkins test]# cd jenkinsfile/
[root@Jenkins jenkinsfile]# ls
itemA  itemB
[root@Jenkins jenkinsfile]# ls itemB/jenkinsfile
itemB/jenkinsfile

6.5スレーブ分散ビルド管理ノードの設定

6.5.1 SSH接続用のアカウントとパスワードを追加します。

image.png-25.3kB

スレーブノード構成6.5.2から

image.png-27.5kB

image.png-57.4kB

image.png-13KB

分散建設テストスレーブの単一ノードから6.6パイプライン

何もない場合は、最後のステップ(Tomcatプロセスが開始されていない)で構築するために失敗します。
Tomcatプロセスのソケットを開始する方法ジェンキンスない
スクリプトをバックグラウンドで実行されます際にパイプラインパイプラインはスクリプトを起動するために。
しかし、パイプラインの最後には、ジェンキンスは、自動的にすべてのパイプラインおよび関連するデリバティブ子プロセスを殺すとき
、我々はパイプラインスクリプトリガの変数のパラメータを必要とするので、パイプラインを殺すことはできません
JENKINS_NODE_COOKIE = dontkillme

#修改流水线脚本,添加参数,并提交远程仓库
[root@Jenkins jenkinsfile]# cat itemB/jenkinsfile-java-solo 
node ("PHP-slave2-192.168.200.65") {
   stage('git checkout') {
      checkout([$class: 'GitSCM', branches: [[name: '${branch}']], 
      doGenerateSubmoduleConfigurations: false, extensions: [],submoduleCfg: [], 
      userRemoteConfigs: [[credentialsId: 'f58165e3-e5a7-408a-a57d-a4b643b14308', 
      url: '[email protected]:/home/git/repos/solo.git']]])
   }
   stage('maven build') {
      sh '/usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true'
   }
   stage('deploy') {
      sh '''
      JENKINS_NODE_COOKIE=dontkillme    #添加此行
      WWWROOT=/usr/local/tomcat/webapps/ROOT
      [ -d /data/backup ] || mkdir -p /data/backup
      if [ -d $WWWROOT ];then
         mv $WWWROOT /data/backup/tomcat-$(date +%F_%T)
      fi
      unzip ${WORKSPACE}/target/*.war -d $WWWROOT
      PID=$(ps -ef | grep tomcat | egrep -v "grep|$$" | awk \'{print $2}\')
      [ -n "$PID" ] && kill -9 $PID
      /bin/bash /usr/local/tomcat/bin/startup.sh'''
   }
   stage('test') {
       sh 'echo susses'
   }
}


#提交远程Git仓库
[root@Jenkins jenkinsfile]# git add *
[root@Jenkins jenkinsfile]# git commit -m "第二次提交java流水线脚本"
[master 1677c59] 第二次提交java流水线脚本
 1 file changed, 3 insertions(+), 1 deletion(-)
[root@Jenkins jenkinsfile]# git push -u origin master
Counting objects: 7, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 457 bytes | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
To [email protected]:/home/git/repos/jenkinsfile
   89a206e..1677c59  master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

分散テストの構築
image.png-23.6kB

image.png-56.2kB

image.png-32.3kB

分散テストSSHリモートノードからのパイプラインを構築するために6.7単一のスレーブ

Tomcatサーバーのクローン作成、SSHリモート建物

ホスト名 IPアドレス リマーク
Gitの 192.168.200.192 Gitのサーバー
ジェンキンス 192.168.200.193 ジェンキンスサーバ
WEB01 192.168.200.196 Tomcatサーバー
WEB02 192.168.200.197 TomcatBサーバ

6.7.1プラグインのインストールSSHパイプラインステップ

image.png-97.5kB

image.png-82.5kB

6.7.2パイプラインスクリプトを修正し、Gitリポジトリを提出

#修改流水线脚本,并提交Git仓库
[root@Jenkins jenkinsfile]# cat itemB/jenkinsfile-java-solo 
node ("PHP-slave2-192.168.200.196") {
   //def mvnHome
   def remote = [:]
   stage('git checkout') {
    sh 'hostname -I'
        checkout([$class: 'GitSCM', branches: [[name: '${branch}']], 
        doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], 
        userRemoteConfigs: [[credentialsId: 'd0721eb3-07e1-49f2-bb30-2fae94220fad', 
        url: '[email protected]:/home/git/repos/solo.git']]])
   }
   stage('maven build') {
        sh '/usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true'
   }
   stage('Remote SSH 200.192') {
        remote.name = 'test'
        remote.host = '192.168.200.192'
        remote.user = 'root'
        remote.password = '666666'
        remote.allowAnyHosts = true
        writeFile file: '192.sh',text:'echo "`hostname -I`"'
        sshScript remote: remote,script: "192.sh"
   }
   stage('Remote SSH 200.197') {
        remote.name = 'test'
        remote.host = '192.168.200.197'
        remote.user = 'root'
        remote.password = '666666'
        remote.allowAnyHosts = true
    writeFile file: '197.sh',text:'''
echo "`hostname -I`"
'''
    sshScript remote: remote,script: "197.sh"
   }
}

分散テストの6.7.3建設

image.png、105.6kB

image.png-43.4kB

image.png-76.1kB

image.png-88.4kB
試験から、分散型マルチノードのパイプラインを構築する6.8スレーブ

ノードとマルチノード建物からスレーブを追加

image.png-48.9kB

#修改流水线脚本,并提交Git仓库
[root@Jenkins jenkinsfile]# cat itemB/jenkinsfile-java-solo
node ("PHP-slave2-192.168.200.196") {
   //def mvnHome
   stage('git checkout') {
        sh 'hostname -I'
        checkout([$class: 'GitSCM', branches: [[name: '${branch}']], 
        doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], 
        userRemoteConfigs: [[credentialsId: 'd0721eb3-07e1-49f2-bb30-2fae94220fad', 
        url: '[email protected]:/home/git/repos/solo.git']]])
   }
   stage('maven build') {
        sh '/usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true'
   }
   stage('deploy') {
        sh '''
        JENKINS_NODE_COOKIE=dontkillme
        WWWROOT=/usr/local/tomcat/webapps/ROOT
        [ -d /data/backup ] || mkdir -p /data/backup
        if [ -d $WWWROOT ];then
            mv $WWWROOT /data/backup/tomcat-$(date +%F_%T)
        fi
        unzip ${WORKSPACE}/target/*.war -d $WWWROOT
        PID=$(ps -ef | grep tomcat | egrep -v "grep|$$" | awk \'{print $2}\')
        [ -n "$PID" ] && kill -9 $PID
        /bin/bash /usr/local/tomcat/bin/startup.sh'''
   }
}
node ("PHP-slave3-192.168.200.197") {
   //def mvnHome
   stage('git checkout') {
        sh 'hostname -I'
        checkout([$class: 'GitSCM', branches: [[name: '${branch}']], 
        doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], 
        userRemoteConfigs: [[credentialsId: 'd0721eb3-07e1-49f2-bb30-2fae94220fad', 
        url: '[email protected]:/home/git/repos/solo.git']]])
   }
   stage('maven build') {
        sh '/usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true'
   }
   stage('deploy') {
        sh '''
    JENKINS_NODE_COOKIE=dontkillme
    WWWROOT=/usr/local/tomcat/webapps/ROOT
        [ -d /data/backup ] || mkdir -p /data/backup
        if [ -d $WWWROOT ];then
            mv $WWWROOT /data/backup/tomcat-$(date +%F_%T)
        fi
        unzip ${WORKSPACE}/target/*.war -d $WWWROOT
        PID=$(ps -ef | grep tomcat | egrep -v "grep|$$" | awk \'{print $2}\')
        [ -n "$PID" ] && kill -9 $PID
        /bin/bash /usr/local/tomcat/bin/startup.sh'''
   }
}

image.png-58.3kB

7.本番サイト公開プロジェクトのアイデア

image.png、181.2kB

おすすめ

転載: www.cnblogs.com/ywb123/p/11222997.html