首页 > 其他分享 >Jenkins 插件

Jenkins 插件

时间:2023-09-09 23:14:00浏览次数:64  
标签:PR 插件 variables Gitee 构建 put Jenkins

目录

简介

Gitee Jenkins Plugin 是 Gitee 基于 GitLab Plugin 开发的 Jenkins 插件。用于配置 Jenkins 触发器,接受 Gitee 平台发送的 WebHook 触发 Jenkins 进行自动化持续集成或持续部署,并可将构建状态反馈回 Gitee 平台。

目前支持特性

  • 推送代码到 Gitee 时,由配置的 WebHook 触发 Jenkins 任务构建。
  • 评论提交记录触发提交记录对应版本 Jenkins 任务构建
  • 提交 Pull Request 到 Gitee 项目时,由配置的 WebHook 触发 Jenkins 任务构建,支持 PR 动作:新建,更新,接受,关闭,审查通过,测试通过。
  • 支持 [ci-skip] 指令过滤 或者 [ci-build] 指令触发构建。
  • 过滤已经构建的 Commit 版本,若是分支 Push,则相同分支 Push 才过滤,若是 PR,则是同一个 PR 才过滤。
  • 按分支名过滤触发器。
  • 正则表达式过滤可触发的分支。
  • 设置 WebHook 验证密码。
  • 构建后操作可配置 PR 触发的构建结果评论到 Gitee 对应的 PR 中。
  • 构建后操作可配置 PR 触发的构建成功后可自动合并对应 PR。
  • 对于 PR 相关的所有事件,若 PR 代码冲突不可自动合并,则不触发构建;且若配置了评论到 PR 的功能,则评论到 PR 提示冲突。
  • PR 评论可通过 WebHook 触发构建(可用于 PR 触发构建失败是便于从 Gitee 平台评论重新触发构建)
  • 支持配置 PR 不要求必须测试时过滤触发构建。(可用于不需测试则不构建部署测试环境)
  • 支持相同 PR 触发构建时,取消进行中的未完成构建,进行当前构建(相同 PR 构建不排队,多个不同 PR 构建仍需排队)

计划中特性

  1. PR 审查并测试通过触发构建(可用户触发部署,且可配合自动合并 PR 的特性完善工作流。)
  2. 勾选触发方式自动添加 WebHook 至 Gitee。

插件安装

  1. 在线安装
    • 前往 Manage Jenkins -> Manage Plugins -> Available
    • 右侧 Filter 输入:Gitee
    • 下方可选列表中勾选 Gitee(如列表中不存在 Gitee,则点击 Check now 更新插件列表)
    • 点击 Download now and install after restart

输入图片说明

  1. 手动安装
    • 从 release 列表中进入最新发行版,下载对应的 XXX.hpi 文件
    • 前往 Manage Jenkins -> Manage Plugins -> Advanced
    • Upload Plugin File 中选择刚才下载的 XXX.hpi 点击 Upload
    • 后续页面中勾选 Restart Jenkins when installation is complete and no jobs are running

输入图片说明

插件配置

添加 Gitee 链接配置

  1. 前往 Jenkins -> Manage Jenkins -> Configure System -> Gitee Configuration -> Gitee connections
  2. 在 Connection name 中输入 Gitee 或者你想要的名字
  3. Gitee host URL 中输入 Gitee 完整 URL 地址: https://gitee.com(Gitee 私有化客户输入部署的域名)
  4. Credentials 中如还未配置 Gitee APIV5 私人令牌,点击 Add - > Jenkins
    1. Domain 选择 Global credentials
    2. Kind 选择 Gitee API Token
    3. Scope 选择你需要的范围
    4. Gitee API Token 输入你的 Gitee 私人令牌,获取地址:https://gitee.com/profile/personal_access_tokens
    5. IDDescripiton 中输入你想要的 ID 和描述即可。
  5. Credentials 选择配置好的 Gitee APIV5 Token
  6. 点击 Advanced ,可配置是否忽略 SSL 错误(视您的 Jenkins 环境是否支持),并可设置链接测超时时间(视您的网络环境而定)
  7. 点击 Test Connection 测试链接是否成功,如失败请检查以上 3,5,6 步骤。

配置成功后如图所示: Gitee 链接配置

新建构建任务

前往 Jenkins -> New Item , name 输入 'Gitee Test',选择 Freestyle project 保存即可创建构建项目。

任务全局配置

