使用 Bamboo 构建项目的 CICD 过程文档
一、CI/CD 介紹
CI/CD 是什么?
說明一下:實際上這個應該叫 CI/CD/CD ,才是真正的 持續集成/持續交付/持續部署,這里只講 CI/CD 是針對特定的項目而言,因為沒有生產環境,直接是 開發 -> 測試,所以后面兩個 CD 就合并了
CI/CD 中文叫:持續集成,持續交付/部署,是一種通過在應用開發階段引入自動化來頻繁向客戶交付應用的方法。CI/CD 的核心概念是持續集成、持續交付和持續部署,“ 持續 ” 并不意味著 “ 一直在運行 ” ,而是“隨時可運行”。
持續集成:Continuous integration,CI
持續集成(CI)旨在通過對每次提交的代碼進行自動化的代碼檢查,單元測試,編譯構建,甚至自動部署與發布,可以有力的避免 “ 集成地獄 ” 問題
 
持續交付:Continuous delivery,CD
在一次集成的基礎上,將集成后的代碼部署到更貼近真實運行環境中,持續交付并不是指軟件的每一個改動都要盡快的部署到生產環境,它是指任何的修改都已證明可以在任何時候實施部署,這就是為什么持續交付是手動部署的,比如:一種業務場需要等待另外的功能特征出才能上線,這時候就沒必要上生產環境
 
持續部署:Continuous Deployment,CD
在一次交付的基礎上,把最新的代碼部署到生產環境
 
集成地獄:交付團隊的成員集成一些未合并的代碼,也就是一大堆的提交到一個指定的時間點來合并,這種集成的過程很少是流暢和無縫的,經常會出現各種合并的BUG,導致數小時甚至數天來修復代碼,以便它能夠最終集成
使用了 CI/CD 之后會怎么樣
傳統開發模式存在的問題
-  
開發完成之后才向測試/生產環境部署
因為部署工作是由專人手動的,因為覺得繁瑣,所以不會對代碼的每一次提交都進行一次 審核->測試->發布 的流程,一般都是某個模塊或者某個大功能完成之后進行一次
 -  
部署到生產環境完全手動
人為的做一些重復性的動作,難免會出現操作失誤,甚至操作錯誤而導致的一些生產環境上的故障,影響了生產環境的運行,特別是客戶的好感度
 -  
生產環境的手工配置管理
手動的對項目的配置進行更改,再手動部署到該運行環境,這些其實都是繁瑣,重復又容易出錯的一些操作
 
CI/CD 給我們帶來的好處
-  
提高整體代碼質量
能夠及時發現我們的編碼規范,BUG,將對測試,生產環境的影響降到最低
 -  
自動化代碼合并流程
一些代碼檢查,單元測試,編譯構建甚至部署都是自動的
 -  
節省開發成本
上面說到的一般軟件部署是由專人負責的,開發集成了 CI/CD 之后就不需要了
 -  
提高了開發效率
開發人員可以更注重代碼的業務邏輯,性能方面,省去了一些其他的麻煩
 
二、Atlassian - Bamboo 介紹
Atlassian 全稱是 Atlassian Open DevOps Utils,它包括 Jira、Confluence、Bitbucket、Bamboo、Crowd
簡介
Atlassian Bamboo 是一款持續集成和持續部署工具,可以將自動化構建、測試和發布整合在單個工作流中
Bamboo 的安裝
下載
Atlassian 官網 下載 Bamboo 就好了【注意是免費試用 30 天的】
配置
Bamboo 的目錄結構
配置 Bamboo 的 home 目錄
# 修改下面文件中的 bamboo.home=隨便一個有權限的目錄就行 atlassian-bamboo-8.0.2/atlassian-bamboo/WEB-INF/classes/bamboo-init.properties運行 Bamboo
# 啟動 shell 腳本就好了,運行端口在 8085 # 訪問:http://localhost:8085/ /atlassian-bamboo-8.0.2/bin/startup.sh進去之后就會初始化一些東西,跟著頁面操作就好了,這里提的一點是選擇 Bamboo 的數據源是 MySQL 的話,需要將 MySQL 的連接驅動放在 Bamboo 的依賴庫里面,eg:將 mysql-connector-java-8.0.22.jar 放在 /atlassian-bamboo-8.0.2/lib 目錄下
配置 Agent
前面步驟配置好了其實還差一步,因為 Bamboo 的每個 Stage(后面會講) 運行的 Job 需要在一個代理執行器里面執行,這里我使用了 bamboo 推薦的 atlassian-bamboo-agent-installer-8.0.2.jar ,下載之后使用 Bamboo 提供的 java -jar atlassian-bamboo-agent-installer-8.0.2.jar http://127.0.0.1:8085/agentServer/ 運行起來,然后看到控制臺打印如下信息:
 
 說 Agent 需要你手動審核通過才能通過,直接復制他給出的地址訪問就可以審核了,到這里 Bamboo 算是安裝成功了吧。
