Docker 創建 Bamboo6.7.1 以及與 Crowd3.3.2 實現 SSO 單點登錄

目錄

1、介紹

1.1、什麼是 Bamboo?

  Bamboo 是一個進行持續集成、部署和交付的工具,以下是官網的功能介紹:

  • 構建
      像 CI 和構建服務器一樣專注於 Bamboo 上的編碼和計數!創建多階段構建計劃、設置觸發器以在提交時開始構建,並將代理分配給關鍵的構建和部署。

  • 測試
      測試是持續集成的關鍵部分。在 Bamboo 中運行自動化測試,可以在每次更改後完全復原您的產品。並行自動化測試可發揮敏捷開發的強大力量,並使得捕捉缺陷變得更加容易和快速。

  • 部署
      Bamboo 爲持續交付的“交付”方面提供一流的支持。單調乏味的部署項目會自動發佈到每個環境中,同時讓您能夠使用按環境授予的權限來控制流程。

  • 連接
      Bamboo 擁有與nbspJira Software、Bitbucket 和 Fisheye 的最佳集成。此外,您還可以通過以下方式來增加 CI 管道:從我們的 Marketplace 中的 150 多個插件中進行選擇或自己創建!

2、Bamboo 的官網在哪裏?

  https://www.atlassian.com/
   

3、如何下載安裝?

  Bamboo 6.7.1 已經封裝到了 Docker 鏡像中,如何安裝Docker,請參考這篇文章<Centos7的安裝、Docker1.12.3的安裝,以及Docker Swarm集羣的簡單實例> 。
    
  以下實例中安裝 Bamboo 6.7.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:

#################################### bamboo ######################################################

##############################
# jira_bamboo_mysql
##############################
  jira_bamboo_mysql:
    image: "idoall/mysql:5.7"
    hostname: jira_bamboo_mysql
    ports:
     - "6033:3306"
    volumes:
      - /srv/your_folder/my.ini:/etc/mysql/my.cnf
    networks:
      - bamboo
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=bamboo
      - MYSQL_USER=bamboo
      - MYSQL_PASSWORD=bamboo_mshk
      - character-set-server=utf8mb4
      - collation-server=utf8mb4_bin
    deploy:
      replicas: 1
      update_config:
        delay: 1s
      restart_policy:
        condition: on-failure
##############################
# jira_bamboo
##############################
  jira_bamboo:
    image: "idoall/ubuntu16.04-jira-bamboo:6.7.1"
    hostname: jira_bamboo
    ports:
     - "80:8085"
    networks:
      - bamboo
    depends_on:
     - jira_bamboo_mysql
    deploy:
      replicas: 1
      update_config:
        delay: 1s
      restart_policy:
        condition: on-failure

# 統一網絡設置
networks:
  bamboo:
    driver: overlay

     
  我們運行以下命令,使用 Docker Stack 的編排服務,來創建 Bamboo 6.7.1 以及 MySQL 5.7 服務:

$ docker stack deploy -c docker-compose.yml mshk_bamboo
Creating network mshk_bamboo_bamboo
Creating service mshk_bamboo_jira_bamboo
Creating service mshk_bamboo_jira_bamboo_mysql

  
  啓動成功後,使用下面的命令,可以看到 Bamboo 6.7.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>文件中,可以看到,我們對 Bamboo 做了80->8085端口的映射,所以打開:http://localhost ,能夠看到如下頁面,說明運行成功:

這時的等待是因爲 Bamboo 的服務需要啓動, MySQL 5.7 的數據庫需要創建。

   

4、對 Bamboo 進行配置

4.1、獲取授權許可

  點擊 Atlassian ,先獲取試用許可證。

  
  在彈出的窗口中,會看到如下界面,輸入Organization,確認 Server ID ,然後點擊 Generate License

  
  複製 License Key,填寫到剛纔頁面中的License key文本框中, 然後點擊Custom installation 如下圖:

  

