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

5. gitlab触发jenkins自动构建

 

posted @ 2018-06-01 15:43  myLittleGarden  阅读(841)  评论(0编辑  收藏  举报