Docker 创建 Crucible4.6.1 以及与 Crowd3.3.2 实现 SSO 单点登录

Docker 创建 Crucible4.6.1 以及与 Crowd3.3.2 实现 SSO 单点登录

目录

[TOC]

1、介绍

1.1、什么是 Crucible?

  Crucible 是一个协作式代码审查,以下是官网的功能介绍:

  • 交付高质量代码
      跨 SVN、Git、Mercurial,、CVS 和 Perforce 审查代码、讨论更改、共享知识和识别缺陷。

  • 审查
      创建基于工作流的正式或快速代码审查,并指派团队成员作为审查者。

  • 讨论
      将所有代码审查转换为线程讨论,并针对具体源代码行、文件或整个变更集合进行评论。

  • 跟踪
      借助提交、审查和评论等代码活动的统一视图,针对重要事项采取行动。

  • 报告
      通过代码库中尚未得到充分审查的部分数据提高代码质量。快速查看审查状态及可能执行审查的人员。

2、Crucible 的官网在哪里?

  https://www.atlassian.com/
   

3、如何下载安装?

  我将 Crucible 4.6.1 直接封装到了 Docker 镜像中,如何安装Docker,请参考这篇文章<Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例>,Crucible 4.6.1版本中,包含了 Fisheye,就不单独讲如何安装 Fisheye
    
  以下实例中安装 Crucible 4.6.1 ,需要用到 MySQL 5.7,如果你已经安装完Docker,可以下载已经做好的 <docker-compose.yml>。文件内容如下,请注意修改/srv/your_folder/my.ini的位置为你下载后的文件位置:

version: '3'
# https://docs.docker.com/compose/compose-file/
# support Docker version 17.05.0-ce
services:

#################################### crucible ######################################################

##############################
# crucible_mysql
##############################
  crucible_mysql:
    image: idoall/mysql:5.7
    hostname: crucible_mysql
    ports:
     - "6033:3306"
    volumes:
      - /srv/your_folder/my.ini:/etc/mysql/my.cnf
    networks:
      - mshk-crucible
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=crucible
      - MYSQL_USER=crucible
      - MYSQL_PASSWORD=crucible_mshk
      - character-set-server=utf8
      - collation-server=utf8_bin
    deploy:
      replicas: 1
      update_config:
        delay: 1s
      restart_policy:
        condition: on-failure
##############################
# crucible
##############################
  crucible:
    image: idoall/ubuntu16.04-jira-crucible:4.6.1
    hostname: crucible
    ports:
     - "80:8060"
    networks:
      - mshk-crucible
    depends_on:
     - crucible_mysql
    deploy:
      replicas: 1
      update_config:
        delay: 1s
      restart_policy:
        condition: on-failure

# 统一网络设置
networks:
  mshk-crucible:
    driver: overlay

     
  我们运行以下命令,使用 Docker Stack 的编排服务,来创建 Crucible 4.6.1 以及 MySQL 5.7 服务:

$ docker stack deploy -c docker-compose.yml mshk_crucible
Creating network mshk_crucible_mshk-crucible
Creating service mshk_crucible_crucible
Creating service mshk_crucible_crucible_mysql

  
  启动成功后,使用下面的命令,可以看到 Crucible 4.6.1MySQL 5.7 的服务运行状态:

$ docker service ls
ID                  NAME                           MODE                REPLICAS            IMAGE                                    PORTS
jortvvf4593r        mshk_crucible_crucible         replicated          1/1                 idoall/ubuntu16.04-jira-crucible:4.6.1   *:80->8060/tcp
2kaku3m4yjzd        mshk_crucible_crucible_mysql   replicated          1/1                 idoall/mysql:5.7                         *:6033->3306/tcp

  
  再等几分钟以后,在<docker-compose.yml>文件中,可以看到,我们对 Crucible 做了80->8060端口的映射,所以打开:http://localhost ,能够看到如下页面,说明运行成功:

这时的等待是因为 Crucible的服务需要启动, MySQL 5.7 的数据库需要创建。

Crucible-1
   

4、对 Crucible 进行配置

