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后台,点击左上角 新建任务 , 选择构建一个自由风格软件项目
立即构建后控制台输出
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