Jenkins处理GitLab Hook

jenkins安装Generic Webhook Trigger Plugin插件 {% asset_img Generic_Webhook_Trgger.png Generic\ Webhook\ Trgger具体配置 %} 创建任务,在构建触发器中勾选Generic Webhook Trigger, 在展开的页面中会有一个URL, 这个URL是配置Webhook使用的,一般形式是http://JENKINS_URL/generic-webhook-trigger/invoke, JENKINS_URL是初始配置jenkins时会有的,一般是http://IP:8080的形式。 如果之前有配置过GitLab webhook, 请去除这个,不然Generic Webhook Trigger不会生效。 如果Git仓库的验证使用的是用户名和密码,那么就不需要配置Token. 复制这个URL,将JENKINS_URL替换为自己的真实数据,在GitLab的对应的项目的设置-->集成中输入,没有安全令牌,勾选自己需要的触发器事件,SSL证书验证可以开启,也可以不开启,推荐开启。 任务设置界面还有Post content parameters, Header parameters, Request parameters, 分别是请求的post数据,header头,请求头。 一般我们只需要post的数据里的内容就够了。 图片的3,4分别是变量名(3),值(4)。值是直接从post的json格式的数据中取出来的,注意,值的获取方式是JSONPath,并且里面有点,如果json数据有多层,那么就多点几次,比如$.project.name等,可以配置多个变量组。 我们还可以Generic Webhook Trigger配置Optional filter,设置一个触发事件,比如只有当你推送的分支是develop的时候,才去构建。 在Optional filter的Expression框中输入^(refs/heads/develop)$, 在下面的Text框中输入步骤3的变量名,这里写$ref。 在shell中使用变量名的方式也是直接使用,例如echo $ref, 注意没有点。 配置完成后,保存,可以点击刚刚配置的GitLab的webhook页面的Test对应的事件测试。 GitLab的push的hook数据: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 { "object_kind": "push", "before": "95790bf891e76fee5e1747ab589903a6a1f80f22", "after": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", "ref": "refs/heads/master", "checkout_sha": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", "user_id": 4, "user_name": "John Smith", "user_username": "jsmith", "user_email": "john@example.com", "user_avatar": "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80", "project_id": 15, "project":{ "id": 15, "name":"Diaspora", "description":"", "web_url":"http://example.com/mike/diaspora", "avatar_url":null, "git_ssh_url":"git@example.com:mike/diaspora.git", "git_http_url":"http://example.com/mike/diaspora.git", "namespace":"Mike", "visibility_level":0, "path_with_namespace":"mike/diaspora", "default_branch":"master", "homepage":"http://example.com/mike/diaspora", "url":"git@example.com:mike/diaspora.git", "ssh_url":"git@example.com:mike/diaspora.git", "http_url":"http://example.com/mike/diaspora.git" }, "repository":{ "name": "Diaspora", "url": "git@example.com:mike/diaspora.git", "description": "", "homepage": "http://example.com/mike/diaspora", "git_http_url":"http://example.com/mike/diaspora.git", "git_ssh_url":"git@example.com:mike/diaspora.git", "visibility_level":0 }, "commits": [ { "id": "b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327", "message": "Update Catalan translation to e38cb41.", "timestamp": "2011-12-12T14:27:31+02:00", "url": "http://example.com/mike/diaspora/commit/b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327", "author": { "name": "Jordi Mallach", "email": "jordi@softcatala.org" }, "added": ["CHANGELOG"], "modified": ["app/controller/application.rb"], "removed": [] }, { "id": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", "message": "fixed readme", "timestamp": "2012-01-03T23:36:29+02:00", "url": "http://example.com/mike/diaspora/commit/da1560886d4f094c3e6c9ef40349f7d38b5d27d7", "author": { "name": "GitLab dev user", "email": "gitlabdev@dv6700.(none)" }, "added": ["CHANGELOG"], "modified": ["app/controller/application.rb"], "removed": [] } ], "total_commits_count": 4 }

2019-06-01 · 2 分钟

Jenkins与RocketChat集成

Jenkins与RocketChat集成 在Jenkins中安装插件RocketChat Notifier 配置信息 点击Jenkins左侧的系统管理-->系统设置, 找到Global RocketChat Notifier Settings. 配置Rocket Server URL, 是URL:PORT的类型, 例: http://chat.xxxx.com:80. 配置Login Username和Login password, 是RocketChat的账号密码. Channel, 发送的频道. Build Server URL, 构建的服务器和端口, http://192.168.0.1:8080 点击Test Connection, Success表示配置成功.

2019-06-01 · 1 分钟

Jenkins+Python+GitLab持续集成