4.2、一般配置

  可以在 Name 中設置 Bamboo 的實例名稱,在 Base URL 配置你的服務器地址。其他的選項,根據你的情況修改,在這裏不做修改。點擊 Continue

  

4.3、數據庫配置

  在 Choose a database configuration 選項卡中,Select database 選擇 External,然後在下拉列表中,選擇 MySQL ,點擊 Continue

  
  數據庫連接信息我們在<docker-compose.yml>中已經配置好。在 Database URL 輸入 jdbc:mysql://jira_bamboo_mysql/bamboo?autoReconnect=true, 在 User name 輸入 bamboo ,在 Password 輸入 bamboo_mshk,點擊 Continue
  在下一步選擇 Create a new Bamboo home,點擊 Continue

  

4.4、設置管理員帳號和密碼

  在這一步中,輸入管理員帳號、密碼、全名、郵件,然後點擊 Finish,能夠看到歡迎信息。

  

4.5、查看破解信息

  Bamboo 的破解文件已經打包到了 Docker 中。
  點擊右上角的齒輪->Overview,在最左側找到 License details,可以看到,持續支持到 2099 年。

  

5、設置 Bamboo 使用 Crowd 認證

5.1、在 Crowd 中添加 Bamboo 需要用到的用戶組

  Crowd 的安裝,請參考文章:Docker 創建 Crowd3.3.2 以及打通 Jira Software7.12.3和Confluence6.12.2 SSO 單點登錄
  參考 Crowd 安裝中的 4.10章節 ,添加 bamboo-adminbamboo-user 用戶組。

  

5.2、在 Crowd 中添加 Bamboo 應用程序

  參考文章<Docker 創建 Crowd3.3.2 以及打通 Jira Software7.12.3和Confluence6.12.2 SSO 單點登錄>中的 4.12章節,在 Crowd 中添加 Bamboo 應用程序。點擊 Applications->Add application,在 Application type 選擇 Bamboo,輸入 NamebambooDescriptionBamboo Application,再設置密碼123456,點擊Next

  
  在URL輸入設置的Bamboo URL地址,點擊 Resolve IP address,會自動解析出 Remote IP address
  選擇創建的apps目錄,點擊Next
  在Director中勾選Allow all users to authenticate點擊Next
  最後點擊Add Application,新應用添加成功。
  

5.3、在 Bamboo 中設置 Crowd 的用戶目錄

  第一步:點擊右上角的齒輪->Overview,在最左側找到 User directories,然後點擊 Add Directory 在彈出的窗口中選擇 Atlassian Crowd ,點擊 Next
  第二步:在 Server URL 處輸入 Crowd 的URL地址,在 Application Name 處輸入剛纔設置的 bamboo 應用程序名稱 bamboo,在應用程序密碼輸入剛纔我們設置的密碼123456,點擊 Test Settings,能夠看到如下圖中有綠色的提示框,提示 Connection test successful.,最後點 Save and Test
  第三步:在 用戶目錄,可以看到,我們剛添加的 Crowd Server 目錄。
  

  調整 Crowd Server 目錄的順序到第一行,調整後的順序如下:
  

5.4、啓用 Bamboo 與 Crowd 的 SSO 集成登錄

5.4.1、修改 crowd.properties 文件

  修改 Bamboo 容器中的文件 /home/work/_data/_jira_bamboo/xml-data/configuration/crowd.properties,將 crowd.properties 文件中的內容application.name修改爲bambooapplication.password修改爲123456,根據你的 Crowd部署情況看是否要修改 application.login.urlcrowd.server.url,修改後的內容如下:

application.name                        bamboo
application.password                    123456
application.login.url                   http://localhost:8095/crowd/console/

crowd.server.url                        http://localhost:8095/crowd/services/

session.isauthenticated                 session.isauthenticated
session.tokenkey                        session.tokenkey
session.validationinterval              2
session.lastvalidation                  session.lastvalidation

bamboo.crowd.cache.minutes              60
cookie.tokenkey                         crowd.token_key

