Jenkins学习之路(二)—— 创建一个构建作业

上一篇已经了解了Jenkins的基础知识,也配置好了一些准备工作,现在就创建一个构建任务;

新建Job

在这里插入图片描述
点击New任务
new job
这里选择需要创建的任务类型:
1、构建一个自由风格的软件项目:这里的所有配置都由自己定义,默认也不会添加特定环境的选项
2、构建一个maven项目:Jenkins利用你的pom文件进行初始化配置,可以减少手动的配置工作
3、External Job:Jenkins可用于监视进程的非交互式执行,例如cron作业,procmail,inetd启动的进程。通常这些任务是完全不受监控的(这使得您在发生错误时很难注意到),或者无论成功或失败都会不断发送电子邮件(导致相同的情况,因为您无论如何都会快速开始忽略它们。)使用Jenkins可以让您以很少的开销监视大量此类任务。—— 选自 https://wiki.jenkins.io/display/JENKINS/Monitoring+external+jobs
4、构建一个多配置项目:适用于多环境、平台指定构建等
5、红框标出的是在已有的任务中复制一个任务配置,可以减少重复的配置工作;

以上4中常用的就是1和4,2和3暂时还没使用需求,所以我也不太了解,先不阐述了,这里就简单的创建一个任务,选择【构建一个自由风格的软件项目】即可,并在首行输入Job的名称,点击【OK】

配置Job

配置的描述,我可能表达的不一定很明确,或者用词相对不专业,大家可以点击各项配置后面的蓝色小问号了解官方的描述

1、General

在这里插入图片描述
常规配置就是基本的配置信息,填写项目描述以便于区分;

丢弃历史构建

清除历史构建
当构建的次数过多时,工作空间的内容和maven仓库的历史会可能发生如下错误

Build step 'Invoke top-level Maven targets' marked build as failure
Finished: FAILURE

以上错误,有可能是工作空间同时构建两个项目,maven构建的冲突,或者tomcat的运行空间不足,可以调高jenkins的运行内存,tomcat或者java启动的方式,各自使用方法配置,然后清理JOB的工作空间,如果可以,配置中使用丢弃旧的构建,然后填写想要保留的天数和次数;

参数化构建

参数化构建
如图,配置指定的参数时,可以再后续的配置、shell中变得很方便,重复的值就不用写shell中了,或者通过参数控制流程,按需求添加就可以;后面的脚本中使用jenkins的构建参数:${参数name} 或者 $参数name

  • 其他选项暂时简单的例子不用选择。

2、Source Code Management源码管理

在这里插入图片描述