创建任务 登录Jenkins,点击左侧列表的新建选项。输入任务名称,选择构建一个自由风格的软件项目,点击确定。 配置 在任务配置界面,可以设置General标签中的丢弃旧的构建选项,设置保持构建的天数和保持构建的最大个数。 点击源码管理标签,选择git,在Repository URL中输入Git仓库的链接。 如果是HTTP链接,选择Credentials一行的Add > Jenkins,在Kind一行下拉选择Username with password,在下方Username和Password框中输入用户名和密码。 使用docker jenkins容器里面的ssh-key。 直接使用服务器的ssh key就可以了。如果指定Path to key需要使用docker中的ssh key。如果使用Source files那么需要使用docker容器中的key, 因为Source files的相对路径不是固化到本地的路径, 而是docker中的路径. 如果是SSH链接,选择SSH Username with private key,在Username框中输入用户名,Private Key 选择为Enter directly,在显示的key框中输入私钥。(生成秘钥ssh-keygen -t rsa -C "email.com",生成的文件在home目录下的.ssh目录下,使用命令cat id_rsa查看私钥,复制到key框中)。点击最下方的Add按钮,保存设置。 在Credentials的下拉选项中选择刚刚创建Username。 使用定时任务 在构建触发器标签里选择Poll SCM,输入H/2 * * * *, 最后点击保存。 这是一个定时任务,每隔2分钟查询一次代码,如果有更新,就执行任务。 使用webhook 使用webhook比定时任务更好,webhook只有在push或指定操作时,jenkins会拉取代码,不用定时访问,耗费资源。 需要安装的插件Gitlab Hook、GitLab、Gitlab Authentication、Build Authorization Token Root 配置job,在构建触发器中勾选Build when a change is pushed to GitLab. GitLab CI Service URL: http://服务器IP:8080/project/demo ,URL后面是回调地址,再点击高级,再Secret token行,点击Generate生成token。 在GitLab服务器上的相对应的项目的Settings里面的Integrations中,配置webhook,输入在jenkins中获取的URL,和token,可以根据需要勾选事件,开启SSL,点击Add webhook。会在Add webhook按钮下生成一个webhook,点击test,会弹出勾选的事件,选择相应的事件,会在页顶弹出Hook executed successfully: HTTP 200,到此,webhook配置完成。 ...

2019-06-01 · 2 分钟

Jenkins+Git子模块自动拉取代码

jenkins+Git子模块自动拉取代码 添加Git子模块 先克隆想要添加子模块的仓库git clone ssh://git@ip:port/user/project.git,这个是主目录。 进入仓库,添加子模块git submodule add ssh://git@ip:port/user/project.git,和主仓库不同。 ls查看,会有.gitmodules和子模块的项目名。 将生成的文件和目录push到主仓库中。 克隆有子模块的仓库 添加过子模块的仓库,如果想重新克隆,和普通克隆一样,不过克隆后需要在仓库目录下执行 git submodule init和git submodule update,如果不执行,子模块中会没有文件。 更改子模块的分支 切换到子模块目录,默认子模块是master分支,git submodule foreach git checkout dev, 然后使用git submodule foreach git pull切换分支。 需要在jenkins任务的构建步骤中添加git submodule init和git submodule update,以及上述操作(写在这两个命令后面), jenkins才能拉取到代码。 submodule可以进行tag和merge git submodule foreach可以分别对子模块进行操作, 所以对所有子模块进行tag和merge操作, 就相当于对总项目进行相应的操作.

2019-06-01 · 1 分钟

Jenkins Email Extension插件模板

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title> </head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> <tr> <td>(本邮件由程序自动下发,请勿回复!)</td> </tr> <tr> <td> <h2><font color="#FF0000">构建结果 - ${BUILD_STATUS}</font></h2> </td> </tr> <tr> <td> <br /> <b><font color="#0B610B">构建信息</font></b> <hr size="2" width="100%" align="center" /> </td> </tr> <tr> SVN_URL <td> <ul> <li>项目名称:${PROJECT_NAME}</li> <li>GIT路径:${GIT_URL}</li> <li>构建编号:${BUILD_NUMBER}</li> <li>GIT分支:${GIT_BRANCH}</li> <li>触发原因:${CAUSE}</li> <li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li> </ul> </td> </tr> <tr> <td> <b><font color="#0B610B">变更信息:</font></b> <hr size="2" width="100%" align="center" /> </td> </tr> <tr> <td> <ul> <li>上次构建成功后变化 : ${CHANGES_SINCE_LAST_SUCCESS}</a> </li> </ul> </td> </tr> <tr> <td> <ul> <li>上次构建不稳定后变化 : ${CHANGES_SINCE_LAST_UNSTABLE}</a> </li> </ul> </td> </tr> <tr> <td> <ul> <li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li> </ul> </td> </tr> <tr> <td> <ul> <li>变更集:${JELLY_SCRIPT,template="html"}</a> </li> </ul> </td> </tr> <!-- <tr> <td> <b><font color="#0B610B">Failed Test Results</font></b> <hr size="2" width="100%" align="center" /> </td> </tr> <tr> <td> <pre style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre> <br /> </td> </tr> <tr> <td> <b><font color="#0B610B">构建日志 (最后 100行):</font></b> <hr size="2" width="100%" align="center" /> </td> </tr>--> <!-- <tr> <td>Test Logs (if test has ran): <a href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a> <br /> <br /> </td> </tr> --> <!-- <tr> <td> <textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD_LOG, maxLines=100,escapeHtml=true}</textarea> </td> </tr>--> <hr size="2" width="100%" align="center" /> </table> </body> </html>

2019-06-01 · 2 分钟