zoukankan      html  css  js  c++  java
  • 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自动构建

  • 相关阅读:
    2. HTML 对象 <object>
    1. HTML 多媒体
    Android应用程序组件之间的通信Intent和IntentFilter
    Android IntentFilter 匹配原则浅析
    写些最近两个学安卓的笔记-关于Toast
    Android Activity之间通信
    绝对干货:供个人开发者赚钱免费使用的一些好的API接口
    Android几种layout(布局)的区别
    Inflater与findViewById()区别
    生产者/消费者问题的多种Java实现方式
  • 原文地址:https://www.cnblogs.com/sunada2005/p/9121977.html
Copyright © 2011-2022 走看看