下一项是源码管理,Jenkins构建项目,你需要告诉Jenkins项目的源码在哪获取,然后再构建获取到的源码,上图中我我使用的是git,所以安装git的相关插件后会有此显示,你可以根据自己的环境使用CVS等(我这只是限于我使用的环境讲解,如有其它环境的问题欢迎提出
然后在URL处填写可以获取到源码的地址(我使用的是我自己搭建的私有git仓库,源码和地址就不贴了,大家可以在Coding、GitHub等上传自己的项目或者找一下开源的项目都可以,私有git仓库以后也会找时间整理一下文章
Credentials中填写验证信息,就是当Jenkins获取源码时,仓库对使用者的身份验证,我使用的是ssh验证所以不需要密码,ssh是通过添加到仓库的权限文件中的key验证获取人信息的,如需要添加账号、密码,点击【Add】
在这里插入图片描述
选择Jenkins在这里插入图片描述
然后在类型中选择当前仓库所使用的的验证方式,并填写好下面所列出的必须信息,填写完成后点击【添加】
在这里插入图片描述
就可以在下拉框中选择你所添加的验证身份;
接下来Branch,是选择要获取代码仓库中那个分支上的代码,按需填写即可
再下面的Repository browser,使用默认的(Auto)即可

3、Build Triggers

在这里插入图片描述
这部分主要是配置什么情况或什么时候触发构建工作开始;
1、远程触发构建:一般情况是通过远程的脚本调用指定的地址,触发Job开始构建,触发的地址可以通过此处配置
2、其他工程构建后触发:使用场景一般是,有下游项目需要依赖上游项目构建成功的结果时使用,在此处填写上游构建工作的Job名即可;下面的选项是指定上游项目构建结果如何时才触发本Job的构建工作
3、定时构建:类似定时任务,在此处可以使用cron表达式
4、轮询SCM:根据代码版本管理的动作或轮询提交状态触发构建,也可以使用cron表达式,这项可以为空,为空时代表什么时候代码版本有新提交时(post-commit 钩子触发后)触发构建;

4、Build Environment/Build

在这里插入图片描述

Build Environment:

我是在构建项目的机器上都已经配置好了所需要的环境和环境变量,所以这一项就不需要配置了,下面的Build参数即可进行相应的操作,个人感觉这样更好一些,虽然前期搭建工程时对部署的机器操作比较多,但是脱离的Jenkins项目依然可以正常运行;个人见解,有问题请指出;
Build:可以通过下面【Add build step】添加不同的动作
我是用的是maven项目,添加maven的打包动作,如果在之前的Jenkins初始配置中配置好了全局环境变量,这里maven version的下拉框中就可以直接选择maven版本了,然后在goals中输入maven的命令clean package -Dmaven.test.skip=true(因为此项配置就是在mvn 命令下执行,Jenkins会带上mvn再执行,所以此处不需要填写mvn)

执行shell:

这就是当构建项目时,机器需要做的流程,比如将上面maven打包好的项目放到哪,如何备份、启动、发布等

#!/bin/bash

默认情况下,Jenkins采取/bin/sh -xe这种方式-x将打印每一个命令。另一个选项-e,当任何命令以非零值(当任何命令失败时)退出代码时,这会导致shell立即停止运行脚本。
#!/bin/bash是指此脚本使用/bin/bash来解释执行。
其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径。
bash只是shell的一种,还有很多其它shell,如:sh,csh,ksh,tcsh,…
#!/bin/bash只能放在第一行,如果后面还有#!,那么只能看成是注释。

此处划重点,Jenkins无法后台执行命令问题

执行shell是Jenkins来将你填写的shell脚本语句在部署的机器上执行,实际上就是Jenkins启动了子进程到部署的机器上执行命令行,所以当最后一行命令执行结束后,Jenkins会杀掉所有在此过程中创建的子进程,如果这里有需要后台运行的,或者挂起的任务时,在Jenkins执行结束后,这些挂起的或后台的任务都会被杀掉,这个问题困扰了我好久,最后整理的几种方案:
1、export BUILD_ID=dontKillMe(划重点)
nohup java -Dhudson.util.ProcessTree.disable=true -jar project.jar &
(这个我亲测好使了)
官方的-Dhudson.util.ProcessTree.disable=true论坛: https://wiki.jenkins.io/display/JENKINS/ProcessTreeKiller
2、只是为了确保启动后台进程的任何命令都将其输出重定向到磁盘文件。
例:$ java -jar project.jar > myLogFile.log 2>&1
然后问题就消失了。(这个不适用于项目已经有定向的日志输出的情况)
3、BUILD_ID = allow_to_run_as_daemon start_my_service
(官方给出的,但是试了一下,我的没好使)

使用以上方法禁止杀后台后,又一个大坑,无论是使用BUILD_ID=dontKillMe或者dontkill,还是-Dhudson.util.ProcessTree.disable=true都会导致该进程无法在jar包删除的时候主动kill掉java进程,所以jar包删除后,进程还在,但是访问不到资源了,所以不好使;然后新的jar包启动时,又会因为老的进程占用端口或服务而无法启动,这样就会导致jenkins管理的项目无法访问、崩溃,所以使用该方式使进程后台不被jenkins杀死时,需要在准备启动新的服务时,使用脚本判断旧进程是否在运行,运行的话就kill掉旧的进程,才可以启动新的进程

查看并杀进程的方法:

old_build_pid=`ps -ef|grep ****你的项目.jar|grep -v grep|awk '{print $2}'`
if [ -n "$old_build_pid" ]; then
echo '上次构建版本进程' $old_build_pid '正在运行,即将中断 kill pid = ' $old_build_pid
kill -9 $old_build_pid
echo '已结束旧的项目进程' $old_build_pid
fi

Jenkis定义的环境变量

可以在jenkins构建的过程中使用ps -aux|grep es-web查看当前进程状态,不能使用jobs的原因是jobs只能查看当前用户执行的后台进程,其他用户创建的当前用户无法查看,所以使用ps

  • 可用的Jenkins环境变量
    在这里插入图片描述
    点击访问到Jenkis定义的环境变量可以直接使用
    在这里插入图片描述

5、Post-build Actions

在这里插入图片描述
构建后动作,比如邮件通知、短信通知、钉钉通知等,需要安装插件支持,这样可以在构建任务完成后第一时间以各种形式通知管理人员;

最后【Save】就OK了!

启动Job

在这里插入图片描述
点击后面的绿色箭头可以手动触发构建,或者根据配置自动触发;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值