Jenkins 部署java项目 - 有参

1. 介绍

 本部署有参的java项目,坦白的说,我最烦的就是java的东西,各种环境变量问题,TMD有时候一个小问题,整半天。

那些弄不死你的,最终总会让你强大 有参和无参只是 是否传递给playbook参数。上个章节无参使用ansbile-playbook的插件,但是怎么传递参数给playbook的,折腾半天都有问题,放弃,直接开鲁脚本。

2. 环境

IP 主机名 角色 安装软件
192.168.2.146 manage01 jenkins jdk,maven,ansible
192.168.5.103 root tomcat server jdk

 我在jenkins机器上直接从github上拉取一个tomcat的demo,编译,打包,然后部署到tomcat server上。

3. 部署

3.1 资料

apache-tomcat包

https://tomcat.apache.org/download-80.cgi

http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.41/bin/apache-tomcat-8.5.41.tar.gz

tomcat demo

https://github.com/caimengzhi/tomcat-java-demo.git

tomcat.yml

# root@manage01:/etc/ansible/playbook# cat tomcat1.yml 
- hosts: 192.168.5.103
  remote_user: root
  serial: 1
  vars:
    type: auth
    tomcat_version: "tomcat"
    tomcat_path: /home/app
    ROOT_path: "{{ tomcat_path }}/{{ tomcat_version }}/webapps/ROOT/"
    ip_add: 192.168.1.37
    ip_port: 8080
    version: 5.4.3
    ware_path: "{{ ware_path }}"
  tasks:
    - name: 停止 {{ tomcat_version }}
      shell: chdir={{ tomcat_path }}/{{ tomcat_version }}/bin/  ./shutdown.sh
    - name: 删除{{ tomcat_version }}下的ROOT目录
      file: path={{ ROOT_path }} state=absent 
    - name: 创建{{ tomcat_version }}下 空的ROOT目录
      file: path={{ ROOT_path }}  state=directory
    - name: 解压war包 到{{ tomcat_version }} ROOT下
      unarchive: src=/root/.jenkins/workspace/{{ ware_path }}/target/ROOT.war dest={{ ROOT_path }}
    - name: 启动 {{ tomcat_version }} ,当前版本是 {{ version }}
      shell: chdir={{ tomcat_path }}/{{ tomcat_version }}  nohup  ./bin/catalina.sh start  &
    - name: 等待 5秒钟
      shell: sleep 5

构建时候用的脚本

source /etc/profile
cd $WORKSPACE && mvn  clean install -DskipTests=true
cd target
mv *.war ROOT.war 
/usr/bin/ansible-playbook /etc/ansible/playbook/tomcat1.yml --extra-vars "ware_path=$ware_path"

$WORKSPACE就是项目绝对路径,不懂的话,百度 jenkins内置变量。

在jenkins机器上同时安装ansible,jdk,maven[因为jenkins机器要打包]

root@manage01:/etc/ansible/playbook# ansible --version
ansible 2.0.0.2
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides

root@manage01:/etc/ansible/playbook# java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
root@manage01:/etc/ansible/playbook# mvn -v
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_161, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_161/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.15.0-33-generic", arch: "amd64", family: "unix"zh

root@manage01:/etc/ansible/playbook# tail -5 /etc/ansible/hosts

[cmz]
192.168.5.110 ansible_ssh_user=root ansible_ssh_pass=root
192.168.5.104
192.168.5.103

注意

一定要手动调试好那个playbook,否则百搭,不会的就使用我的吧。

3.2 准备

3.2.1 jenkins机器

 首先去要在tomcat server上启动一个java的项目。可以去官网下载一个tomcat

一定要提前安装好jdk环境啊,否则启动这加菲猫,卡卡的错。

3.2.2 tomcat sever机器

 安装好jdk,启动好tomcat。测试没有问题后,然后再向下继续。

3.3 jenkins 工程

 打开jenkins后台,点击左上角 新建任务 , 选择构建一个自由风格软件项目

jenkins配置