任务全局配置中需要选择前一步中的 Gitee 链接。前往某个任务(如'Gitee Test')的 Configure -> General,Gitee connection 中选择前面所配置的 Gitee 链接,如图:

任务全局配置

源码管理配置

前往某个任务(如'Gitee Test')的 Configure -> Source Code Management 选项卡

  1. 点击 Git
  2. 输入你的仓库地址,例如 [email protected]:gitee_group/gitee_project.git
    1. 点击 *Advanced* 按钮,*Name* 字段中输入 ``origin``, *Refspec* 字段输入 ``+refs/heads/*:refs/remotes/origin/* +refs/pull/*/MERGE:refs/pull/*/MERGE``
    
      ,注意新版 jenkins 不再接受多条同时包含 * 通配符的 refs 描述,如只对 push 触发可写前半部分,如只对 PR 触发可只写后半段。具体可见下图:输入图片说明
  3. 凭据 Credentials 中请输入 git 仓库 https 地址对应的 用户名密码凭据,或者 ssh 对应的 ssh key 凭据,注意 Gitee API Token 凭据不可用于源码管理的凭据,只用于 gitee 插件的 API 调用凭据。
  4. Branch Specifier 选项:
    1. 对于单仓库工作流输入:origin/${giteeSourceBranch}
    2. 对于 PR 工作流输入:pull/${giteePullRequestIid}/MERGE
  5. Additional Behaviours 选项:
    1. 对于单仓库工作流,如果你希望推送的分支构建前合并默认分支(发布的分支),可以做以下操作:
      1. 点击 Add 下拉框
      2. 选择 Merge before build
      3. 设置 Name of repository 为 origin
      4. 设置 Branch to merge to 为 ${ReleaseBranch} 即您要合并的默认分支(发布分支)
    2. 对于 PR 工作流,Gitee 服务端已经将 PR 的原分支和目标分支作了预合并,您可以直接构建,如果目标分支不是默认分支(发布分支),您也可以进行上诉构建前合并。

配置如图所示:

源码管理配置

触发器配置

前往任务配置的触发器构建:Configure -> Build Triggers 选项卡

  1. Enabled Gitee triggers 勾选您所需要的构建触发规则,如 Push EventOpened Merge Request Events,勾选的事件会接受 WebHook,触发构建。目前支持触发事件有:
    • Push Events:推送代码事件
    • Commit Comment Events:评论提交记录事件
    • Opened Merge Request Events:提交 PR 事件
    • Updated Merge Request Events:更新 PR 事件
    • Accepted Merge Request Events:接受/合并 PR 事件
    • Closed Merge Request Events:关闭 PR 事件
    • Approved Pull Requests:审查通过 PR 事件
    • Tested Pull Requests:测试通过 PR 事件
  2. Build Instruction Filter :
    • None : 无过滤
    • [ci-skip] skip build :commit message 或者 PR 说明包含 [ci-skip] 时,跳过构建触发。
    • [ci-build] trigger build :commit message 或者 PR 说明包含 [ci-build] 时,触发构建。
  3. Ignore last commit has build 该选项可以跳过已经构建过的 Commit 版本。
  4. Cancel incomplete build on same Pull Requests 该选项在 PR 触发构建时,会判断是否存在相同 PR 且未完成的构建,有则取消未完成构建,再进行当前构建。
  5. Ignore Pull Request conflicts 该选项在 PR 触发构建时,会根据 PR 冲突情况选择是否进行构建。
  6. Allowed branches 可以配置允许构建的分支,目前支持分支名和正则表达式的方式进行过滤。
  7. Secret Token for Gitee WebHook 该选项可以配置 WebHook 的密码,该密码需要与 Gitee WebHook 配置的密码一致方可触发构建。
  8. 注意:若 PR 状态为不可自动合并,则不触发构建。 触发器配置

构建后步骤配置

前往任务配置的构建后配置:Configure -> Post-build Actions 选项卡

构建结果回评至 Gitee

  1. 点击 Add post-build action 下拉框选择:Add note with build status on Gitee pull requests
  2. Advanced 中可以配置:
    • Add message only for failed builds:仅为构建失败回评到 Gitee
    • 自定义各状态的回评内容(内容可以引用 Jenkins 的环境变量,或者自定义的环境变量)
  3. 若开启该功能,还可将不可自动合并的状态回评至 Gitee

构建成功自动合并 PR

点击 Add post-build action 下拉框选择:Accept Gitee pull request on success

构建后步骤配置

新建 Gitee 项目 WebHook

进入源码管理配置中设置的 Gitee 项目中,进入 管理 -> WebHooks

  1. 添加 WebHook,URL 填写 触发器配置:Build when a change is pushed to Gitee. Gitee webhook URL 中所示 URL,如:: http://127.0.0.1:8080/jenkins/project/fu
  2. 密码填写:触发器配置第 5 点中配置的 WebHook 密码,不设密码可以不填
  3. 勾选 PUSH,Pull Request

测试推送触发构建

  1. Gitee 的 WebHook 管理中选择勾选了 PUSH 的 WebHook 点击测试,观察 Jenkins 任务的构建状态
  2. Gitee 项目页面编辑一个文件提交,观察 Jenkins 任务的构建状态

测试 PR 触发构建

  1. Gitee 的 WebHook 管理中选择勾选了 Pull Request 的 WebHook 点击测试,观察 Jenkins 任务的构建状态
  2. 在 Gitee 项目中新建一个 Pull Request,观察 Jenkins 任务的构建状态

环境变量

目前支持环境变量见以下函数,其中不同的 WebHook 触发可能导致有些变量为空,具体请安装插件 EnvInject Plugin,于构建中查看 Environment Variables

    public Map<String, String> getBuildVariables() {
        MapWrapper<String, String> variables = new MapWrapper<>(new HashMap<String, String>());
        variables.put("giteeBranch", branch);
        variables.put("giteeSourceBranch", sourceBranch);
        variables.put("giteeActionType", actionType.name());
        variables.put("giteeUserName", userName);
        variables.put("giteeUserEmail", userEmail);
        variables.put("giteeSourceRepoHomepage", sourceRepoHomepage);
        variables.put("giteeSourceRepoName", sourceRepoName);
        variables.put("giteeSourceNamespace", sourceNamespace);
        variables.put("giteeSourceRepoURL", sourceRepoUrl);
        variables.put("giteeSourceRepoSshUrl", sourceRepoSshUrl);
        variables.put("giteeSourceRepoHttpUrl", sourceRepoHttpUrl);
        variables.put("giteePullRequestTitle", pullRequestTitle);
        variables.put("giteePullRequestDescription", pullRequestDescription);
        variables.put("giteePullRequestId", pullRequestId == null ? "" : pullRequestId.toString());
        variables.put("giteePullRequestIid", pullRequestIid == null ? "" : pullRequestIid.toString());
        variables.put("giteePullRequestTargetProjectId", pullRequestTargetProjectId == null ? "" : pullRequestTargetProjectId.toString());
        variables.put("giteePullRequestLastCommit", lastCommit);
        variables.put("giteePushCreated", created ? "true" : "false");
        variables.put("giteePushDeleted", deleted ? "true" : "false");
        variables.putIfNotNull("giteePullRequestState", pullRequestState);
        variables.putIfNotNull("giteeMergedByUser", mergedByUser);
        variables.putIfNotNull("giteePullRequestAssignee", pullRequestAssignee);
        variables.put("giteeTargetBranch", targetBranch);
        variables.put("giteeTargetRepoName", targetRepoName);
        variables.put("giteeTargetNamespace", targetNamespace);
        variables.put("giteeTargetRepoSshUrl", targetRepoSshUrl);
        variables.put("giteeTargetRepoHttpUrl", targetRepoHttpUrl);
        variables.put("giteeBefore", before);
        variables.put("giteeAfter", after);
        variables.put("giteeBeforeCommitSha", before);
        variables.put("giteeAfterCommitSha", after);
        variables.put("giteeRef", ref);
        variables.put("ref", ref);
        variables.put("beforeSha", beforeSha);
        variables.put("isTag", isTag);
        variables.put("sha", sha);
        variables.put("status", status);
        variables.put("stages", stages);
        variables.put("createdAt", createdAt);
        variables.put("finishedAt", finishedAt);
        variables.put("duration", buildDuration);
        variables.put("jsonBody", jsonBody);
        variables.put("noteBody", noteBody);
        variables.putIfNotNull("giteeTriggerPhrase", triggerPhrase);
        return variables;
    }

 

用户支持

如在使用过程中有任何疑问,欢迎在 Gitee Jenkins Issue 中反馈。

反馈前可按以下步骤获取更多日志以便排查问题:

  1. 前往 Jenkins -> Manage Jenkins -> System Log
  2. 点击 Add new log recorder。
  3. 输入 'Gitee Jenkins Plugin'。
  4. 在下一页面中 Logger 点击 Add,输入框中填写 'com.gitee.jenkins',并在 Log level 总选择全部,保存。
  5. 完成以上步骤后便可在 'Gitee Jenkins Plugin' 这个日志中查看。

参与贡献

欢迎提交 CI 场景特性建议或者直接提交 PR 贡献代码。

打包或运行测试

打包 hpi 文件在仓库目录中执行: mvn package

直接运行测试执行:mvn hpi:run

标签:PR,插件,variables,Gitee,构建,put,Jenkins
From: https://www.cnblogs.com/csjoz/p/17690379.html

相关文章

  • IDEA 高效插件推荐(提升工作效率)
    官网:https://plugins.jetbrains.com/Codota-代码智能提示直接在IntelliJ、AndroidStudio或Eclipse中使用从数百万个程序中学习的代码完成,更快、更智能地编写代码。Lombok简化臃肿代码插件编程中,往往需要在实体类定义各种字段,那么就需要写get/set/构造/toString/......
  • 2023-09-09 微信小程序之引入uni_modules过多插件导致主包体积过大如何解决 ==》hbuil
    前言:uni_modules里面的插件会全部打包在主包里,分包如果都是引用了uni_modules的插件,那么会导致包体积越来越大。我的项目主要用到一些组件库,如uview,对这个库的依赖太严重了,加上是把2个小程序融合到一起,所以对这个库的依赖就会变得更多。解决方案:你的小程序是用uniapp开发,才能使......
  • jenkins权限管理
    1,jenkins权限管理安装插件安装插件如下:Role-basedAuthorizationStrategy2,新版本的插件安装以后需要选择后才能在系统管理中看到3.选择以后能看到 4.编辑权限 ......
  • 插件:不坑盒子 For Office/WPS
    概述B站UP主@不坑老师制作的word效率插件,专为解决日常办公中的一些低效率的痛点。支持版本:windows操作系统下的Office2010以上、WPS软件特点文章排版:可以根据编号来调正文章的样式,配合手动排版一起使用,效果更佳。奇偶页码:双面打印通常在左侧装订,那么页码就应该在外侧,这......
  • IDEA 准点下班必备插件推荐!
    InteIIiJIDEA2023.2版本发布了,在2023.2中,官方根据用户的宝贵反馈对新UI做出了大量改进,新UI界面大大减少了干扰,可以让用户更好地专注于代码。但官方激活码的校验规则进行了更新,之前已经成功激活的Idea可能突然无法使用了,给大家准备了激活码:IDEA激活 https://www.kdocs.cn/l/c......
  • IntelliJ IDEA 必备插件!让的你生产力提升十倍!
    InteIIiJIDEA2023.2版本发布了,在2023.2中,官方根据用户的宝贵反馈对新UI做出了大量改进,新UI界面大大减少了干扰,可以让用户更好地专注于代码。但官方激活码的校验规则进行了更新,之前已经成功激活的Idea可能突然无法使用了,给大家准备了激活码:IDEA激活 https://www.kdocs.cn/l/c......
  • jenkins 插件更新页面报错
    jenkins插件更新页面报错:Jenkins安装插件出现Signatureverificationfailedinupdatesite'default'(showdetails)在docker-compose.yml启动文件加上hudson.model.DownloadService.noSignatureCheck=true环境变量version:"3.6"services:competent_goodall:......
  • Confluence的Excel插件Elements Spreadsheet安装
    背景Confluence是现在广泛使用的团队协作文档系统。虽然自身带了一些表格编辑功能,但表格的整体功能较弱,比如不能通过Excel文件进行导入导出,表格在复制到Excel时格式会比较奇怪等等。对于未完全整合流程到Confluence上的团队,信息从Excel到在线文档系统的流转是个巨大的工作量。介......
  • React项目笔记-环境搭建、路由封装(跳转Navigate、懒加载lazy)、模块化样式引入、状态管
    环境准备nodev16.15.0npm8.5.5AntDesignofReact:https://ant.design/docs/react/introduce-cn一,创建项目npminitvite√Projectname:...vite-project-react√Selectaframework:»React√Selectavariant:»TypeScript然后使用vscode打开项目,由于......
  • [Maven] maven插件系列之maven-shade-plugin
    [Maven]maven插件系列之maven-shade-plugin1插件简述/PluginOverview1.1定义与目的/Definition&GoalsOfficialDefinitionApacheMaven:maven-shade-pluginThispluginprovidesthecapabilitytopackagetheartifactinanuber-jar,includingitsdependenc......