jenkins持续集成
持续集成中经常会用到jenkins这一工具。jenkins上有很多插件,用好这些插件可帮助我们提高工作效率。
1. groovy postbuild 获得构建相关的数据
groovy是一种编程语言,我们可以写groovy脚本来获得一些构建中的数据,如构建号、branch等。在“增加构造后操作步骤”里,选择goovy postbuild工具。可使用如下代码来获取构建人,构建分支等信息。
def user = manager.build.getCause(hudson.model.Cause.UserIdCause.class).getUserName() def matcher = manager.getLogMatcher(".*-(.*-.*).ipa") if(matcher?.matches()) { manager.addShortText("${matcher.group(1)}@${user}") } def branch = manager.build.getBuildVariables().get("BRANCH") def slave = manager.build.getBuiltOnStr() desc = "Br: ${branch} Sl: ${slave}" desc = "Br: ${branch}" Thread.currentThread().executable.setDescription(desc)
脚本里从构建日志里获取构建人信息,从参数中获取branch信息。 执行的时候,可能会遇到没有权限的问题,如
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method hudson.model.Run setDescription java.lang.String at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectMethod(StaticWhitelist.java:160) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:119)
此种情况,需要 1. 不勾选Use Groovy Sandbox 2. 然后找jenkins的adminstor导航到jenkins>管理jenkins>进程内脚本批准,同意了此脚本就不会再出这个问题了。
2. 上游job 触发构建 下游job,且传递参数 Jenkins 常用插件 -- Parameterized Trigger plugin
需要上下游job不在同一域名下,否则无法通过该种方式设置?
有时我们需要一个job后,需要触发其他job来完成接下来的事情。这时我们可以用Trigger。两个job之间,可以这样传递参数。
2.1 上游job1中的配置:(绿色部分是需要填的值)
构建后操作 -> Trigger parameterized build on other projects
projects to build: job2_name
Parameters from properties file -> Use properties from file: ./job.prop
其中,job.prop文件,可以在构建 -> Execute shell -> Conmmand中创建和写入。如:
touch job.prop
echo "jobId=5237" >> job.prop
2.2 下游job2中的配置:
参数化构建过程 -> String Parameter:jobId
构建 -> Execute shell -> Conmmand中调用,如
echo $jobId
echo $BUILD_ID #jenkins的构建号
python collect.py $jobId $BUILD_ID $JOB_NAME #collect.py是git中配置的执行代码
3. Jenkins设置GitLab push事件发生时自动构建,且传递参数
3.1 使用gitlab插件
详见:https://blog.csdn.net/maggietian77/article/details/78724055
3.2 使用 Stash Pull Requests Builder 插件
插件介绍:https://github.com/nemccarthy/stash-pullrequest-builder-plugin
基本配置(必填)
1.Cron:配置轮询间隔,如 H/20 * * * *
2.Stash Host:固定为 http://git.Acon.com/。
3.Stash Credentials:凭证信息(username/password形式),需在git工程中给此用户加读权限。
4.Project:Stash项目名称,随便取即可?。
5.RepositoryName:git 工程名
高级配置(选填)
1. Build PR targetting only these branches: 仅关注此分支上的pull request
2.Build only if Stash reports no conflicts 仅当stash无冲突时才构建
3.Build only if PR is mergeable 仅当PR与主分支处于可以合并状态时时才构建
4.Keep PR Comment only for most recent Build:只保留最近的构建通知PR Comment(参看步骤四)(推荐)。
5.CI Skip Phrases: 默认为:"NO TEST",可以改成其它词组(如:"NO INSPECT");Jenkins在Stash PR Title中发现此词组就不会执行构建。
6.CI Build Phrases: 默认是: "test this please",可以改成其它词组(如:"inspect this please");Jenkins在Stash PR Comment中发现此词组就会重新执行构建。
7.Only build when asked (with test phrase):只有在Stash PR Comment中发现8中指定的词组Jenkins才会执行构建。
3.3 传参 - jenkins slave间传参
3.3.1 上游job1中,设置构建后操作 -> Archive the artifacts 用于存档的文件:填写打包结果的文件名,如xx/*.apk。 文件的具体位置可在jenkins的打包结果中找到。如xx/build/outputs/apk/abc.apk
3.3.2 下游job2中,设置 构建 -> Copy artifacts from another project,填写:
- project name: job1名
- Artifacts to copy: 与job1中的Archive the artifacts 用于存档的文件内容,如xx/*.apk
- Target directory: ${workspace/}
4. 获取Jenkins构建时的change信息
https://www.jianshu.com/p/513ab6915dbd