5.4.2、安裝 Bamboo 需要的 JAR 文件

  將 Crowd 容器目錄中的 /home/work/_app/_jira_crowd/client/crowd-integration-client-3.3.2.jar 文件,複製到 Bamboo 容器的 /home/work/_app/_jira_bamboo/atlassian-bamboo/WEB-INF/lib/ 目錄下面

如果使用的是 <Docker 創建 Crowd3.3.2 以及打通 Jira Software7.12.3和Confluence6.12.2 SSO 單點登錄> 中創建的 Crowdcrowd-integration-client-3.3.2.jar 文件已經封裝在了 Bamboo 容器中,執行以下命令進行復制

$ CONTAINERNAME=`docker ps --format "{{.Names}}" | grep mshk_bamboo_jira_bamboo.1`
$ docker exec $CONTAINERNAME sh -c 'cp /usr/src/_bamboo/crowd-integration-client-3.3.2.jar /home/work/_app/_jira_bamboo/atlassian-bamboo/WEB-INF/lib/'

  

5.4.3、配置 Bamboo 使用 Crowd 認證 

  設置 Bamboo 的驗證授權爲 Crowd,修改 /home/work/_app/_jira_bamboo/atlassian-bamboo/WEB-INF/classes/atlassian-user.xml 文件,將 <crowd key="crowd" name="Crowd Repository"/> 取消註釋,修改後的內容如下:

<atlassian-user>
    <repositories>

        <!--LDAP: Uncomment the following block and modify accordingly for LDAP integration-->
        <!--<ldap key="adRepository" name="AD Repository" cache="true">-->
            <!--<host>host</host>-->
            <!--<port>389</port>-->

            <!--<securityPrincipal>CN=Administrator,CN=Users,DC=ad,DC=yourorg,DC=com</securityPrincipal>-->
            <!--<securityCredential>administrator</securityCredential>-->
            <!--<securityProtocol>plain</securityProtocol>-->
            <!--<securityAuthentication>simple</securityAuthentication>-->
            <!--<baseContext>dc=yourorg,dc=com</baseContext>-->

            <!--<baseUserNamespace>CN=Users,DC=ad,DC=yourorg,DC=com</baseUserNamespace>-->

            <!--<baseGroupNamespace>CN=Users,DC=ad,DC=yourorg,DC=com</baseGroupNamespace>-->
            <!--<usernameAttribute>sAMAccountName</usernameAttribute>-->

            <!--<userSearchFilter>(objectClass=person)</userSearchFilter>-->
            <!--<firstnameAttribute>givenname</firstnameAttribute>-->
            <!--<surnameAttribute>sn</surnameAttribute>-->
            <!--<emailAttribute>mail</emailAttribute>-->
            <!--<groupnameAttribute>cn</groupnameAttribute>-->

            <!--<groupSearchFilter>(objectClass=group)</groupSearchFilter>-->
            <!--<membershipAttribute>member</membershipAttribute>-->
        <!--</ldap>-->

        <hibernate name="Hibernate Repository" key="hibernateRepository" description="Hibernate Repository" cache="true"/>

        <!-- CROWD respository -->

        <!--
             You will need to uncomment the Crowd Repository below to enable Crowd integration. For more information,
             please see:

             http://confluence.atlassian.com/display/CROWD/Integrating+Crowd+with+Atlassian+Bamboo

             You must also comment out the Hibernate Repository above.
        -->
        <crowd key="crowd" name="Crowd Repository"/>

        <!-- END of CROWD repository -->

    </repositories>
</atlassian-user>

  

5.4.4、設置 Bamboo 啓用 SSO 登錄

  修改 /home/work/_app/_jira_bamboo/atlassian-bamboo/WEB-INF/classes/seraph-config.xml文件,將<authenticator class="com.atlassian.bamboo.user.authentication.BambooAuthenticator"/>註釋掉,將 <!--<authenticator class="com.atlassian.crowd.integration.seraph.v25.BambooAuthenticator"/>-->的註釋取消,修改後的內容如下:

