“test-jb-setup”
参考资料 https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin
#1、全局配置 全局配置比较简单,在git区段 主要是git的命令路径,默认使用git。 也就是说,我们通过客户端登陆上来以后,git能使用就不用管理,通常是可以的。也可以指定一个详细的路径。
如果没有安装也可以让jenkins来安装,我没去折腾,原来就装好了
#2、项目配置 安装了git插件以后,在项目的源码那里会有一个git的选项。指定git的地址。后台采用gogs,它会告诉我们ssh和http地址。
有2种方式登陆。
它指定一个url地址,gogs默认是3000端口,如
http://xxxx:3000/xxxxx.git
另外需要配置一个用户名,它使用的是jenkins本身的一个Credentials。它指定不同的认证认识。这里采用 用户名/密码
还是上面的地方,使用ssh key的方式。
不管用上面方式,它都会马上告诉我们是否成功。但是我发现ssh方式很杯具的失败了,等我搞定了再完善这个文章吧
#3、调试 发现用ssh失败了以后,系统给出一个命令
Failed to connect to repository : Command “git -c core.askpass=true ls-remote -h git@127.0.0.1:xxx/api.git HEAD” returned status code 128: stdout:
所以我理解应该在jenkins这个服务器上可以访问git才对。而我已经在gogs上把key放进去了,为啥还是不行呢。如果我在jenkins服务器上通过命令行可以访问应该就没有了吧。
所以开了2个终端,一个执行
ssh -v host -l user
从这个命令可以看到连接进来的人,以及验证的情况。
另外一个执行
ssh -vvv -T git@服务器
这个上一篇文章介绍过,可以看到整个执行过程,不过然并卵,没搞定
debug1: Found key in /root/.ssh/known_hosts:4
debug1: ssh_ecdsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /root/.ssh/id_rsa_jenkins (0x7f293cff9af0), explicit
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug3: start over, passed a different list publickey,gssapi-keyex,gssapi-with-mic,password
debug3: preferred publickey
debug3: authmethod_lookup publickey
debug3: remaining preferred:
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /root/.ssh/id_rsa_jenkins
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
或者用这个来测试连接情况
ssh -p 1022 -i ~/.ssh/id_rsa_jenkins -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null git@test.com
#4、自动合并设置tags
#4.1、自动合并 因为有多个环境,在git上做处理的时候,希望打包之前自动合并,这个时候可以借助git插件完成。 不同版本的jenkins会有所区别。现在的版本是在版本控制那里有一个Additional Behaviours。点开有个选项
Merge berore build
一共有4个选项
后面两个默认,最后会转换成git命令
git recv-parse origin/qa 会返回一个很长的版本id号,原理大概是获取最新版本吧。
这里的 斜杠 是自动加的,所以注意一下
其实,这是个坑,它的意思是把当前合并到其他地方
#4.2、自动设标签
如果发布到正式环境,我们希望发包以后在git库里面加一个标签,这个时候需要用一个编译后的处理。点开构建后执行操作,选Git Publisher。 在Tags里面设置
有个问题,打的标签名没有时间戳,虽然它说有,但是不能用,装了ZenTimestamp可以,装了以后会多一个选项
Change date pattern for the BUILD_TIMESTAMP (build timestamp) variable
格式为 YYYYMMDDhhmmss
“test-jb-setup” 官方参考 https://wiki.jenkins-ci.org/display/JENKINS/Publish+Over+SSH+Plugin
通过publish over sh插件可以解决执行远程命令个问题 本质上还是执行一个脚本,放在远程可以减少点复杂度,每个脚本各管各的
为了能使用key可以顺利执行,需要在目标服务器添加对key的认证,简单说就是对方把自己的key认可为认证过的key。
如果没有key文件,可以生成一个key文件。
ssh-keygen -t rsa -b 4096 -C "xx@xx.xx"
这里可以设置key的位置,和密码,密码可以为空
上传到目标服务器
scp -P xx ~/.ssh/id_rsaxxxx.pub root@服务器:/目标路径/
这里如果端口是22,就不要加-P
登录到目标服务器。
cat /刚刚上传的文件名 >>~/.ssh/authorized_keys
这样就把我们的公钥合并到authorized_keys。
ssh -p 端口好 -i key文件 用户名@服务器
如果正常就可以了。如果有问题,可以通过另外的参数来调试.
ssh -i key文件 -vvvvvvvvv -T git@服务器
这里的v个数根据情况定,多点调试信息就全一点。 它会列出完整的过程,如果.ssh下面有config文件,它会先去匹配里面的内容。
安装完插件以后,在全局配置里面,会有一个Publish over SSH区段。 里面设置key相关的信息。
在项目的Add Pre—build Step和Add Post—Build Step里面会有一个选项 Send Files or Exeucte commands over ssh
按照惯例,这里还可以对服务器单独设置key。除此之外还可以设置重试次数(以及相互之间的时间间隔)
在Transfers里面,有2个主要的内容:
Transfer Set Source Files
要传输的文件,如果有多个文件,用逗号分隔
这个是相对路径,相对于jenkins的项目路径
Exec Command 要执行的命令。就是一个命令。
目前发现是先执行Exec Command,再传输Source Files,所以需要设置2个Transfer
在高级里面还有些设定,比如哪些文件不执行。文件夹格式,运行超时时间等等
这里的命令主要作用是停止tomcat,删除原来的war,拷贝新war到指定路径,启动tomcat。这个过程是可控的,如果中间出现异常,jenkins会侦测到。
“test-jb-setup”
有了这么强大的工具,万一编译失败了咋整。所以通知变得非常重要。Jenkins默认提供了邮件通知的功能。
jenkins的配置有全局和项目之分。很多配置会体现
在系统管理——>系统配置,可以看到有一个邮件的配置,这里用来配置smtp。整个jenkins都是通过这个来发送邮件的。和一般的客户端(如Foxmail)配置类似。我用的腾讯企业邮箱。所以几个关键配置项如下:
最后测试,这里需要输入一个收件人。这个可以随便写。最后提示
Email was successfully sent 表示成功了
如果提示
com.sun.mail.smtp.SMTPSendFailedException: 501 mail from address must be same as authorization user
那恭喜中奖了,其实很简单。在这个页面的 Jenkins Location部分,有一个系统管理员邮件地址,这里要和上面设置的用户名一直,即验证的一致
收件人是在项目中设置的,设置具体项目属性的时候,有一个地方设置收件人以及触发条件。 这里有个需要注意,收件人是通过** 逗号 **分隔的。
用上面的方法配置出来的邮件比较简单。
所以建议这些原因,增加了2个扩展,上一节已经提到。设置的地方还是在系统管理里面。在Extended E-mail Notification区段
和上面的配置一样,设置smtp的信息,网上看到有一个配置项,是用来覆盖系统默认的邮件发送设置的。Override Global Settings。 但是一直没找到。结果是,如果这里不设置smtp,那就没有自定义的邮件发送,设置了就会收到2封邮件。这不坑爹吗?
使用这个配置可以扩展2个部分,邮件的内容格式,已经触发条件。可以设置全局一个模板,具体项目里面直接引用即可(默认值不动)。另外在项目里面设置。里面有2个设置。一个是系统默认的那个邮件设置。里面可以写收件人。
就是说,系统默认的邮件发送可以设置收件人,但是ext设置了Project Recipient List,并没有卵用
设置的位置比较怪异,是在 “操作后构建-Enabled Email Notification”
内容默认需要设置3个内容
text/html
构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!
(本邮件是程序自动下发的,请勿回复,<span style="color:red">请相关人员fix it,重新提交到git 构建</span>)<br/>
<hr/>
项目名称:$PROJECT_NAME<br/>
<hr/>
构建编号:$BUILD_NUMBER<br/>
<hr/>
GIT版本号:${GIT_REVISION}<br/>
<hr/>
构建状态:$BUILD_STATUS<br/>
<hr/>
触发原因:${CAUSE}<br/>
<hr/>
构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/>
<hr/>
构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/>
<hr/>
变更集:${JELLY_SCRIPT,template="html"}<br/>
<hr/>
设置了它以后,还需要设置trigger,不够都没有卵用,反正收件人还是1个人
“test-jb-setup”
默认情况下,Jenkins已经安装了很多插件,可以从服务器管理界面看到
#1、安装方式
离线安装
由于网络等原因,有些插件无法通过在线方式安装,可以通过离线的方式安装。还是在在线安装的位置,有一个高级标签,里面可以上传插件并安装。
通常安装失败会有提示信息,告知可能是网络超时等等,我们可以根据这个url去下载插件文件(扩展名是hpi)
这里的搜索过滤功能还不错。 另外官方还有一个专门的地址可以下载插件。https://wiki.jenkins-ci.org/display/JENKINS/Plugins
默认情况下,jenkins目前不支持git,而是需要通过插件来完成。git比较特别需要2个插件,git和git-client,非常幸运的是,这俩插件在线安装失败了,然后就通过上面的离线方式解决了,在官网可以下载到,反正需要俩一起装,好像是先装git。
GIT plugin/GIT client plugin
因为项目是基于maven的。所以需要这个插件,装好以后会发现,新建项目的时候,有一个maven的项目类型,这也算是一个扩展了。
Maven Integration plugin
这个插件的作用,可以说是调用远程的命令执行,完成一些工作
Publish Over SSH
其实还不知道它是干嘛的,先拷贝一段话吧
尽管Git库可以同步多个git库,但是需要注意的是Git插件提供branch选项尽管可是该多个,但是是针对与每一个库同时检索多个branch,这个不符合我们使用的原则。对于部署来说,只需要调用一个Git库中的一个分支。
http://blog.csdn.net/disappearedgod/article/details/43406019
Multiple SCMs plugin
邮件通知折腾了好长时间,主要是目的是让通知的形式更丰富一点,内容可以扩展一点
Email Extension Plugin/Email Extension Template Plugin
“test-jb-setup”
jenkins的官方网站是https://jenkins-ci.org/ 上面有详细的安装方式介绍 Jenkins就是一个war文件,通过官网下载war包即可。 而各个平台的不同安装方式也主要是把这个war下载下来。Jenkins支持的平台很多,现在也支持Docker的方式来做。
如果是在CentOS下,可以通过yum来安装
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
yum install jenkins
其他的环境也是类似。 这样安装完成以后启动是比较简单的。直接通过service命令即可
service jenkins start/stop/restart
但是用这个方法我居然一直没启动成功。装上去放了很久就放弃了。报错,官方说是没有装Java的原因。
Starting jenkins (via systemctl): Job for jenkins.service failed. See 'systemctl status jenkins.service' and 'journalctl -xn' for details.
[FAILED]
这个问题就不纠结了。主要还是因为这个服务器上放了很多服务,实在不想来一个就起一个tomcat。所以想着既然是war,应该可以直接用吧 所以就把war放到webapps下了
wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war
不借助tomcat,还有一种方式可以使用,即
java -jar jenkins.war --httpPort=9090
不管用上面方式安装完成以后,通过web就可以访问了。 默认情况下它并不需要登录直接可以使用。
我们可以看到,配置都在~/.jenkins里面,其中
jobs 里面放编译好的历史结果 /root/.jenkins/jobs/jeecg/modules/包名$项目名
这里还有项目的配置文件,即文件夹下面的 config.xml