Jenkins 部署java项目 - 无参
1. 介绍¶
本部署无参的java项目,坦白的说,我最烦的就是java的东西,各种环境变量问题,TMD有时候一个小问题,整半天。
有参和无参只是 是否传递给playbook参数。本章节直接使用ansbile-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 tomcat.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 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/blog/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/tomcat.yml
$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后台,点击左上角 新建任务 , 选择构建一个自由风格软件项目
效果图如下:
立即构建后控制台输出
成功控制台输出 16:24:32 Started by user caimengzhi 16:24:32 Building in workspace /root/.jenkins/workspace/blog 16:24:32 No credentials specified 16:24:32 > git rev-parse --is-inside-work-tree # timeout=10 16:24:32 Fetching changes from the remote Git repository 16:24:32 > git config remote.origin.url https://github.com/caimengzhi/tomcat-java-demo.git # timeout=10 16:24:32 Fetching upstream changes from https://github.com/caimengzhi/tomcat-java-demo.git 16:24:32 > git --version # timeout=10 16:24:32 > git fetch --tags --progress https://github.com/caimengzhi/tomcat-java-demo.git +refs/heads/*:refs/remotes/origin/* 16:24:34 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 16:24:34 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10 16:24:34 Checking out Revision 2204ed7c48daca5d7189eb99f45d0bfe1275835a (refs/remotes/origin/master) 16:24:34 > git config core.sparsecheckout # timeout=10 16:24:34 > git checkout -f 2204ed7c48daca5d7189eb99f45d0bfe1275835a 16:24:34 Commit message: "first commit" 16:24:34 > git rev-list --no-walk 2204ed7c48daca5d7189eb99f45d0bfe1275835a # timeout=10 16:24:34 [blog] $ /bin/sh -xe /usr/local/jenkins/temp/jenkins2666968793533841646.sh 16:24:34 + source /etc/profile 16:24:34 ++ '[' '' ']' 16:24:34 ++ '[' -d /etc/profile.d ']' 16:24:34 ++ for i in '/etc/profile.d/*.sh' 16:24:34 ++ '[' -r /etc/profile.d/appmenu-qt5.sh ']' 16:24:34 ++ . /etc/profile.d/appmenu-qt5.sh 16:24:34 +++ export QT_QPA_PLATFORMTHEME=appmenu-qt5 16:24:34 +++ QT_QPA_PLATFORMTHEME=appmenu-qt5 16:24:34 ++ for i in '/etc/profile.d/*.sh' 16:24:34 ++ '[' -r /etc/profile.d/apps-bin-path.sh ']' 16:24:34 ++ . /etc/profile.d/apps-bin-path.sh 16:24:34 +++ 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 16:24:34 ++ for i in '/etc/profile.d/*.sh' 16:24:34 ++ '[' -r /etc/profile.d/bash_completion.sh ']' 16:24:34 ++ . /etc/profile.d/bash_completion.sh 16:24:34 +++ '[' -n '4.3.48(1)-release' -a -n '' -a -z '' ']' 16:24:34 ++ for i in '/etc/profile.d/*.sh' 16:24:34 ++ '[' -r /etc/profile.d/cedilla-portuguese.sh ']' 16:24:34 ++ . /etc/profile.d/cedilla-portuguese.sh 16:24:34 +++ '[' pt = pt -a en '!=' pt ']' 16:24:34 +++ export LC_CTYPE=pt_BR.UTF-8 16:24:34 +++ LC_CTYPE=pt_BR.UTF-8 16:24:34 ++ for i in '/etc/profile.d/*.sh' 16:24:34 ++ '[' -r /etc/profile.d/vte-2.91.sh ']' 16:24:34 ++ . /etc/profile.d/vte-2.91.sh 16:24:34 +++ '[' -n '4.3.48(1)-release' -o -n '' ']' 16:24:34 +++ [[ ehxB == *i* ]] 16:24:34 +++ return 0 16:24:34 ++ unset i 16:24:34 ++ TZ=Asia/Shanghai 16:24:34 ++ export TZ 16:24:34 ++ ulimit -S -c unlimited 16:24:34 ++ export AIRFLOW_HOME=/usr/local/airflow 16:24:34 ++ AIRFLOW_HOME=/usr/local/airflow 16:24:34 ++ export JAVA_HOME=/usr/java/jdk1.8.0_161 16:24:34 ++ JAVA_HOME=/usr/java/jdk1.8.0_161 16:24:34 ++ export JRE_HOME=/usr/java/jdk1.8.0_161/jre 16:24:34 ++ JRE_HOME=/usr/java/jdk1.8.0_161/jre 16:24:34 ++ export CLASSPATH=/usr/java/jdk1.8.0_161/lib 16:24:34 ++ CLASSPATH=/usr/java/jdk1.8.0_161/lib 16:24:34 ++ export HADOOP_HOME=/opt/distribution/hadoop 16:24:34 ++ HADOOP_HOME=/opt/distribution/hadoop 16:24:34 ++ export SPARK_HOME=/opt/distribution/spark 16:24:34 ++ SPARK_HOME=/opt/distribution/spark 16:24:34 ++ 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 16:24:34 ++ 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 16:24:34 ++ 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 16:24:34 ++ 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 16:24:34 ++ export MAVEN_HOME=/usr/local/maven 16:24:34 ++ MAVEN_HOME=/usr/local/maven 16:24:34 ++ 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 16:24:34 ++ 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 16:24:34 + echo JOB_NAME blog 16:24:34 JOB_NAME blog 16:24:34 + echo WORKSPACE /root/.jenkins/workspace/blog 16:24:34 WORKSPACE /root/.jenkins/workspace/blog 16:24:34 + pwd 16:24:34 /root/.jenkins/workspace/blog 16:24:34 + cd /root/.jenkins/workspace/blog 16:24:34 + mvn clean install -DskipTests=true 16:24:35 [INFO] Scanning for projects... 16:24:35 [INFO] 16:24:35 [INFO] ------------------------------------------------------------------------ 16:24:35 [INFO] Building ly-simple-tomcat 0.0.1-SNAPSHOT 16:24:35 [INFO] ------------------------------------------------------------------------ 16:24:36 [INFO] 16:24:36 [INFO] --- maven-clean-plugin:3.0.0:clean (default-clean) @ ly-simple-tomcat --- 16:24:37 [INFO] Deleting /root/.jenkins/workspace/blog/target 16:24:37 [INFO] 16:24:37 [INFO] --- maven-resources-plugin:3.0.1:resources (default-resources) @ ly-simple-tomcat --- 16:24:37 [INFO] Using 'UTF-8' encoding to copy filtered resources. 16:24:37 [INFO] Copying 1 resource 16:24:37 [INFO] Copying 136 resources 16:24:38 [INFO] 16:24:38 [INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ ly-simple-tomcat --- 16:24:38 [INFO] Changes detected - recompiling the module! 16:24:38 [INFO] Compiling 7 source files to /root/.jenkins/workspace/blog/target/classes 16:24:42 [INFO] 16:24:42 [INFO] --- maven-resources-plugin:3.0.1:testResources (default-testResources) @ ly-simple-tomcat --- 16:24:42 [INFO] Using 'UTF-8' encoding to copy filtered resources. 16:24:42 [INFO] skip non existing resourceDirectory /root/.jenkins/workspace/blog/src/test/resources 16:24:42 [INFO] 16:24:42 [INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ ly-simple-tomcat --- 16:24:42 [INFO] No sources to compile 16:24:42 [INFO] 16:24:42 [INFO] --- maven-surefire-plugin:2.21.0:test (default-test) @ ly-simple-tomcat --- 16:24:43 [INFO] Tests are skipped. 16:24:43 [INFO] 16:24:43 [INFO] --- maven-war-plugin:3.1.0:war (default-war) @ ly-simple-tomcat --- 16:24:45 [INFO] Packaging webapp 16:24:45 [INFO] Assembling webapp [ly-simple-tomcat] in [/root/.jenkins/workspace/blog/target/ly-simple-tomcat-0.0.1-SNAPSHOT] 16:24:45 [INFO] Processing war project 16:24:45 [INFO] Webapp assembled in [871 msecs] 16:24:47 [INFO] Building war: /root/.jenkins/workspace/blog/target/ly-simple-tomcat-0.0.1-SNAPSHOT.war 16:24:48 [INFO] 16:24:48 [INFO] --- maven-install-plugin:2.5.2:install (default-install) @ ly-simple-tomcat --- 16:24:49 [INFO] Installing /root/.jenkins/workspace/blog/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 16:24:49 [INFO] Installing /root/.jenkins/workspace/blog/pom.xml to /root/.m2/repository/com/ly/simple/ly-simple-tomcat/0.0.1-SNAPSHOT/ly-simple-tomcat-0.0.1-SNAPSHOT.pom 16:24:49 [INFO] ------------------------------------------------------------------------ 16:24:49 [INFO] BUILD SUCCESS 16:24:49 [INFO] ------------------------------------------------------------------------ 16:24:49 [INFO] Total time: 14.473 s 16:24:49 [INFO] Finished at: 2019-05-31T16:24:49+08:00 16:24:50 [INFO] Final Memory: 29M/203M 16:24:50 [INFO] ------------------------------------------------------------------------ 16:24:50 + cd target 16:24:50 + mv ly-simple-tomcat-0.0.1-SNAPSHOT.war ROOT.war 16:24:51 [blog] $ /usr/bin/ansible-playbook /etc/ansible/playbook/tomcat.yml -f 5 16:25:00 16:25:00 PLAY *************************************************************************** 16:25:00 16:25:00 TASK [setup] ******************************************************************* 16:25:12 ok: [192.168.5.103] 16:25:13 16:25:13 TASK [停止 tomcat] *************************************************************** 16:25:13 changed: [192.168.5.103] 16:25:13 16:25:13 TASK [删除tomcat下的ROOT目录] ******************************************************** 16:25:19 changed: [192.168.5.103] 16:25:19 16:25:19 TASK [创建tomcat下 空的ROOT目录] ****************************************************** 16:25:24 changed: [192.168.5.103] 16:25:24 16:25:24 TASK [解压war包 到tomcat ROOT下] **************************************************** 16:25:27 changed: [192.168.5.103] 16:25:27 16:25:27 TASK [启动 tomcat ,当前版本是 5.4.3] ************************************************** 16:25:32 changed: [192.168.5.103] 16:25:32 16:25:32 TASK [等待 5秒钟] ****************************************************************** 16:25:42 changed: [192.168.5.103] 16:25:42 16:25:42 PLAY RECAP ********************************************************************* 16:25:42 192.168.5.103 : ok=7 changed=6 unreachable=0 failed=0 16:25:42 16:25:42 Finished: SUCCESS