<!--  ================================================================ -->
<!--  The Seraph security configuration.                               -->
<!--  ================================================================ -->

<security-config>
    <parameters>
        <init-param>
            <param-name>login.url</param-name>
            <param-value>/userlogin!doDefault.action?os_destination=${originalurl}</param-value>
        </init-param>

        <init-param>
        <!--
          the URL to redirect to when the user explicitly clicks on a login link (rather than being redirected after
          trying to access a protected resource). Most of the time, this will be the same value as 'login.url'.
            - same properties as login.url above
        -->
          <param-name>link.login.url</param-name>
          <param-value>/userlogin!doDefault.action?os_destination=${originalurl}</param-value>
          <!--<param-value>/secure/Dashboard.jspa?os_destination=${originalurl}</param-value>-->
          <!--<param-value>http://sso.mycompany.com/login?redirectTo=${originalurl}</param-value>-->
        </init-param>

        <init-param>
            <!-- called by the logout servlet -->
            <param-name>logout.url</param-name>
            <param-value>/userLogout.action?os_destination=${originalurl}</param-value>
        </init-param>

        <!-- The key that the original URL is stored with in the session -->
        <init-param>
            <param-name>original.url.key</param-name>
            <param-value>os_security_originalurl</param-value>
        </init-param>

        <init-param>
            <param-name>login.cookie.key</param-name>
            <param-value>seraph.bamboo</param-value>
        </init-param>

        <!-- Specify 3 characters to make cookie encoding unique for your application, to prevent collisions if more than one Seraph-based app is used.-->
        <init-param>
            <param-name>cookie.encoding</param-name>
            <param-value>BAM</param-value>
        </init-param>

        <!--only basic authentication available-->
        <init-param>
          <param-name>authentication.type</param-name>
          <param-value>os_authType</param-value>
        </init-param>
    </parameters>

    <!-- Determines what roles (permissions) a user has. -->
    <rolemapper class="com.atlassian.bamboo.user.authentication.BambooRoleMapper"/>
<!--
    <authenticator class="com.atlassian.bamboo.user.authentication.BambooAuthenticator"/>
-->
    <controller class="com.atlassian.bamboo.user.authentication.BambooSecurityController"/>
    <elevatedsecurityguard class="com.atlassian.bamboo.user.authentication.BambooElevatedSecurityGuard"/>

    <!-- If you're authenticating against a Crowd server you can use this authenticator for single sign-on.
         Enable it after configuring your Crowd properties through user management and restart Bamboo. It does not support
         Crowd property changes at runtime. If you need to switch back to local users, revert the change and
         restart Bamboo again.
     -->
     <authenticator class="com.atlassian.crowd.integration.seraph.v25.BambooAuthenticator"/>

    <services>
        <!-- Specifies role requirements for accessing specified URL paths -->
        <service class="com.atlassian.seraph.service.PathService">
            <init-param>
                <param-name>config.file</param-name>
                <param-value>/seraph-paths.xml</param-value>
            </init-param>
        </service>
    </services>

    <interceptors>
        <interceptor class="com.atlassian.bamboo.user.authentication.InvalidateSessionDuringLogin"/>
    </interceptors>
</security-config>

  
  通過以下命令,重啓 Bamboo 容器內的服務,使用在 Crowd 中配置的用戶登錄,就可以測試效果了。

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

  


博文作者:迦壹
博客地址:Docker 創建 Bamboo6.7.1 以及與 Crowd3.3.2 實現 SSO 單點登錄
轉載聲明:可以轉載, 但必須以超鏈接形式標明文章原始出處和作者信息及版權聲明,謝謝合作!

比特幣地址:1KdgydfKMcFVpicj5w4vyn3T88dwjBst6Y
以太坊地址:0xbB0a92d634D7b9Ac69079ed0e521CC2e0a97c420


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章