背景 最近在做devOps自动化集成部署的事情,在比较了多款issue tracker后,还是决定使用JIRA。因为相对于其他软件来说,它的功能更强大、更完善。不过很不幸的是,JIRA的使用需要商业授权而且费用相当高昂,对于我们这种小公司来说,只能使用破解版本了。
基础环境 如何安装docker,在这里就不做描述了
改写Dockerfile 网上有相对符合我需求的现成Dockerfile两种:
第一种版本有点旧(7.2.7的版本,破解补丁已经有7.3的版本了),曾经尝试在这种版本上做直接调整,发现层出不穷的问题,果断放弃。 第二种版本是最新的(7.4.x的版本,但是破解补丁没有这么新),而且只是jira-core的版本,不是jira-software的版本,不符合我的要求,因此需要对这个版本做修改。
下载源码 1 2 3 git clone https://github.com/cptactionhank/docker-atlassian-jira.git cd docker-atlassian-jira
编辑Dockerfile文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 FROM openjdk:8 ENV JIRA_HOME /var/atlassian/jiraENV JIRA_INSTALL /opt/atlassian/jiraENV JIRA_VERSION 7.3 .8 ENV TEMP_PATH /temp/jiraRUN mkdir /temp && mkdir /temp/jiraCOPY mysql-connector-java-5.1.39-bin.jar /temp/jira/mysql-connector-java-5.1.39-bin.jarCOPY atlassian-extras-3.2.jar /temp/jira/atlassian-extras-3.2.jarCOPY postgresql-9.4.1212.jar /temp/jira/postgresql-9.4.1212.jarCOPY atlassian-jira-software-7.3.8.tar.gz /temp/jira/atlassian-jira-software-7.3.8.tar.gzCOPY sources.list.163 /temp/jira/sources.list.163RUN set -x \ && mv /etc/apt/sources.list /etc/apt/sources.list.back \ && cp "${TEMP_PATH}/sources.list.163" /etc/apt/sources.list \ # && echo "deb http://mirrors.163.com/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list \ && apt-get update --quiet \ && apt-get install --quiet --yes --no-install-recommends xmlstarlet \ && apt-get install --quiet --yes --no-install-recommends -t jessie-backports libtcnative-1 \ && apt-get clean \ && mkdir -p "${JIRA_HOME}" \ && mkdir -p "${JIRA_HOME}/caches/indexes" \ && chmod -R 700 "${JIRA_HOME}" \ && chown -R daemon:daemon "${JIRA_HOME}" \ && mkdir -p "${JIRA_INSTALL}/conf/Catalina" \ && cp "${TEMP_PATH}/atlassian-jira-software-${JIRA_VERSION}.tar.gz" "./atlassian-jira-software-${JIRA_VERSION}.tar.gz" \ && tar -zxvf "./atlassian-jira-software-${JIRA_VERSION}.tar.gz" --directory "${JIRA_INSTALL}" --strip-components=1 --no-same-owner \ && curl -Ls "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.38.tar.gz" | tar -xz --directory "${JIRA_INSTALL}/lib" --strip-components=1 --no-same-owner "mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar" \ && rm -f "${JIRA_INSTALL}/lib/postgresql-9.1-903.jdbc4-atlassian-hosted.jar" \ && curl -Ls "https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar" -o "${JIRA_INSTALL}/lib/postgresql-9.4.1212.jar" \ && chmod -R 700 "${JIRA_INSTALL}/conf" \ && chmod -R 700 "${JIRA_INSTALL}/logs" \ && chmod -R 700 "${JIRA_INSTALL}/temp" \ && chmod -R 700 "${JIRA_INSTALL}/work" \ && chown -R daemon:daemon "${JIRA_INSTALL}/conf" \ && chown -R daemon:daemon "${JIRA_INSTALL}/logs" \ && chown -R daemon:daemon "${JIRA_INSTALL}/temp" \ && chown -R daemon:daemon "${JIRA_INSTALL}/work" \ && sed --in-place "s/java version/openjdk version/g" "${JIRA_INSTALL}/bin/check-java.sh" \ && echo -e "\njira.home=$JIRA_HOME" >> "${JIRA_INSTALL}/atlassian-jira/WEB-INF/classes/jira-application.properties" \ && touch -d "@0" "${JIRA_INSTALL}/conf/server.xml" RUN set -x \ && rm -rf "${JIRA_INSTALL}/atlassian-jira/WEB-INF/lib/atlassian-extras-3.2.jar" \ && cp "${TEMP_PATH}/atlassian-extras-3.2.jar" "${JIRA_INSTALL}/atlassian-jira/WEB-INF/lib/atlassian-extras-3.2.jar" USER daemon:daemonEXPOSE 8080 VOLUME ["/var/atlassian/jira", "/opt/atlassian/jira/logs"]WORKDIR /var/atlassian/jiraCOPY "docker-entrypoint.sh" "/"ENTRYPOINT ["/docker-entrypoint.sh"]CMD ["/opt/atlassian/jira/bin/catalina.sh", "run"]
构建image 现在已经有了线程的Dockerfile,那么久可以直接上手构建镜像了:
1 docker build -t local-jira:7.3.8 .
注意不要遗漏最后一个“.”,这个是用来指定目标Dockerfile文件的所在文件夹。
运行 构建完成镜像,我们现在可以根据镜像直接运行jira:
1 docker run --publish 8080:8080 --name jira -d local-jira:7.3.8
可以看到,容器已经完美运行:
提醒:在第一个界面的右上角,可以直接更改为中文(默认英文)
生产环境数据库 不要着急,如果是正式部署在生产环境上的,如果使用内置数据库,总感觉有点不保险,JIRA也建议如果部署在生产环境上的话,直接使用外部数据库,因此我们只需要在docker容器上启动一个数据库即可:
1 2 3 4 5 6 7 8 docker run --name jira-mysql \ -e MYSQL_ROOT_PASSWORD=ROOT_PASSWORD \ -e MYSQL_DATABASE=JIRA_DATABASENAME \ -e MYSQL_USER= JIRA_USER\ -e MYSQL_PASSWORD=JIRA_PASSWORD \ -d mysql:latest \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_bin
结束语 有了数据库后,直接在jira配置的时候,使用外部数据库连接就行了。