1.简介
Bugzilla是一个功能强大且成熟的缺陷跟踪系统或Bug跟踪系统。缺陷跟踪系统使开发人员团队可以有效地跟踪产品中未解决的错误,问题,问题,增强功能和其他更改请求。简单的缺陷跟踪功能通常内置在集成的源代码管理环境中,例如Github或其他基于Web的或本地安装的等效项。我们发现组织在超出这些系统功能的情况下便转向Bugzilla,例如,因为他们想要工作流管理,错误可见性控制(安全性)或自定义字段。
2.快速安装
Bugzilla项目已发布在开源商店中,可直接从开源商店一键部署。
3.应用制作过程分享
Bugzilla应用本身是支持Docker的,不过官方的镜像最后一次更新是四年前,所以需要我们手动制作镜像。
也是之前有社区的小伙伴提出要制作这个应用,今天它来了。
Bugzilla架构是Apache + Mysql,也是非常的简单。
根据官方文档基于 Fedora 安装 Bugzilla。
首先我们需要一个Mysql5.7,官方要求在 mysqld.cnf
增加一些参数 max_allowed_packet=16M
ft_min_word_len=2
,我们需要写一个Dockerfile把这些参数加进去,如下:
Dockerfile文件中的 bug.sql官方并没有提供,这是我在初始化后手动导出的sql文件,用来容器启动自动初始化,请接着往下看👇
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 都是手动生成的,请接着往下看👇
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
目录下生成数据。执行过程中会提示我们进行交互,输入管理员邮箱等等。
至此手动完成,接下来我们需要做自动化初始数据。
- 进入数据库,导出初始化生成的表结构以及数据,就是上边Dockerfile文件中的
bug.sql
文件。
- 挂载配置文件
/etc/bugzilla/localconfig
。
- 编写启动脚本,这里做一个简单的判断,首次启动会在
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