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

bernardlai · 2016年03月25日 · 1 次阅读

[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] 由于每个地方使用的参数都不一样,这里就详细描述传递参数方法了。

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

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

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

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

需要 登录 后方可回复。