Redmine Redmine 入门三——Redmine 和 Jenkins 集成

bernardlai · 发布于 2016年3月25日 · 69 次阅读
53642

[i=s] 本帖最后由 行者赖 于 2016-3-25 17:24 编辑

[align=center] Redmine入门三——Redmine和Jenkins集成 [/align] Redmine和Jenkins分别提供了插件用来支持相互操作。 redmine_jenkins是在Redmine中集成Jenkins的job的启动和构建查看的插件。管理员需要在项目下面配置Jenkins的地址和用户名和密码,注意这里配置的用户名和密码通过明文的方式存储在数据库表中。 官方链接http://www.redmine.org/plugins/redmine_jenkins GitHub下载地址:http://jbox-web.github.io/redmine_jenkins/

图一:Redmine项目配置中添加Jenkins的链接和用户信息

图二:Redmine中Jenkins工程的启动和job查看页面 redmine-plugin是在Jenkins中集成redmine的用户信息和项目链接的插件。可以允许使用Redmine的用户信息登陆Jenkins。 GitHub地址https://github.com/jenkinsci/redmine-plugin

图三:Jenkins中启用Redmine用户信息进行验证,需要配置Redmine使用的数据库信息,这里给出一个能够读取用户表权限的用户即可

图四:配置Redmine站点信息(没有使用过) 这两个插件已经基本上满足基础的集成需求,但是在深入应用还有一些不尽如人意的地方。 一, 用户访问不够灵活。前面提到Redmine使用配置Jenkins填写的用户名的明文信息去访问Jenkins,这样无论是那个用户在Redmine中启动了job对于Jenkins来说都是相同的用户信息。介于Jenkins中可以使用Redmine的用户信息进行访问,通过修改两个插件的代码可以完成相关的需求。 1.1 修改redmine插件redmine_jenkins\app\services\ jenkins_client.rb [code]@options[:username] = User.current.login.to_s @options[:password] = User.current.api_key.to_s #@options[:username] = opts[:username] if opts.has_key?(:username) #@options[:password] = opts[:password] if opts.has_key?(:password)[/code] 使用登陆用户的用户名和api_key访问Jenkins 1.2 修改Jenkins插件 redmine-plugin\src\main\resources\hudson\plugins\redmine\RedmineSecurityRealm\config.jelly增加 /f:entry 允许用户配置是否使用api验证,如果为true则api_token和密码都可以进行登陆。 src\main\java\hudson\plugins\redmine\dao\MySQLAuthDao.java增加 String query = String.format("SELECT * FROM %s,tokens WHERE %s = ? and %s.id=tokens.user_id and tokens.action='api'", loginTable, userField, loginTable); userData.setApitokenvalue(results.getString("value")); 判断api值是否正确 src\main\java\hudson\plugins\redmine\RedmineSecurityRealm.java修改 [code] String version, String loginTable, String userField, String passField, String saltField,String apiToken ) { if (userData.getPassword().equals(encryptedPassword)) { LOGGER.info("Encrypted Password: " + encryptedPassword); return getUserDetails(username, userData.getPassword());
} else if (this.apiToken.equals("true")){ if (password.equals(userData.getApitokenvalue())) { LOGGER.warning("Api password: "+password); return getUserDetails(username, userData.getApitokenvalue()); } } public String getApiToken() { return apiToken; }[/code] 二, Redmine启动Jenkins的job不能使用带参数的job。原始的redmine_jenkins插件不支持带带参数启动,但是实际工作中,大部分job都需要参数才能正常工作。 通过修改redmine_jenkins\app\use_cases\jenkins_jobs\trigger_build.rb可以增加带参数启动方法。 [code]if 条件 build_number = jenkins_client.job.build(jenkins_job.name, {}, opts) else build_number = jenkins_client.job.build(jenkins_job.name, params, opts) end[/code] 由于每个地方使用的参数都不一样,这里就详细描述传递参数方法了。

好吧没有上传图片的权限,附件也传不上来。

共收到 2 条回复
96
迷茫 · #1 · 2016年3月26日

赞一个 提个建议,最好在开头就写上,Redmine和Jenkins集成能做些什么,或者说它们集成的好处

4
laofo · #2 · 2016年3月27日

赞小赖,我也来了、好好学习学习。

另外附件是有的,图片别超过2M就可以

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册