4.1、破解 Crucible 第一步

  Crucible 4.6.1 的破解文件已经打包到了 Docker 中。
  先用 docker ps 命令,查看服务生成的容器名称,本文测试时生成的容器名称是 mshk_crucible_crucible.1.zro8f01t4ts07npflxhsnzwkn

CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS              PORTS                     NAMES
e68cb73ae195        idoall/ubuntu16.04-jira-crucible:4.6.1   "/bin/bash -e /init/…"   7 minutes ago       Up 7 minutes        8060/tcp                  mshk_crucible_crucible.1.zro8f01t4ts07npflxhsnzwkn
32b377530f1a        idoall/mysql:5.7                         "docker-entrypoint.s…"   9 minutes ago       Up 9 minutes        3306/tcp                  mshk_crucible_crucible_mysql.1.y3x8xlkch7tkk4xvley7kcvx9

  Docker 编排服务后的容器名称比较长,把容器名称赋值到一个变量CONTAINERNAME ,这样后面使用起来会很方便。
  将要破解的文件、破解工具从容器中复制到本地,并将要破解的文件atlassian-extras-2.5.jar重命名为atlassian-extras-2.3.1-SNAPSHOT.jar

$ CONTAINERNAME=`docker ps --format "{{.Names}}" | grep mshk_crucible_crucible.1`
$ docker cp $CONTAINERNAME:/home/work/_app/_jira_crucible/lib/atlassian-extras-2.5.jar ./atlassian-extras-2.3.1-SNAPSHOT.jar
$ docker cp $CONTAINERNAME:/usr/src/_crucible/crucible_keygen.jar .

  在当前目录,运行以下命令,打开破解文件,在弹出的破解文件窗口中,点击.patch!,找到刚才从容器中复制出来的atlassian-extras-2.3.1-SNAPSHOT.jar文件。破解成功后,在破解工具的左下方,会提示jar successfully patched这时不要着急关闭破解文件的窗口,后面还会用到。 

$ java -jar crucible_keygen.jar

Crucible-2

  停止 Crucible 容器运行的服务;同时将 Crucible 容器的原文件 atlassian-extras-2.3.1-SNAPSHOT.jar 重命名为atlassian-extras-2.3.1-SNAPSHOT.jar.bak做备份;再将我们破解后的atlassian-extras-2.3.1-SNAPSHOT.jar文件,复制到容器中重命名为atlassian-extras-2.5.jar ;启动容器;下面是本次操作的命令:

$ docker exec $CONTAINERNAME sh -c '/home/work/_app/_jira_crucible/bin/stop.sh;mv /home/work/_app/_jira_crucible/lib/atlassian-extras-2.5.jar /home/work/_app/_jira_crucible/lib/atlassian-extras-2.5.jar.bak'
$ docker cp atlassian-extras-2.3.1-SNAPSHOT.jar $CONTAINERNAME:/home/work/_app/_jira_crucible/lib/atlassian-extras-2.5.jar
$ docker exec $CONTAINERNAME sh -c '/home/work/_app/_jira_crucible/bin/start.sh'

  
  这时在浏览器,输入 http://localhost,打开 Crucible ,能够打开以界面,说明破解的第一步成功。

  

4.2、破解 Crucible 第二步,获取授权许可

  点击 Enter existing license,在获取授权码时,回到我们刚才打开的破解文件窗口,输入NameEmailOrganizationServer ID,点击.gen!,生成授权码,并将授权码复制到页面中,点击Next
Crucible-3

4.2、连接到JIRA Connect to JIRA

  
  如果之前搭建过 JIRA (如何搭建JIRA,请参考 <Docker 创建 Jira Core/SoftWare 7.12.3 中文版>),在 JIRA Base URL 输入 JIRA的URL地址,在Admin Username 输入超级管理员的帐号,在 Admin Password 输入超级管理员的密码,Advanced Options...Crucible Base URL 输入当前 Crucible 配置的域名,然后点击 Connect to JIRA .
Crucible-4

4.3、设置默认管理员帐号 Set administrator password

  输入Create passwordConfirm password,点击Next
Crucible-5

4.7、完成安装 Start working with Crucible

  能够看到安装完成的页面,点击 add repository,输入 超级管理员 的密码,就可以进入到 Crucibile 的配置页面
  Crucible-6