立即构建后控制台输出
15:36:46 Started by user caimengzhi
15:36:46 Building in workspace /root/.jenkins/workspace/ptest
15:36:46 No credentials specified
15:36:46  > git rev-parse --is-inside-work-tree # timeout=10
15:36:46 Fetching changes from the remote Git repository
15:36:46  > git config remote.origin.url https://github.com/caimengzhi/tomcat-java-demo.git # timeout=10
15:36:46 Fetching upstream changes from https://github.com/caimengzhi/tomcat-java-demo.git
15:36:46  > git --version # timeout=10
15:36:46  > git fetch --tags --progress https://github.com/caimengzhi/tomcat-java-demo.git +refs/heads/*:refs/remotes/origin/*
15:36:47  > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
15:36:47  > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
15:36:47 Checking out Revision 2204ed7c48daca5d7189eb99f45d0bfe1275835a (refs/remotes/origin/master)
15:36:47  > git config core.sparsecheckout # timeout=10
15:36:47  > git checkout -f 2204ed7c48daca5d7189eb99f45d0bfe1275835a
15:36:47 Commit message: "first commit"
15:36:47  > git rev-list --no-walk 2204ed7c48daca5d7189eb99f45d0bfe1275835a # timeout=10
15:36:47 [ptest] $ /bin/sh -xe /usr/local/jenkins/temp/jenkins9023454083935502461.sh
15:36:47 + source /etc/profile
15:36:47 ++ '[' '' ']'
15:36:47 ++ '[' -d /etc/profile.d ']'
15:36:47 ++ for i in '/etc/profile.d/*.sh'
15:36:47 ++ '[' -r /etc/profile.d/appmenu-qt5.sh ']'
15:36:47 ++ . /etc/profile.d/appmenu-qt5.sh
15:36:47 +++ export QT_QPA_PLATFORMTHEME=appmenu-qt5
15:36:47 +++ QT_QPA_PLATFORMTHEME=appmenu-qt5
15:36:47 ++ for i in '/etc/profile.d/*.sh'
15:36:47 ++ '[' -r /etc/profile.d/apps-bin-path.sh ']'
15:36:47 ++ . /etc/profile.d/apps-bin-path.sh
15:36:47 +++ PATH=/usr/java/jdk1.8.0_161//bin:/usr/java/jdk1.8.0_161//bin:/usr/local/maven/bin:/usr/java/jdk1.8.0_161/bin:/opt/distribution/hadoop/bin:/opt/distribution/spark/bin:/opt/distribution/spark/sbin:/usr/lib/jvm/jdk-8u211/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/redis/bin:/snap/bin
15:36:47 ++ for i in '/etc/profile.d/*.sh'
15:36:47 ++ '[' -r /etc/profile.d/bash_completion.sh ']'
15:36:47 ++ . /etc/profile.d/bash_completion.sh
15:36:47 +++ '[' -n '4.3.48(1)-release' -a -n '' -a -z '' ']'
15:36:47 ++ for i in '/etc/profile.d/*.sh'
15:36:47 ++ '[' -r /etc/profile.d/cedilla-portuguese.sh ']'
15:36:47 ++ . /etc/profile.d/cedilla-portuguese.sh
15:36:47 +++ '[' pt = pt -a en '!=' pt ']'
15:36:47 +++ export LC_CTYPE=pt_BR.UTF-8
15:36:47 +++ LC_CTYPE=pt_BR.UTF-8
15:36:47 ++ for i in '/etc/profile.d/*.sh'
15:36:47 ++ '[' -r /etc/profile.d/vte-2.91.sh ']'
15:36:47 ++ . /etc/profile.d/vte-2.91.sh
15:36:47 +++ '[' -n '4.3.48(1)-release' -o -n '' ']'
15:36:47 +++ [[ ehxB == *i* ]]
15:36:47 +++ return 0
15:36:47 ++ unset i
15:36:47 ++ TZ=Asia/Shanghai
15:36:47 ++ export TZ
15:36:47 ++ ulimit -S -c unlimited
15:36:47 ++ export AIRFLOW_HOME=/usr/local/airflow
15:36:47 ++ AIRFLOW_HOME=/usr/local/airflow
15:36:47 ++ export JAVA_HOME=/usr/java/jdk1.8.0_161
15:36:47 ++ JAVA_HOME=/usr/java/jdk1.8.0_161
15:36:47 ++ export JRE_HOME=/usr/java/jdk1.8.0_161/jre
15:36:47 ++ JRE_HOME=/usr/java/jdk1.8.0_161/jre
15:36:47 ++ export CLASSPATH=/usr/java/jdk1.8.0_161/lib
15:36:47 ++ CLASSPATH=/usr/java/jdk1.8.0_161/lib
15:36:47 ++ export HADOOP_HOME=/opt/distribution/hadoop
15:36:47 ++ HADOOP_HOME=/opt/distribution/hadoop
15:36:47 ++ export SPARK_HOME=/opt/distribution/spark
15:36:47 ++ SPARK_HOME=/opt/distribution/spark
15:36:47 ++ export PATH=/usr/java/jdk1.8.0_161/bin:/opt/distribution/hadoop/bin:/opt/distribution/spark/bin:/opt/distribution/spark/sbin:/usr/java/jdk1.8.0_161//bin:/usr/java/jdk1.8.0_161//bin:/usr/local/maven/bin:/usr/java/jdk1.8.0_161/bin:/opt/distribution/hadoop/bin:/opt/distribution/spark/bin:/opt/distribution/spark/sbin:/usr/lib/jvm/jdk-8u211/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/redis/bin:/snap/bin
15:36:47 ++ PATH=/usr/java/jdk1.8.0_161/bin:/opt/distribution/hadoop/bin:/opt/distribution/spark/bin:/opt/distribution/spark/sbin:/usr/java/jdk1.8.0_161//bin:/usr/java/jdk1.8.0_161//bin:/usr/local/maven/bin:/usr/java/jdk1.8.0_161/bin:/opt/distribution/hadoop/bin:/opt/distribution/spark/bin:/opt/distribution/spark/sbin:/usr/lib/jvm/jdk-8u211/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/redis/bin:/snap/bin
15:36:47 ++ export PATH=/usr/java/jdk1.8.0_161/bin:/opt/distribution/hadoop/bin:/opt/distribution/spark/bin:/opt/distribution/spark/sbin:/usr/java/jdk1.8.0_161//bin:/usr/java/jdk1.8.0_161//bin:/usr/local/maven/bin:/usr/java/jdk1.8.0_161/bin:/opt/distribution/hadoop/bin:/opt/distribution/spark/bin:/opt/distribution/spark/sbin:/usr/lib/jvm/jdk-8u211/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/redis/bin:/snap/bin:/usr/local/redis/bin
15:36:47 ++ PATH=/usr/java/jdk1.8.0_161/bin:/opt/distribution/hadoop/bin:/opt/distribution/spark/bin:/opt/distribution/spark/sbin:/usr/java/jdk1.8.0_161//bin:/usr/java/jdk1.8.0_161//bin:/usr/local/maven/bin:/usr/java/jdk1.8.0_161/bin:/opt/distribution/hadoop/bin:/opt/distribution/spark/bin:/opt/distribution/spark/sbin:/usr/lib/jvm/jdk-8u211/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/redis/bin:/snap/bin:/usr/local/redis/bin
15:36:47 ++ export MAVEN_HOME=/usr/local/maven
15:36:47 ++ MAVEN_HOME=/usr/local/maven
15:36:47 ++ export PATH=/usr/local/maven/bin:/usr/java/jdk1.8.0_161/bin:/opt/distribution/hadoop/bin:/opt/distribution/spark/bin:/opt/distribution/spark/sbin:/usr/java/jdk1.8.0_161//bin:/usr/java/jdk1.8.0_161//bin:/usr/local/maven/bin:/usr/java/jdk1.8.0_161/bin:/opt/distribution/hadoop/bin:/opt/distribution/spark/bin:/opt/distribution/spark/sbin:/usr/lib/jvm/jdk-8u211/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/redis/bin:/snap/bin:/usr/local/redis/bin
15:36:47 ++ PATH=/usr/local/maven/bin:/usr/java/jdk1.8.0_161/bin:/opt/distribution/hadoop/bin:/opt/distribution/spark/bin:/opt/distribution/spark/sbin:/usr/java/jdk1.8.0_161//bin:/usr/java/jdk1.8.0_161//bin:/usr/local/maven/bin:/usr/java/jdk1.8.0_161/bin:/opt/distribution/hadoop/bin:/opt/distribution/spark/bin:/opt/distribution/spark/sbin:/usr/lib/jvm/jdk-8u211/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/redis/bin:/snap/bin:/usr/local/redis/bin
15:36:47 + echo JOB_NAME ptest
15:36:47 JOB_NAME ptest
15:36:47 + echo WORKSPACE /root/.jenkins/workspace/ptest
15:36:47 WORKSPACE /root/.jenkins/workspace/ptest
15:36:47 + pwd
15:36:47 /root/.jenkins/workspace/ptest
15:36:47 + cd /root/.jenkins/workspace/ptest
15:36:47 + mvn clean install -DskipTests=true
15:36:49 [INFO] Scanning for projects...
15:36:49 [INFO] 
15:36:49 [INFO] ------------------------------------------------------------------------
15:36:49 [INFO] Building ly-simple-tomcat 0.0.1-SNAPSHOT
15:36:49 [INFO] ------------------------------------------------------------------------
15:36:50 [INFO] 
15:36:50 [INFO] --- maven-clean-plugin:3.0.0:clean (default-clean) @ ly-simple-tomcat ---
15:36:50 [INFO] Deleting /root/.jenkins/workspace/ptest/target
15:36:50 [INFO] 
15:36:50 [INFO] --- maven-resources-plugin:3.0.1:resources (default-resources) @ ly-simple-tomcat ---
15:36:51 [INFO] Using 'UTF-8' encoding to copy filtered resources.
15:36:51 [INFO] Copying 1 resource
15:36:51 [INFO] Copying 136 resources
15:36:51 [INFO] 
15:36:51 [INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ ly-simple-tomcat ---
15:36:52 [INFO] Changes detected - recompiling the module!
15:36:52 [INFO] Compiling 7 source files to /root/.jenkins/workspace/ptest/target/classes
15:36:53 [INFO] 
15:36:53 [INFO] --- maven-resources-plugin:3.0.1:testResources (default-testResources) @ ly-simple-tomcat ---
15:36:53 [INFO] Using 'UTF-8' encoding to copy filtered resources.
15:36:53 [INFO] skip non existing resourceDirectory /root/.jenkins/workspace/ptest/src/test/resources
15:36:53 [INFO] 
15:36:53 [INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ ly-simple-tomcat ---
15:36:53 [INFO] No sources to compile
15:36:53 [INFO] 
15:36:53 [INFO] --- maven-surefire-plugin:2.21.0:test (default-test) @ ly-simple-tomcat ---
15:36:54 [INFO] Tests are skipped.
15:36:54 [INFO] 
15:36:54 [INFO] --- maven-war-plugin:3.1.0:war (default-war) @ ly-simple-tomcat ---
15:36:55 [INFO] Packaging webapp
15:36:55 [INFO] Assembling webapp [ly-simple-tomcat] in [/root/.jenkins/workspace/ptest/target/ly-simple-tomcat-0.0.1-SNAPSHOT]
15:36:55 [INFO] Processing war project
15:36:55 [INFO] Webapp assembled in [188 msecs]
15:36:55 [INFO] Building war: /root/.jenkins/workspace/ptest/target/ly-simple-tomcat-0.0.1-SNAPSHOT.war
15:36:55 [INFO] 
15:36:55 [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ ly-simple-tomcat ---
15:36:56 [INFO] Installing /root/.jenkins/workspace/ptest/target/ly-simple-tomcat-0.0.1-SNAPSHOT.war to /root/.m2/repository/com/ly/simple/ly-simple-tomcat/0.0.1-SNAPSHOT/ly-simple-tomcat-0.0.1-SNAPSHOT.war
15:36:57 [INFO] Installing /root/.jenkins/workspace/ptest/pom.xml to /root/.m2/repository/com/ly/simple/ly-simple-tomcat/0.0.1-SNAPSHOT/ly-simple-tomcat-0.0.1-SNAPSHOT.pom
15:36:57 [INFO] ------------------------------------------------------------------------
15:36:57 [INFO] BUILD SUCCESS
15:36:57 [INFO] ------------------------------------------------------------------------
15:36:57 [INFO] Total time: 8.171 s
15:36:57 [INFO] Finished at: 2019-05-31T15:36:57+08:00
15:36:57 [INFO] Final Memory: 31M/182M
15:36:57 [INFO] ------------------------------------------------------------------------
15:36:57 + cd target
15:36:57 + mv ly-simple-tomcat-0.0.1-SNAPSHOT.war ROOT.war
15:36:57 + /usr/bin/ansible-playbook /etc/ansible/playbook/tomcat1.yml --extra-vars ware_path=ptest
15:37:03 
15:37:03 PLAY ***************************************************************************
15:37:03 
15:37:03 TASK [setup] *******************************************************************
15:37:05 ok: [192.168.5.103]
15:37:05 
15:37:05 TASK [停止 tomcat] ***************************************************************
15:37:06 changed: [192.168.5.103]
15:37:06 
15:37:06 TASK [删除tomcat下的ROOT目录] ********************************************************
15:37:11 changed: [192.168.5.103]
15:37:11 
15:37:11 TASK [创建tomcat下 空的ROOT目录] ******************************************************
15:37:16 changed: [192.168.5.103]
15:37:16 
15:37:16 TASK [解压war包 到tomcat ROOT下] ****************************************************
15:37:19 changed: [192.168.5.103]
15:37:19 
15:37:19 TASK [启动 tomcat ,当前版本是 5.4.3] **************************************************
15:37:25 changed: [192.168.5.103]
15:37:25 
15:37:25 TASK [等待 5秒钟] ******************************************************************
15:37:36 changed: [192.168.5.103]
15:37:36 
15:37:36 PLAY RECAP *********************************************************************
15:37:36 192.168.5.103              : ok=7    changed=6    unreachable=0    failed=0   
15:37:36 
15:37:36 Finished: SUCCESS