1. 程式人生 > 實用技巧 >Docker 建立 Bamboo6.7.1 以及與 Crowd3.3.2 實現 SSO 單點登入

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