Bamboo 的特點
1、簡單的用戶界面,容易安裝
2、自動檢測你的設置-如果你的 Server 上使用了 Maven、Ant 或者 Java 設置,Bamboo 會自動檢測出來
3、連續的日志,檢測你的 build 的 Colour Coded 日志,容易顯示出所有項目和最后一次 build 的結果摘要列表
4、當 build 被觸發時,會顯示觸發 build 的源代碼變更
Bamboo 的工作原理
實際上就是 CI/CD 的工作機理,簡單點講就是開發者提交完代碼之后自動觸發編譯、單元測試、集成測試、打包和部署至服務器的一系列過程,由以下的圖片簡單描述
 
? CI/CD 工作機理
Bamboo 的使用
? 自動構建計劃
解釋說明:
1、Project 是一個項目的構建計劃的集合,管理某個項目的所有 Plan
2、計劃(Plan)則是 Stage、Task 和 Job 的集合,一個構建計劃。當創建一項計劃的時候,會為它賦予一個唯一主鍵,說明從哪個庫中(或者哪些庫中)提取代碼,然后選擇它的觸發器如使用每次發布定期構建,等等。也有將幾個管理選項設置成全局缺省值并在計劃層次調整。這些選項包括權限、通知、日志和構建清除、提升構建標準、以及變量。
3、階段(Stage)代表一個階段,按規定次序進行,并行的處理 Job(用多個 Agent ),只有所有的 Job 成功,才會進入下一個 Stage,用來控制工作流的執行,例如可以將構建分為編譯,測試開發。階段之前可以定義前后級關系從而控制執行。可能會產生 Artifact(項目打包之后的產物),供后續的 Stage 使用
4、由多個 Task 可以組成一個 Job,在同一個 Job 的代理服務器上,順序執行多個 Task。
5、Task 是進行自動化構建的基本塊,這些任務可以檢查源代碼,運行腳本,構建引擎的調用,如 Ant,Maven以及生成報表等,Task 是順序執行的。
三、項目從創建到自動部署實戰
首先看下測試應用之前的運行效果:
 
CI 配置
創建 Project
Build Plan 需要基于 Project 創建,所以需要先創建一個 Project
 
創建并配置 Build Plan
創建 Build Plan
配置 Build Plan
配置 Stage
配置 Job
不添加 Job 直接點擊 Save and continue 繼續下一步,如果需要添加 Job,則點擊 Create
 
配置 Stage
這里配置兩個階段:Test Stage 和 Package Stage,測試和打包階段
1、Test stage 是進行測試的階段,測試任務都放在這個階段中進行, 創建 Build plan 后會存在一個 Default Stage,可以直接將其名稱改為 Test Stage,同時也可以將默認的 Default Job 更名為 Test Job
 
2、Package Stage 是進行項目打包階段,測試階段完成之后,所有的項目打包工作都在這里進行
 
Task 類型
點擊 Add Task,彈出各種 Task 類型,這里我們主要使用了 Maven3.X(Maven 的構建操作) 、SSH Task (SSH 命令操作)以及 SCP Task(文件上傳,拷貝操作)
 
配置 Task 注意事項
值得注意的是:拉取代碼的操作一定要存在,以及 Task 的執行順序
 
給 Test Stage 的 Test Job 添加 Maven 測試 Task
 
同樣的操作,給 Package Stage 配置一個 Package Job 之后,再給它配置一個 Package Task,這里就不列出圖片,只需更改如下設置就行 **
 
配置 Artifact
Artifact: 是項目編譯打包之后的產物,Bamboo 這里需要配置所需要的產物文件,以供后續的階段可以使用,需要提供哪幾個 artifact 是根據后續部署/交付任務所需的資源決定的,例如,對于后續開發環境的持續交付,這里需要 Dockerfile、docker-compose-{部署環境}.yml、Application(可執行 jar)
 
構建好之后:
 
到這里,我們 CI(持續集成)配置完畢!
CD 配置
創建 Deployment project
配置 Deployment Project
創建部署環境
添加一個部署環境
 
這一步很重要,主要設置兩步,Set up tasks 和 添加一個觸發整個構建流程的動作
 
完成部署的 Task 配置
當點擊了 Set up tasks 之后,出現如下配置,這里主要添加如下 Task:
- SSH Task:在部署服務器上的項目根目錄
 - SCP Task:將 artifact 上下載的文件上傳到項目目錄
 - SSH Task:構建 Docker 鏡像,停止之前運行的容器,重新跑新鏡像
 
以上 3 個 Task 的詳細配置
 
 
配置觸發構建 Trigger
 
 
到此我們的 CD(持續交付/部署)配置也完成!
執行流程
代碼更改
代碼提交
將代碼提交到倉庫,觸發構建流程
構建日志
CI(持續集成)日志
CD(持續部署)日志
訪問接口
總結
以上是生活随笔為你收集整理的使用 Bamboo 构建项目的 CICD 过程文档的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: MyCat学习:使用MySQL搭建主从复
 - 下一篇: 使用 Jenkins 自动部署 java