【Slog】redmine安装并与gitlab集成(第一部分:添加git版本库)
redmine是啥?
Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统,据说是源于Basecamp的ror版而来,支持多种数据库,有不少自己独特的功能,例如提供wiki、新闻台等,还可以集成其他版本管理系统和BUG跟踪系统,例如Perforce、SVN、CVS、TD等等。这种 Web 形式的项目管理系统通过“项目(Project)”的形式把成员、任务(问题)、文档、讨论以及各种形式的资源组织在一起,大家参与更新任务、文档等内容来推动项目的进度,同时系统利用时间线索和各种动态的报表形式来自动给成员汇报项目进度。
————上述内容来自百度百科
简单一句话描述一下就是,用来进行项目管理和bug追踪。
安装redmine?
如果使用一般软件的安装方法,redmine有挺多坑需要踩。但这里使用docker来安装redmine,极大的减少了麻烦。总体上就两行代码的事情,概括为以下两点:
- 安装数据库
- 安装redmine
Docker的安装可以参考“菜鸟教程-docker安装部分”,然后GitHub搜索名为“docker-redmine”的项目,其README提供docker-redmine镜像的一切资料。
打开该页面后根据其目录直接跳转到“Quick Start”部分,即便是“Quick Start”其也提供了两种安装方式。一个是使用脚本进行安装,另一个是使用上文的“两步走”来进行安装。本文使用“两步走”的方式进行安装。
来到quick start的部分,可以看见其提供了“两步走”的相应的命令行。
但我们并不能完全照搬其命令行(安装redmine),因为后期还需要进行git版本库的映射,所以需要改动该命令行,当然也就多了一行代码的事。
安装postgresql数据库
PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。另外,因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。
————上述内容来自百度百科
回归到代码
docker run --name=postgresql-redmine -d \
--env='DB_NAME=redmine_production' \
--env='DB_USER=redmine' --env='DB_PASS=password' \
--volume=/srv/docker/redmine/postgresql:/var/lib/postgresql \
sameersbn/postgresql:9.6-4
docker run --name=postgresql-redmine -d \
--env='DB_NAME=redmine_production' \
--env='DB_USER=redmine' --env='DB_PASS=password' \
--volume=/srv/docker/redmine/postgresql:/var/lib/postgresql \
sameersbn/postgresql:9.6-4
没接触过docker,看见这么长一串的命令行,第一反应肯定是头疼。直接就遵循“用而不问”的原则,但解释之后你就会明白这是干了个啥,并且变得很简单。首先需要明白三个概念:
- 镜像:Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板 。例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了 Apache 应用程序(或用户需要的其他软件) 。可以把它称为一个 Apache 镜像 。镜像是创建 Docker 容器的基础 。通过版本管理和增量的文件系统, Docker 提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用 。
- 容器:Docker 容器类似于一个轻量级的沙箱, 容器是从镜像创建的应用运行实例 。容器是从镜像创建的应用运行实例 。它可以启动、开始、停止 、 删除,而这些容器都是彼此相互隔离、互不可见的 。可以把容器看作一个简易版的 Linux 系统环境(包括 root 用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。镜像自身是只读的 。容器从镜像启动的时候,会在镜像的最上层创建一个可写层 。
- 仓库:Docker 仓库类似于代码仓库,是 Docker 集中存放镜像文件的场所。
安装postgresql数据库的命令行
docker run --name=postgresql-redmine -d \
--env='DB_NAME=redmine_production' \
--env='DB_USER=redmine' \
--env='DB_PASS=password' \
--volume=/srv/docker/redmine/postgresql:/var/lib/postgresql \
sameersbn/postgresql:9.6-4
docker run --name=postgresql-redmine -d \
--env='DB_NAME=redmine_production' \
--env='DB_USER=redmine' \
--env='DB_PASS=password' \
--volume=/srv/docker/redmine/postgresql:/var/lib/postgresql \
sameersbn/postgresql:9.6-4
命令解析
docker run --name=postgresql-redmine -d
run运行容器(相当于先进行docker create,再进行docker start)
--name=xxx,指定容器的别名
-d 后台运行容器,并返回容器ID
docker run --name=postgresql-redmine -d
run运行容器(相当于先进行docker create,再进行docker start)
--name=xxx,指定容器的别名
-d 后台运行容器,并返回容器ID
--env,设置环境变量(毕竟容器本身相当于一个简易版的Linux操作系统)
--env,设置环境变量(毕竟容器本身相当于一个简易版的Linux操作系统)
--volume=/srv/docker/redmine/postgresql:/var/lib/postgresql
指定数据卷,为了数据的安全和交互的方便,这些文件夹将映射到宿主机本身
如上述代码将容器内部/var/lib/postgresql路径映射到了宿主机的/srv/docker/redmine/postgresql路径
--volume=/srv/docker/redmine/postgresql:/var/lib/postgresql
指定数据卷,为了数据的安全和交互的方便,这些文件夹将映射到宿主机本身
如上述代码将容器内部/var/lib/postgresql路径映射到了宿主机的/srv/docker/redmine/postgresql路径
sameersbn/postgresql:9.6-4
指定run的软件的版本
sameersbn/postgresql:9.6-4
指定run的软件的版本
Tips:如果本地没有该软件版本的镜像,在联网的情况其将自动pull(拉取)该版本的镜像
安装redmine
在这里redmine需要集成gitlab的版本库,所以在进行run的时候需要添加一行git-repo数据卷的映射操作。
- 数据卷 ( Data Volumes ) :容器内数据直接映射到本地主机环境;
docker run --name=redmine -d \
--link=postgresql-redmine:postgresql \
--publish=10083:80 \
--env='REDMINE_PORT=10083' \
--volume=/srv/docker/redmine/redmine:/home/redmine/data \
--volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
--volume=/srv/docker/redmine/git_repo:/home/redmine/git_repo \ #自添加
sameersbn/redmine:4.1.1-5
docker run --name=redmine -d \
--link=postgresql-redmine:postgresql \
--publish=10083:80 \
--env='REDMINE_PORT=10083' \
--volume=/srv/docker/redmine/redmine:/home/redmine/data \
--volume=/srv/docker/redmine/redmine-logs:/var/log/redmine/ \
--volume=/srv/docker/redmine/git_repo:/home/redmine/git_repo \ #自添加
sameersbn/redmine:4.1.1-5
因为大多数参数前面已经介绍过了,这里只介绍没有出现过的和自己添加的部分
--link=postgresql-redmine:postgresql
将redmine容器链接到postgresql,这样才能让redmine使用该数据库
--link=postgresql-redmine:postgresql
将redmine容器链接到postgresql,这样才能让redmine使用该数据库
--publish=10083:80
将容器的80端口映射到宿主机的10083端口
--publish=10083:80
将容器的80端口映射到宿主机的10083端口
--volume=/srv/docker/redmine/git_repo:/home/redmine/git_repo
将要建立的git-mirror的地址映射到宿主机的/srv/docker/redmine/git_repo路径下
--volume=/srv/docker/redmine/git_repo:/home/redmine/git_repo
将要建立的git-mirror的地址映射到宿主机的/srv/docker/redmine/git_repo路径下
更换redmine主题
安装完成后,在宿主机通过0.0.0.0:10083登录即可。而其他的机器使用“宿主机IP:10083”登录即可,如:192.168.25.138:10083
初始的管理员账号为(第一次登录会让你重置密码):
- 账号名:admin
- 密码:admin
登录上redmine之后,你会发现这界面是真的丑。看下图
好在其能够更换主题
Step1:下载主题
#切换到数据卷的主题路径下
cd /srv/docker/redmine/redmine/themes
#切换到数据卷的主题路径下
cd /srv/docker/redmine/redmine/themes
至于主题你可以登录redmine官网主题板块进行选择,这里我选择的是Dwarf这个为了适应高分辨率屏幕的主题。其采用侧边栏显示的方式能与gitlab的逻辑更加相似,观感上至少强于默认主题。
#clone主题文件
git clone https://github.com/themondays/Dwarf.git
#该主题项目文件夹下的production/dwarf才是真正有效的主题文件,将其拷贝到/srv/docker/redmine/redmine/themes目录下
cp -a /srv/docker/redmine/redmine/themes/Dwarf/production/dwarf /srv/docker/redmine/redmine/themes
#clone主题文件
git clone https://github.com/themondays/Dwarf.git
#该主题项目文件夹下的production/dwarf才是真正有效的主题文件,将其拷贝到/srv/docker/redmine/redmine/themes目录下
cp -a /srv/docker/redmine/redmine/themes/Dwarf/production/dwarf /srv/docker/redmine/redmine/themes
完成上述步骤之后,那么step1就完成了
Step2:安装主题
因为这里使用的是docker安装的redmine,所以按照一般的流程下载之后需要重启docker-redmine。但是最好的选择是重启系统,不知道是我这个系统还是环境的问题。如果使用docker restart redmine其端口映射将会失效或者redmine使用docker start启动不了。
但是你就是比较傲娇,就是不想重启系统怎么搞?主题下载之后使用下列这个命令行即可。
#来自于docker-redmine的手册
docker exec -it redmine redmine-install-themes
#来自于docker-redmine的手册
docker exec -it redmine redmine-install-themes
现在就可以既不需要重启docker-redmine,也不需要重启系统。就能够让下载的主题生效了。
Step3:生效主题
生效主题就比较简单了,直接进入“配置 -> 显示”选择Dwarf主题并保存即可。当然也可以顺便将用户显示格式改为中文习惯,毕竟默认设置比较反“中国人的习惯”。
新主题安装后的登录界面
新主题的“配置”界面
题更换完成,那么接下来进入本文的重点。
redmine同步gitlab的版本库。
Redmine同步GitLab版本库
设置免密验证
通常git的使用都离不开Http和SSH,所以redmine同步版本库依旧需要先建立连接协议。但在局域网中,往往采用更加安全有效的SSH协议。这里需要在gitlab服务器中添加redmine服务器的ssh keys,实现免密验证。
#查看是否安装git
git --verision
#生成ssh keys(邮箱自定义)
ssh-keygen -t rsa -C "xxx@xxx.com"
#显示该密钥(所有显示、打开方式都成,下边为默认的ssh-keys路径),并复制它
cat /root/.ssh/id_rsa.pub
#查看是否安装git
git --verision
#生成ssh keys(邮箱自定义)
ssh-keygen -t rsa -C "xxx@xxx.com"
#显示该密钥(所有显示、打开方式都成,下边为默认的ssh-keys路径),并复制它
cat /root/.ssh/id_rsa.pub
登陆上gitlab,点击图上的扳手,点击部署密钥,点击新建部署密钥,输入名字和ssh keys并保存即可。
然后,到想要同步的项目(此处为用于测试的test项目)进行密钥使能,操作流程如下图。
这一步完成之后,gitlab管理员账号的免密验证就完成了。
构建refmine版本库
建立镜像仓库
到redmine服务器设置的git_repo路径下clone仓库,记得加上--mirror。可直接clone该仓库并获得所有的分支,代码如下
cd /srv/docker/redmine/git_repo/
git clone --mirror remore_addr #remore_addr为远程仓库地址
cd /srv/docker/redmine/git_repo/
git clone --mirror remore_addr #remore_addr为远程仓库地址
设置redmine
登录到redmine的Web端,来设置git的版本库即可
上图设置的关键点:
- 只保留git,这只用了git来做版本控制
- API密钥点输入框右侧的“生成”即可
- “用于引用问题的关键字”这一栏需要加上“,*”,不然只有加上#issue id才能关联到issue
- “用于解决问题的关键字”则看自己的使用需求进行设置
然后到对应的项目中进行项目的配置,这里我建立了一个用于测试的test项目
首先,需要在该项目中建立版本库并进行设置
注意:
- 标识,只要遵循其规则即可,任意设置
- 库路径,这个需要特别注意,其对应的是Docker-redmine容器里边的库路径。忘记了,就翻到前文“安装redmine”的部分即可得知。同时,要在后边加上镜像文件夹,如我的test.git
点击创建,再点击左侧的“版本库”即可看到redmine同步的版本库,并且可以进一步查看分支图。
但这里又引出了一个问题,每次用redmine查看同步的版本库时还需要我手动去更新。这岂不是一件很蠢的事情。
自动定时更新redmine版本库
为了测试,这里我建立了b5这个分支,并推送到了远程端。但从redmnie的版本库中查看,其并没有变化,说明这个镜像库并没有得到同步。如上节所说我们不可能去做蠢事,所以我们需要设定其定时自动来进行更新该镜像库。
来到宿主机的映射文件夹git_repo,输入下列命令行
crontab -e
crontab -e
如果第一次使用,其会让你选择用什么方式来打开该文件。可以任意选择,也可以直接点击Enter选择默认的选项。在其打开的文件中输入以下代码即可,输入完成后保存退出就行。
#含义:每分钟到该路径下执行fetch
*/1 * * * * cd /srv/docker/redmine/git_repo/test.git && /usr/bin/git fetch
#含义:每分钟到该路径下执行fetch
*/1 * * * * cd /srv/docker/redmine/git_repo/test.git && /usr/bin/git fetch
想了解Linux定时执行脚本的同学,可以到下面这个地址来学习:
在设置完成后,在我没有手动更新redmine版本库的情况下,去查看下该git版本库有无变化。
可以从上图中看到,b5已经得到了更新。
至此,redmine安装并与gitlab集成(第一部分:添加git版本库)已经完成。