1. 5. Jenkins使用 -- jobs
文章已经迁移到我的 个人博客 ,里面还有更多内容。
前几次我们一直在说项目(project),现在又出现一个job,他们分别是什么呢?根据 这个讨论 ,这两个基本上是一个东西,名字基本可以互通,以下不再区分。
进入主页,点击 新建
然后出现下图界面, Enter an item name 中输入 DevProject1 ,然后选择 构建一个自由风格的软件项目 ,最后点击 OK 保存。
这样,我们在主页就可以看到这个项目了
鼠标悬浮在项目名称上,出现一个倒三角,点击出现下拉菜单,选择 配置 ,进入项目配置页面。 项目名称 没什么好说的,就是项目名称而已。 描述 和上一部分 基本设置 中的内容一样。 源码管理 可以选择自己使用的管理方法,下一部分我们会讲使用git和github。其他构建方便的东西,实际操作的时候再说,现在自己熟悉下即可。
不过这里简单说下 构建触发器 的 Build periodically 中 日程表 这个部分,其实大家自己点开帮助按钮就可以得到足够的信息。
下面相关很多部分很多取自 linux计划任务crontab使用方法 ,并做相应调整和修改。
其他格式解释:
快速帮助文档有几个例子,不明白的话可以看看,很简单。
我们这里先熟悉下Jenkins的导航,首先应该注意,头部有导航标识(这个应该叫啥啊,我不知道,自己取得名字,请大家能够提供学名,谢谢),如下图所示
如果我点击一个项目名称,比如 DevProject1
进入这个项目的页面,如下,注意红框中的变化
鼠标悬浮会有各种下拉菜单,自己可以体验。
进入Jenkins主页,如果有项目的话,会如下图显示
注意红框 S 和 W 对应的标识,鼠标悬浮提示分别为“上次构建状态"和”编译晴雨表“。
S 好理解吧,那 W 是什么呢?我们通过实验来看。
点击进入一个项目,或者通过下拉菜单,点击 立即构建 (第一次),出现下图变化
S 变蓝色,鼠标悬浮提示 success , W 太阳位置,悬浮提示如下图
这次模拟一次构建失败。进入项目配置,找到 构建 ,因为我用的Mac,所以选择”Execute shell“,如果是win用户,请选择第一个选项。
Command 框中,输入不是mac也不是win命令的一串无意义字符,比如“asdf",保存设置,然后点击 立即构建 (第二次),观察项目主页图标变化。
然后我再点击一次 立即构建 (第三次),继续观察项目主页图标变化。
然后删除刚才的那个无意义的命令,再次构建(第四次)。然后再次构建(第五次)。项目主页如下显示, S 为蓝色, W 显示乌云。鼠标悬浮,观察提示。
有没有看出, S 就是简单的本次构建成功与否, W 是近五次构建情况总览,按照成功与失败比例,对应晴天到雷雨。
进入我们的项目主页,左下侧还能看到构建历史(这里我有多做了几次错误构建,不要在意这些多出来的构建)
点击某个记录,今日此构建的主页
左侧各种查看和设置选项,自己可以试试。比如点击 Console Output ,可见:
显示控制台输出,并有我们失败的提示。
进入某个项目的设置,勾选 触发远程构建 ,在 身份验证令牌 中填入一个字符串,比如“111”
根据下方提示,浏览器输入“JENKINS_URL/job/TestProject1/build?token=TOKEN_NAME ”启动构建。
“JENKINS_URL”是构建主机的地址。在这里,我们并没有远程主机连接,不过我们可以用本机实验,那么“JENKINS_URL”就是“http://0.0.0.0:8080/”。
“TOKEN_NAME”就是我们刚才设置的字符串(“111”)。
浏览器地址栏输入:“ http://0.0.0.0:8080/job/TestProject1/build?token=111 ”,会有提示应该使用post,不要用get。不管他,点击 Proceed 继续。回到项目主页,可见已有构建。
因为使用get不安全,所以建议使用post远程构建,具体方法可以参考这里 Jenkins API Integration : Trigger Job Remotely via Jenkins API
为了演示,快速建立三个项目如图:
进入“2”的配置,找到 构建触发器 ,勾选 Build after other projects are built , Projects to watch 填入“1”。注意下面三个单选框,这里使用默认设置。
然后在 构建后操作 的操作中,选择 Build other projects
要构建的项目 输入“3”。
保存回到“2”项目主页后,发现如下图变化
查看其他两个项目,同样出现对应的上下级项目。
2. jenkins 实现参数联动构建
日常编写pipeline的时候,有时候会遇到针对参数作出处理(联动,校验值格式等)。一开始想到的是能不能针对build按钮作出改变,比如我在提交的时候校验下参数是否填写,是否符合要求。但是那样就需要修改jenkins源码,针对build按钮作逻辑判断。考虑到这不是简单的功能,而且有可能会破坏原有的设计,并且没有大量的测试覆盖的话,出现幺蛾子的概率很大。所以最终还是放弃了。还有位同学提出job开始做出判断,但是这种不好的地方在于用户在触发job后,必须到log中才能看到失败的原因,而且这种做法比较被动,易产生大量的error记录,不友好。
思考再三,加上看到jenkins官网上有个属性是
决定尝试一下。这个属性的作用是可以根据依赖控件选择的值,返还本控件用户期望的值。比如下图的功能:branch有两个选择:master和pr,当用户选择master的时候,默认编译artfact。当用户选择branch 为pr的时候,需要用户提供pr的artifact version,并且把build artifact的按钮灰掉,不让用户触发。限制用户行为,避免流程出错。
有两种做法:
以pr_artifact_version 配置为例。
1.通过jenkins页面配置。
referenced parameters一定要写,表明根据那个参数变化而变化。
2.pipeline 脚本的方式。
以在pipeline properties--parameters属性中加上下面的参数声明,jenkinsUtil是我自己抽出来的util类,其中的生成动态依赖方法如下图:
需要传入的参数有本身控件的name,依赖的控件的name(reference),本身控件的type,次此处我用的是"ET_FORMATTED_HTML",因为我需要在页面上画出文本框,然后是本身控件的描述,最后是执行的groovy 脚本:如果branch为pr,那么返回一个不能改变的选择框,提示用户不需要关心(也可以把它隐藏,type选"ET_FORMATTED_HIDDEN_HTML"),如果是master,则就返回checkbox,默认勾选,让用户自己选择是build,还是不需要build。
综上,通过这种方式能达到原先得需求,但是本身使用起来还是有点瑕疵的,比如它的提示和容错能力还是存在问题的(需要将不同flow的参数都要列举在页面,容易迷惑用户)。好的做法应该是把用户不关心的东西隐藏,易错的地方(甚至错误发生了)有足够的提示,并提示用户进一步的修正。
3. 自动化部署工具jenkins,从此摆脱重复单调的工作
它是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
有了它你可以免除手工编译,发布代码,上线更容易。节省的时间你可以喝杯咖啡,放松一下 ^_^
道路千万条,熟悉第一条,我这里使用 Red Hat 家族衍生的 centos 上安装Jenkins。
这里可以下载rpm包: http://pkg.jenkins-ci.org/redhat/
也可以如下操作:
安装
将Jenkins存储库添加到yum repos,并从此处安装Jenkins。
安装稳定版
还有一个LTS YUM资源库的LTS版本线
安装Java
Jenkins需要Java才能运行,但默认情况下某些发行版不包含此内容。要安装Open Java Development Kit(OpenJDK),请运行以下命令:
安装完成后Jenkins 启动之前的注意事项
默认情况是Jenkins是使用Jenkins用户启动的,但这个用户目前系统并没有赋予权限,这里我们将启动用户修改为root;另外Jenkins默认端口是8080,这个跟tomcat的默认端口冲突,我们也修改一下默认端口。
找到 JENKINS_USER 和JENKINS_PORT ,修改为root和你需要的端口
启动/停止
注意:如果收到以下错误消息,请确保已安装Java:
Starting jenkins (via systemctl): Job for jenkins.service failed. See 'systemctl status jenkins.service' and 'journalctl -xn' for details.[FAILED]
禁用防火墙
有关CentOS Java的重要说明
Jenkins需要Java才能运行,但yum install jenkins不强制已经安装了java。检查以确保您已通过运行安装了hava java java -version。为了进一步使CentOS用户感到困难,默认的CentOS版本的Java与Jenkins不兼容。Jenkins通常最适合使用Java的Sun实现,由于许可原因,它不包含在CentOS中。
如果您获得类似于以下内容的输出,则表示您使用的是Java的默认(GCJ)版本,该版本不适用于Jenkins:
要解决此问题,您可能需要删除GC的GCJ版本并安装Sun兼容版本。
如果收到上面的输出,请卸载默认的java:
然后在卸载Java之后(或者如果你根本没有安装Java那么开始)。您需要安装与Sun兼容的Java版本。最简单的方法是使用OpenJDK,它可以通过EPEL存储库获得(或者您可以直接从Oracle安装官方 RPM)。要安装OpenJDK,请运行以下命令:
根据您的CentOS版本,OpenJDK的软件包名称可能有所不同。使用yum search openjdk来检查包的名称。如果通过yum找不到OpenJDK,则可能需要安装EPEL yum存储库。安装后,您应该能够获得以下java -version输出:
Ok,到此jenkins安装完成。
接下来你可以在浏览器地址中输入Jenkins网址,如:IP:端口,将显示如下内容:
拷贝指定文件密码,进入用户自定义插件界面,建议选择安装官方推荐插件:
接下来是进入插件安装进度界面:
等待一段时间之后,插件安装完成,配置用户名密码:
OK,你可以使用jenkins来编译、发布你的代码了。oh,它支持从代码库中直接拉取代码,git、svn都支持。赶快使用你的Spring boot、go试试吧。
4. jenkins git怎么自动编译工程
当时也是花费了不少时间来配置Jenkins自动打包的问题,觉得还是需要记录一下。 1.安装Jenkins,这个很简单,不需要多说。 2.下载Git Plugin,Gradle Plugin,Android Emulator Plugin(这个可以配置SDK路径,觉得这个插件挺好)
5. 使用jenkins和编译服务器
1 切换成root用户
2 生成公钥 这里注意会生成两份密钥 .pub为公 另一个为私
3 查看公钥
4 把公钥放入git
5 检验权限
6 打开复制私钥
7 进入Jenkins 添加凭据,类型 SSH Username with private key
在下方密钥区域 粘贴 私钥
8 在工程下面的密钥区域选择刚生成的
执行中如果出现权限不足 或者路径不对
1 路径不对 可以查看本地路径是否存在脚本 如果路径配制成环境变量 前面需要加$ 如$SHELLPATH 直接输入路径则不需要加任何符号 如 /media/shell/**.sh
2 出现权限错误 你需要让jenkins使用root用户操作如下 以下用ubuntu举例
文件中
JENKINS_USER=$NAME
JENKINS_GROUP=$NAME
改称
JENKINS_USER=root
JENKINS_GROUP=root
修改目录权限
cd /var/lib/chown -R root:root ./jenkins
重启jenkins 不同版本重启方式不同 自行网络
systemctl restart jenkins
编译服务器mount到jenkins本机 利用了NFS
更新系统软件包
安装NFSServer
清除目录所有权限限制
先打开 exports 里面定义了NFS服务器访问权限
设置访问权限
/mnt/nfs_share 是共享目录路径
rw 设置可以读写
sync 需要先将更改写入磁盘 然后才能应用更改
no_root_squash / no_subtree_check 消除子树检查
1) 全子网可访问
2) 单独网络可访问
中间ip换成本机ip 如192.168.0.1
打开 然后查看状态
在Ubuntu和Debian上安装NFS客户端:
在CentOS和Fedora上安装NFS客户端:
ip改成本机IP即可
或者直接修改配置文件
1) 在NFS服务器的共享文件夹中创建个文件
2) 在NFS客户端中查看文件是否存在
ip换成本机ip
查看路径是否正确即可
把缺少的依赖库先编译一遍
6. jenkins git+maven 编译怎么知道编译成功
1.通过Jenkins web页面添加Git plugin
Manage Jenkins->Manage Plugins->Available中选择Git Plugin安装,
注意要填写user name和 email地址,否则日后会碰到git tag的错误
2.在Jenkins使用的机器上创建Git用户所需要的公钥
具体步骤参考前面Git server文章
但是注意,要将最后生成的.ssh目录下的公钥和私钥文件复制到/var/lib/jenkins/.ssh目录下,否则git clone命令会报错
3.修改jenkins目录权限
chmod -R 777 /var/lib/jenkins
4.现在可以通过web页面创建一个项目Test,然后设置该项目使用Git作为版本管理。
并且设置repository路径,比如我的:git@S1:cml.git
5.在build选项的pom文件指定你需要执行的pom.xml路径
比如我的一个测试工程名叫client,是个maven工程,我设置为client/pom.xml
6.现在可以点击左侧的Build now进行测试
一切OK,则没有错误日志。在Build History中可以看到测试结果,有没有错误。
7.Email发送设置
在Manage Jenkins->Configure System->Email Notification中,设置SMTP发送的基本信息,点击Advanced,可以填写用户名和密码。还有一个测试按钮可以用来发送测试设置是否正确。
同时在Test项目中的Building Settings打勾选中E-mail
Notification,点击右边的问号,会出现帮助文档,说明在四种情况下会发送email,填写接受email的地址,然后故意将client代码
修改到不能编译通过。然后点击Build now按钮测试一下。果然收到email.
8.检查代码更新并编译
可以通过Poll SCM来设置定时检查编译功能
比如*/5 * * * * 就是每隔5分钟检查一次,如果git仓库中有更新,则执行build操作。
9.使用Maven加快下载速度
如我这篇文章所述,用可以避免下载过慢问题,也可以绕过公司内部外网限制问题。
Jenkins的.m2目录路径在:/var/lib/jenkins/.m2/
首先清空里面所有的jar包,然后创建settings.xml文件,并编辑内容如下:
源码打印?
<settings>
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url></url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url></url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url></url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!--make the profile active all the time -->
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
现在点击build now测试一下,打开console output,看看命令行输出结果,如果发现从S1下载jar包,就正确。和不用的比较了一下,节省了1分多钟.
7. 敏捷之路 C++ (一) jenkins配置-VS工程自动编译基本配置
Windows安装Jenkins主要有两种方式
关于安装这块官方资料齐全就不浪费时间了。
接下来启动 jenkins并按照默认设置一路下一步就行了。
成功启动jenkins并检查确认jenkins工作区无误后就可以开始配置jenkins以及自动编译VS项目的相关环境了。
建议: 所有需要安装的工具例如git,python,svn等尽量不要安装在Program Files中,自己重新指定一个没有权限问题,纯英文无特殊符号及空格等的路径。
接下来安装插件
首先是使用vs项目必不可少的MSBuild插件
以及多源项目需要的Multiple SCMs plugin
如果你需要邮件通知则安装Email Extension Plugin
建议安装一个你的工程所需版本的Visual Studio
一方面MSBUILD可以直接用,另一方面如果自动编译出问题 可以使用VS打开你的项目进行调试
通常一个相对比较大的多项目工程,如果不是一直严格按照标准配置,很难保证获取工程可以成功编译建议从以下几个角度检查
配置好了工程可以从远端克隆一个新的直接编译试一下。可以成功编译就可以配置jenkins项目了。
添加账号密码时有时候第一次添加的会无效,那就再添加一次并选择第二个。通常就可以了。
8. 请问Jenkins如何配置自动或定时编译
打开job的配置界面,在构建触发器栏下有Poll SCM(定时检查源码变更并构建)和Build periodically(周期进行项目构建,不关心源码是否变更)选择,打开它们后面的问号,有很明确的介绍和实例
9. jenkins怎么编译多个target
一直停留在这步
通过google,发现jenkins pull下来的代码可能是找不到target,必须将target设置为shared。如下图:将target的shared勾选上就可以了。
10. Java Maven打包总结(Jenkins多模块编译部署)
原文地址: Java Maven打包总结(Jenkins多模块编译部署)
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
可以看到主要区别在把生成的jar包最终存放的位置, package只管打包; install把打好的包放到了本地maven仓库;deploy是同时放到本地仓库和远程maven私服
这里本地仓库默认是 /root/.m2/repository/ ,具体配置在 ${M2_HOME}/conf/settings 的 localRepository 配置项决定。远程私服仓库一般是nexus,具体地址在项目的pom.xml中配置。比如
一般是进入父级目录之后执行
如果是多级目录的话,有时候并不一定是按照 具体的项目来 编译,比如
这个时候如果一个项目一个项目来编译会超级多,很繁琐,这里是按照 subparentproject 来编译,命令如下
有个注意的地方:
subparentproject 目录下的pom.xml文件中一定有类型如下的配置
1、需要安装插件 Extended Choice Parameter Plug-In 可以支持参数单选、多选
2、项目选择"自由风格",而不是maven编译
3、在“构建” -> "执行shell" 中编写 子模块编译脚本及其后续处理
具体配置如下图
“构建” -> "执行shell" 中的处理脚本
附加:
Linux Bash下字符串操作总结