4.8、查看破解后的授权信息

  点击左侧的 System Information,可以看到 License 信息,过期日期已经延长到了2337年。
Crucible-7
  做完上面的步骤,Crucible 的安装基本结束。
  

4.9、设置电子邮件 Mail Server

  登录以后,在左侧找到Global Settings->Server Settings,拖动页面,可以看到 Mail Server,然后点击 Edit config,去进行邮件配置。
  

4.10、设置数据库 Database Configuration

  登录以后,在左侧找到System Settings->DataBase,可以看到 Database Configuration,然后点击 Edit,去进行数据库配置。
  在 Type 选择 MySQL, 在 URL 输入 jdbc:mysql://crucible_mysql:3306/crucible,User Name 输入 cruciblePassword 输入 crucible_mshk ,点击 Test connection,能够看到提示 Connection succeeded ,最后点击 Save & Migrate进行保存和数据迁移,在弹出层上能够看到运行成功。
  Crucible-10

  

5、设置 Crucible 使用 Crowd 认证

5.1、在 Crowd 中添加 Crucible 应用程序

  步骤可以参考 文章<Docker 创建 Crowd 3.3.2 以及打通 Jira Software7.12.3和Confluence6.12.2 SSO 登录>的 4.12章节:添加 JIRA 和 Confluence 应用程序,步骤一样,只是在选择 Application type 时,在下拉框中选择 Crucible,输入 NamecrucibleDescriptionCrucible Application,再设置密码123456
    
  分别再在 Crowd 中添加 crucible-usersfisheye-users 两个用户组

5.2、设置 Crucible 的用户目录

  第一步:使用管理员帐号登录到 Crucible 后台,左侧点击 User Settings->User Directories,然后点击 Add Directory 在弹出的窗口中选择 Atlassian Crowd ,点击 Next
  第二步:在 Application Name 处输入刚才设置的 crucible 应用程序名称 crucible,在应用程序密码输入刚才我们设置的密码123456,点击 Test Settings,能够看到如下图中有绿色的提示框,提示 Connection test successful.,最后点 Save and Test
  第三步:在 用户目录,可以看到,我们刚添加的 Crowd Server 目录。
Crucible-8

  
  调整 Crowd Server 目录的顺序到第一行,调整后的顺序如下:
Crucible-9

5.3、启用 Crucible 与 Crowd 的 SSO 集成登录

  修改 Crucible 容器中的文件 /home/work/_data/_jira_crucible/config.xml ,添加 <crowd sso-enabled="true"/> 注册下面添加的位置,不要错了。

...
<security allow-anon="true" allow-cru-anon="true"> 
<built-in> 
  <signup enabled="true"/> 
</built-in>  
<!-- Crowd 的 SSO 支持 -->
<crowd sso-enabled="true"/>  
<admins>
  <system-admins/>
</admins>
<avatar>
  <disabled/>
</avatar>
</security>
...

  通过以下命令,重启 Crucible 容器内的服务,使用在Crowd 中配置的用户登录,就可以测试效果了。

$ CONTAINERNAME=`docker ps --format "{{.Names}}" | grep mshk_crucible_crucible.1`
$ docker exec $CONTAINERNAME sh -c '/home/work/_app/_jira_crucible/bin/stop.sh;/home/work/_app/_jira_crucible/bin/start.sh'

  

6、相关文章

6.1、Crucible Adding an Application

6.2、backing-up-and-restoring-crucible-data


博文作者:迦壹
博客地址:Docker 创建 Crucible4.6.1 以及与 Crowd3.3.2 实现 SSO 单点登录
转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作!


2 thoughts on “Docker 创建 Crucible4.6.1 以及与 Crowd3.3.2 实现 SSO 单点登录

  1. 大佬,crucible和fisheye我按你写的操作都安装好破解好了,但是服务器一重启就失效要重新破解,我看了服务器重启后docker里面容器ID和名称就变化了,不知道是不是这个原因导致,麻烦你有空帮我看看,谢谢!

    1. 一般情况下服务器很少重启,在重启的时候写个脚本,可以把破解文件重新写入

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注