<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>redmine | 伪架构师</title>
    <link>/tags/redmine/</link>
      <atom:link href="/tags/redmine/index.xml" rel="self" type="application/rss+xml" />
    <description>redmine</description>
    <generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>zh</language><lastBuildDate>Wed, 01 Mar 2017 19:47:58 +0800</lastBuildDate>
    <image>
      <url>/img/logo-wide.png</url>
      <title>redmine</title>
      <link>/tags/redmine/</link>
    </image>
    
    <item>
      <title>从头开始：Redmine 和 Gitlab 的集成和联动</title>
      <link>/post/redmine-and-gitlab/</link>
      <pubDate>Wed, 01 Mar 2017 19:47:58 +0800</pubDate>
      <guid>/post/redmine-and-gitlab/</guid>
      <description>

&lt;p&gt;本文的操作将达成如下目的：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;在 Redmine 中查看 GitLab 仓库中的变更。&lt;/li&gt;
&lt;li&gt;Redmine 中更新 Gitlab 仓库。&lt;/li&gt;
&lt;li&gt;利用 Git Commit Log 改变 Redmine 中的 Issue 状态。&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&#34;工作环境&#34;&gt;工作环境&lt;/h2&gt;

&lt;p&gt;该过程在 Kubernetes 环境中完成。&lt;/p&gt;

&lt;p&gt;Redmine：sameersbn/redmine:3.3.1
Gitlab：官方镜像&lt;/p&gt;

&lt;h2 id=&#34;redmine-设置&#34;&gt;Redmine 设置&lt;/h2&gt;

&lt;h3 id=&#34;系统仓库设置&#34;&gt;系统仓库设置&lt;/h3&gt;

&lt;p&gt;以管理员身份登入 Redmine，进入 &lt;code&gt;Administration -&amp;gt; Repositories&lt;/code&gt;（&lt;code&gt;settings?tab=repositories&lt;/code&gt;）。&lt;/p&gt;

&lt;h4 id=&#34;scm&#34;&gt;SCM&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Enabled SCM 中，我们要使用的 Gitlab，因此需要启用 Git 。如果 Git 不可选，则需要确认是否安装了 git，并在 Redmine 的 configuuration.yml 中进行设置。&lt;/li&gt;
&lt;li&gt;Fetch commits automatically：True，这个选项只是在用户打开仓库页面时候会获取仓库内容，别想多了。&lt;/li&gt;
&lt;li&gt;Enable WS for repository management：True&lt;/li&gt;
&lt;li&gt;Repository management WS API key：这里需要生成一个 API Key，用于后面的 WebHook 触发。&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&#34;commit-信息设置&#34;&gt;Commit 信息设置&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Referencing keywords：引用关键字，保持缺省即可，在 Commit 信息中加入 &lt;code&gt;refs #1&lt;/code&gt;，信息中会有到 #1 Issue 的连接。&lt;/li&gt;
&lt;li&gt;下面的表格中可以根据 Commit log 中的关键字对 Issue 进行更新（状态和进度），例如填写 fixed fixed %60 的话，代表 Commit 信息中如果出现 &lt;code&gt;fixed #1&lt;/code&gt;，则会把 Issue #1 更新为 Fixed，进度推进到 60%。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;为项目获取-git-仓库&#34;&gt;为项目获取 Git 仓库&lt;/h3&gt;

&lt;p&gt;在 Redmine 能访问得到的路径中，使用 git 命令克隆仓库：&lt;code&gt;git clone --mirror git@github.com:git_user/project.git&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&#34;项目仓库设置&#34;&gt;项目仓库设置&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;进入项目的仓库设置页面（&lt;code&gt;projects/[project-id]/settings/repositories&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;添加仓库&lt;/li&gt;
&lt;li&gt;路径指向上个步骤中的本地仓库的位置。&lt;/li&gt;
&lt;li&gt;保存。&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;projects/[project-id]/repository&lt;/code&gt; 中，现在就可以看到版本库和文件了，并可以进行 diff 等操作。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;安装插件&#34;&gt;安装插件&lt;/h3&gt;

&lt;p&gt;接下来安装 Redmin 插件&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;该插件将在 Redmine 中运行，用来响应来自 Gitlab 的 Webhook Post 请求。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Github：&lt;code&gt;https://github.com/phlegx/redmine_gitlab_hook&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;下载到 Redmine 的插件目录之后，重启 Redmine 即完成安装。&lt;/p&gt;

&lt;p&gt;可以在 Redmine 的 &lt;code&gt;admin/plugins&lt;/code&gt; 中看到这一新安装的插件。&lt;/p&gt;

&lt;p&gt;进入 &lt;code&gt;settings/plugin/redmine_gitlab_hook&lt;/code&gt;，选中 &lt;code&gt;All branches&lt;/code&gt;。&lt;/p&gt;

&lt;h2 id=&#34;gitlab-设置&#34;&gt;Gitlab 设置&lt;/h2&gt;

&lt;p&gt;Gitlab 的设置分两步，第一是将 Issue 管理功能从内置模块转为使用 Redmine，第二是利用 Webhook 在发生事件的时候，引发 Redmine 的仓库更新。&lt;/p&gt;

&lt;h3 id=&#34;issue&#34;&gt;Issue&lt;/h3&gt;

&lt;p&gt;进入 Gitlab 的项目服务设置页面：&lt;code&gt;[project-url]/services&lt;/code&gt;，找到 redmine 的设置：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Active：True&lt;/li&gt;
&lt;li&gt;Trigger：Push&lt;/li&gt;
&lt;li&gt;Project url：Redmine 中相关的项目地址，例如&lt;code&gt;http://redmine.local/projects/sample-project&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Issues url：一般是 Project url + &lt;code&gt;issues&lt;/code&gt;，例如&lt;code&gt;http://redmine.local/projects/sample-project/issues&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;New issue url：通常是 Issues url + &lt;code&gt;new&lt;/code&gt;，例如&lt;code&gt;http://redmine.local/projects/sample-project/issues/new&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;保存退出后，该项目的 Issue 相关连接就会转向 Redmine 中。（挺 Low 的。。）&lt;/p&gt;

&lt;h3 id=&#34;webhook&#34;&gt;Webhook&lt;/h3&gt;

&lt;p&gt;Webhook 是 Gitlab 的事件触发系统，这里我们借助这一功能，同 Redmine 的 Gitlab 插件协作，触发 Redmine 的自动更新。&lt;/p&gt;

&lt;p&gt;浏览项目的 Webhook 页面：&lt;code&gt;[project-url]/hooks&lt;/code&gt;，新建一个，URL 栏目填写
&lt;code&gt;http://redmine-url/gitlab_hook?project_id=[project-id]&amp;amp;key=[repository-token]&lt;/code&gt;，key 部分就是前文中提到的 Repository Token。&lt;/p&gt;

&lt;h3 id=&#34;测试&#34;&gt;测试&lt;/h3&gt;

&lt;p&gt;Git clone 代码之后，进行修改，提交 Comment 中写入 fixed #1，看 Redmine 中的这一 Issue 是否发生更新。&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
