Bugzilla在Rainbond部署以及应用制作分享

1.简介

Bugzilla是一个功能强大且成熟的缺陷跟踪系统或Bug跟踪系统。缺陷跟踪系统使开发人员团队可以有效地跟踪产品中未解决的错误,问题,问题,增强功能和其他更改请求。简单的缺陷跟踪功能通常内置在集成的源代码管理环境中,例如Github或其他基于Web的或本地安装的等效项。我们发现组织在超出这些系统功能的情况下便转向Bugzilla,例如,因为他们想要工作流管理,错误可见性控制(安全性)或自定义字段。

2.快速安装

Bugzilla项目已发布在开源商店中,可直接从开源商店一键部署。
bugzilla

3.应用制作过程分享

Bugzilla应用本身是支持Docker的,不过官方的镜像最后一次更新是四年前,所以需要我们手动制作镜像。

也是之前有社区的小伙伴提出要制作这个应用,今天它来了。

Bugzilla架构是Apache + Mysql,也是非常的简单。

根据官方文档基于 Fedora 安装 Bugzilla。

可参考Gitee源码地址:https://gitee.com/zhangbigqi/goodrain-apps/blob/master/bugzilla-5.0.6

首先我们需要一个Mysql5.7,官方要求在 mysqld.cnf增加一些参数 max_allowed_packet=16M ft_min_word_len=2,我们需要写一个Dockerfile把这些参数加进去,如下:

Dockerfile文件中的 bug.sql官方并没有提供,这是我在初始化后手动导出的sql文件,用来容器启动自动初始化,请接着往下看:point_down:

FROM mysql:5.7
ADD mysqld.cnf /etc/mysql/mysql.conf.d/
ADD bug.sql docker-entrypoint-initdb.d
ENV MYSQL_ROOT_PASSWORD=bug MYSQL_DATABASE=bug
VOLUME [ "/var/lib/mysql" ]
EXPOSE 3306

根据官方文档安装Bugzilla,Dockerfile文件中替换成了阿里源,其中RUN部分是根据官方文档给出的要求安装的一些依赖,包括httpd。

Dockerfile文件中的 localconfig startup.sh 都是手动生成的,请接着往下看:point_down:

FROM fedora:34
ADD localconfig /etc/bugzilla/localconfig
ADD startup.sh /root/startup.sh
RUN curl -o /etc/yum.repos.d/fedora.repo http://mirrors.aliyun.com/repo/fedora.repo \
    && curl -o /etc/yum.repos.d/fedora-updates.repo http://mirrors.aliyun.com/repo/fedora-updates.repo \
    && sudo yum makecache && yum -y install bugzilla httpd \
    && yum -y install vim net-tools httpd mysql-server mod_perl mod_perl-devel httpd-devel gd-devel mysql-devel graphviz patchutils gcc 'perl(Apache2::SizeLimit)' 'perl(Authen::Radius)' 'perl(Authen::SASL)' 'perl(Cache::Memcached)' 'perl(CGI)' 'perl(Chart::Lines)' 'perl(Daemon::Generic)' 'perl(Date::Format)' 'perl(DateTime)' 'perl(DateTime::TimeZone)' 'perl(DBI)' 'perl(Digest::SHA)' 'perl(Email::MIME)' 'perl(Email::Reply)' 'perl(Email::Sender)' 'perl(Encode)' 'perl(Encode::Detect)' 'perl(File::MimeInfo::Magic)' 'perl(GD)' 'perl(GD::Graph)' 'perl(GD::Text)' 'perl(HTML::FormatText::WithLinks)' 'perl(HTML::Parser)' 'perl(HTML::Scrubber)' 'perl(IO::Scalar)' 'perl(JSON::RPC)' 'perl(JSON::XS)' 'perl(List::MoreUtils)' 'perl(LWP::UserAgent)' 'perl(Math::Random::ISAAC)' 'perl(MIME::Parser)' 'perl(mod_perl2)' 'perl(Net::LDAP)' 'perl(Net::SMTP::SSL)' 'perl(PatchReader)' 'perl(SOAP::Lite)' 'perl(Template)' 'perl(Template::Plugin::GD::Image)' 'perl(Test::Taint)' 'perl(TheSchwartz)' 'perl(URI)' 'perl(XMLRPC::Lite)' 'perl(XML::Twig)'
VOLUME [ "/var/lib/bugzilla/data","/var/lib/bugzilla/graphs"]
EXPOSE 80
CMD sh /root/startup.sh

build完成后,我们 docker run -it xxx bash ,进入容器初始化数据库,默认目录 /usr/share/bugzilla

/usr/share/bugzilla 目录下有个文件 checksetup.pl 是用来初始化数据以及生成配置文件的。

第一次执行./checksetup.pl 会在 /etc/bugzilla 目录下生成配置文件 localconfig ,用来配置连接数据库。vi localconfig 编辑配置文件,配置好数据库连接地址以及账号密码数据库。

第二次执行./checksetup.pl 会初始化数据库,生成一些表以及在 /var/lib/bugzilla/data /var/lib/bugzilla/graphs 目录下生成数据。执行过程中会提示我们进行交互,输入管理员邮箱等等。

至此手动完成,接下来我们需要做自动化初始数据。

  1. 进入数据库,导出初始化生成的表结构以及数据,就是上边Dockerfile文件中的 bug.sql 文件。

  2. 挂载配置文件 /etc/bugzilla/localconfig

  3. 编写启动脚本,这里做一个简单的判断,首次启动会在 bugzilla/data bugzilla/graphs 生成数据,根据文件夹下有无内容来判断是否是首次启动,如无内容则初始化,有内容则直接启动。这也是上面Dockerfile文件中的 startup.sh

#!/bin/bash
data=/var/lib/bugzilla/data
graphs=/var/lib/bugzilla/graphs

if [ "`ls -A ${data}`" = "" ]; then 
   if [ "`ls -A ${graphs}`" = "" ]; then 
       httpd && cd /usr/share/bugzilla && ./checksetup.pl && tail -f /etc/httpd/logs/*
   fi
else
   echo "${data} ${graphs} ·········is ·······not ········empty···········"
   httpd && tail -f /etc/httpd/logs/*
fi

至此最终Dockerfile文件就是以上两个文件,可直接在Rainbond中通过Dockerfile构建组件。

Gitee源码地址:https://gitee.com/zhangbigqi/goodrain-apps/blob/master/bugzilla-5.0.6