一、构建一个maven项目
在jenkins主页上,左侧,选择“新建”,然后填写项目名称,选择“构建一个maven项目”
二、Git配置
保存之后,进入详细配置页面:
这里的源码管理:选择git,输入代码的git地址,Credentials,填写代码分支(默认是*/master主分支)
Credentials,需要点击Add按钮,添加具体的git凭证,
①如果当前git项目配置为通过用户名+密码认证,则kind选择username with password;
centos的root用户生成的公钥密钥信息位置信息如下:
②如果用的是公钥+私钥的方式,则kind需要选择:ssh username with private key
在private key里面填写私钥,私钥 位置(在开通git代码权限时生成):
windows下:C:UsersAdministrator.sshid_rsa
centos 下 /root/.ssh/id_rsa
文件内容:
此时需要把这个id_rsa文件中的所有内容都粘贴到文本框中(包括BEGIN RSA PRIVATE KEY和END RSA PRIVATE KEY这两行)
三、构建项目触发器
build periodically:周期性构建,比如每隔十分钟构建一次,是通过cron表达式控制的,具体可以点击右侧的帮助
poll scm:每隔多长时间pull一次代码,如果有更新,则编译,也是通过cron表达式控制的
点击后面的?标识可以查看说明:
配置maven编译的pom文件和部署脚本:
root pom文件:由于现在当前文章中tool代码中的主pom.xml就在根目录下,所以root pom直接填写:pom.xml
如果不是在根目录下,例如:toolsamdin项目中的pom.xml文件,则root pom直接填写:toolsamdinpom.xml
goals and options:这里调用maven的命令:clean install(如果项目中配置了多套配置文件profile,这里需要应用id=test的profile这套配置,则此处填写:clean install -P test)
这里我们简单的测试一下,写一个 clean install
点击立即构建:
第一次由于要拉代码,所以比较慢,过了一会之后,出现如下变化:
这里蓝色的圈表示成功,红色表示失败
点击 # 进去之后
点击 Console Output 查看本次构建的输出记录 ,最底部显示成功,如果有错误的话,这里会显示失败信息的。
这时候,去我们的centos服务器的/root/.jenkins/jobs 目录下查看变化,首先多了一个weds-common文件夹,这个是根据我们的job的名字创建的。
进入目录中 cd weds-common目录,查看
这里是项目的构建记录
进入 cd /root/.jenkins/workspace/ 目录查看
这里多了我们的项目文件夹,这个是从我们的git服务器上pull下来的代码
至此,本机的拉取,构建代码大功告成。
四、构建项目发布到远程linux centos 服务器
点击Post Steps,如图是一个正确的配置,报错可以不管。
其中SSH Server是我们之前在系统设置 Publish over SSH 中设置好的
post steps需要发布到远程linux,所以选择:
然后填写目标war或jar到远程linux机器上的哪个目录下,然后调用远程机器上的shell脚本,自动重启tomcat,自动备份等功能
其 中Source files的目录是基于当前job的目录(可以从jenkins的安装目录下找到):例如当前job名称为weds-common,则对于root用户,Source files中的目录是相对于/root/.jenkins/workspace/weds-common目录下的,因此,如果我们要发送weds-common下的weds-pay项目的war包,这里需要填写:weds-pay/target/weds-pay.war
Remove prefix:表示需要移除的目录,比如这里填写weds-pay/target,则表示发布时,只把weds-pay.war发布到远程linux,而不包含weds-pay/target目录结构
Remote directory:表示需要把编译好的war包发布到远程linux的哪个目录下
Exec command:需要执行的shell命令,shell命令在远程linux服务器上,比如。一般是需要执行:停止tomcat,复制war到tomcat,备份,启动tomcat等。
注:本人在配置的是soure files 路径填写有问题,导致构建的时候, Console Output一直报SSH: Transferred 0 file(s),关于相对路径的问题,如果搞不清楚是该相对于谁,请看下图:
四种第一个截图里的 test.sh的内容:该shell命令的作用是备份上传文件,删除tomcat中原来的项目文件(由于tomcat自动解压缩,所以这里删除原来的文件,等一小会后会自动上传文件并且解压缩)
#!/bin/bash #传参测试脚本 export LANG="en_US.UTF-8"
PROJECT=$1 BAK_DIR=/usr/local/autodeploy/bak/$PROJECT
TEMP_DIR=/usr/local/autodeploy/temp/$PROJECT
TOMCAT_HOME=/usr/local/tomcat
if [ -f $TEMP_DIR/$PROJECT.war ]; then
#sleep 3
if [ -f $TOMCAT_HOME/webapps/$PROJECT.war ];
then echo "===================deleteing old war==================="
rm -rf $TOMCAT_HOME/webapps/$PROJECT.war
rm -rf $TOMCAT_HOME/webapps/$PROJECT
else
echo "===================old war not exits==================="
fi
echo "===================copying new war==================="
cp $TEMP_DIR/$PROJECT.war $TOMCAT_HOME/webapps/$PROJECT.war
echo "===================baking war==================="
mkdir -p $BAK_DIR
cp $TOMCAT_HOME/webapps/$PROJECT.war $BAK_DIR/"$PROJECT"_`date +%Y%m%d%H%M%S`.war
echo "===================deleteing temp file==================="
rm -rf $TEMP_DIR/$PROJECT.war
echo "===================finished=========================="
else
echo "===================temp file not exits===================" fi