編譯構建服務提供配置簡單的混合語言構建平臺,支持任務一鍵創建、配置和執行,實現獲取代碼、構建、打包等活動自動化。
通過本章節,您將了解開發人員Chris如何構建環境鏡像、將代碼編譯打包成軟件包,以及通過代碼變更觸發自動構建來實現持續集成。
預置任務簡介
樣例項目中預置了如下表所示的5個任務。
預置任務
| 預置任務 | 任務說明 |
|---|---|
| phoenix-sample-ci | 基本的構建任務。 |
| phoenix-sample-ci-test | 構建測試環境可用鏡像的任務。 |
| phoenix-sample-ci-worker | 構建Worker功能鏡像的任務。 |
| phoenix-sample-ci-result | 構建Result功能鏡像的任務。 |
| phoenix-sample-ci-vote | 構建Vote功能鏡像的任務。 |
說明關于Vote、Result、Worker的說明,請參見方案架構
本章節以任務“phoenix-sample-ci”為例進行講解,此任務包含的步驟如下表所示。
構建步驟
| 構建步驟 | 說明 |
|---|---|
| 制作Vote鏡像并推送到SWR倉庫 | 通過工作目錄“./vote”及Dockerfile路徑“./Dockerfile”找到“Dockerfile”文件,依據“Dockerfile”文件制作Vote功能鏡像,并將鏡像推送到容器鏡像服務。 |
| 制作Result鏡像并推送到SWR倉庫 | 通過工作目錄“./result”及Dockerfile路徑“./Dockerfile”找到“Dockerfile”文件,依據“Dockerfile”文件制作并推送Result功能鏡像,并將鏡像推送到容器鏡像服務。 |
| 使用Maven安裝Worker依賴包 | 使用Maven安裝Worker功能所需的依賴。 |
| 制作Worker鏡像并推送到SWR倉庫 | 通過工作目錄“./worker”及Dockerfile路徑“Dockerfile.j2”找到“Dockerfile”文件,依據“Dockerfile”文件制作并推送Worker功能鏡像,并將鏡像推送到容器鏡像服務。 |
| 生成Postgres and Redis Dockerfile | 通過shell命令生成制作Postgres(數據庫)和Redis(緩存)鏡像的Dockerfile文件。 |
| 制作Postgres鏡像并推送到SWR倉庫 | 依據“生成Postgres and Redis Dockerfile”所生成的Dockerfile文件制作并推送Postgres鏡像,并將鏡像推送到容器鏡像服務。 |
| 制作Redis鏡像并推送到SWR倉庫 | 依據“生成Postgres and Redis Dockerfile”所生成的Dockerfile文件制作并推送Redis鏡像,并將鏡像推送到容器鏡像服務。 |
| 替換Docker-Compose部署文件鏡像版本 | 為了將鏡像部署到ECS時,能夠可以拉取到正確的鏡像,使用shell命令進行完成以下操作。首先,使用sed命令,依次將文件“docker-compose-standalone.yml”中的參數替換為構建任務的參數“dockerServer”、“dockerOrg”、“BUILDNUMBER”進行替換。然后,使用tar命令,將文件“docker-compose-standalone.yml”壓縮為“docker-stack.tar.gz”,將部署所需文件進行打包,以便于后續步驟將該文件上傳歸檔。 |
| 替換Kubernetes部署文件鏡像版本 | 為了將鏡像部署到CCE時,能夠可以拉取到正確的鏡像,使用shell命令進行完成以下操作。首先,使用sed命令,將目錄“kompose”下所有以“deployment”結尾的文件中的參數“docker-server”、“docker-org”,替換為構建任務的參數“dockerServer”、“dockerOrg”。然后,使用sed命令,將“result-deployment.yaml”、“vote-deployment.yaml”、“worker-deployment.yaml”三個文件中的參數“image-version”用構建任務參數“BUILDNUMBER”進行替換。 |
| 上傳Kubernetes部署文件到軟件發布庫 | 將所有“.yaml”文件上傳到軟件發布庫中歸檔。 |
| 上傳docker-compose部署文件到軟件發布庫 | 將壓縮好的“docker-stack.tar.gz”(構建包路徑)上傳到軟件發布庫中歸檔,包名命名為“docker-stack”,實現軟件包的版本管理。 |

說明在項目部署過程中,經常遇到由于環境不一致而導致的失敗,例如研發調試環境的JDK升級后,未在環境清單中標記清楚,導致生產環境未做相應升級而引發失敗。為了避免因為環境不一致導致的各種問題,本樣例項目中統一使用Docker的方式將各微服務應用與環境統一打包到鏡像,保持每個環境(開發調測環境、測試環境、QA環境、生產環境)一致。
配置SWR服務
本文檔使用SWR來保存環境鏡像,需要首先配置SWR服務。
步驟 1 登錄SWR服務控制臺。
步驟 2 單擊“登錄指令”,頁面彈框顯示登錄指令。
其中,
- u之后的字符串為用戶名。
- p之后的字符串為密碼。
- 最后的字符串為SWR服務器地址,此地址即為后續配置并執行任務中的參數“dockerServer”。
步驟 2 單擊“創建組織”,在彈框中輸入組織名稱“phoenix”(此名稱全局唯一,若頁面提示“組織已存在”,請自定義其它名稱),單擊“確定”保存。
這里的組織名稱,即為后續配置并執行任務中的參數“dockerOrg”。
配置并執行任務
步驟 1 配置任務。
- 進入“鳳凰商城”項目,單擊導航“持續交付 > 編譯構建”。頁面中顯示樣例項目內置的任務。
- 在列表中找到任務“phoenix-sample-ci”。單擊圖標
,在下拉列表中單擊“編輯”進入編輯頁面。 - 選擇“參數設置”頁簽,參照下表編輯參數值。
參數設置
| 參數名稱 | 默認值 |
|---|---|
| codeBranch | master。 |
| dockerOrg | 輸入在配置SWR服務中創建的組織。 |
| version | 1.0.0 |
| dockerServer | 輸入在配置SWR服務中記錄的SWR服務器地址。 |
說明請務必確保參數“dockerOrg”、“dockerServer”的輸入值是正確的,否則將導致任務失敗。
步驟 3 單擊“保存并執行”,在彈框中單擊“確定”,啟動構建任務。
當頁面中顯示
時,表示任務執行成功。請記錄以“#”開頭的字符串(例如
)。
若構建失敗,請仔細檢查參數“dockerOrg”、“dockerServer”的設置是否正確。
步驟 3 檢查發布件。
- 單擊導航“制品倉庫 > 軟件發布庫”,進入軟件發布庫。
- 在與項目同名的倉庫中,可以找到“docker-stack”、“phoenix-sample-ci”兩個文件夾。
- 在“docker-stack”文件夾中,可找到與步驟2中記錄的字符串同名的文件夾,在此文件夾中可以找到發布件“docker-stack.tar.gz”。
- 在文件夾“phoenix-sample-ci/1.0.0”中,可以找到歸檔的10個“.yaml”格式文件。
3.進入容器鏡像服務,在導航中選擇“組織管理”,單擊在配置SWR服務中創建的組織。
選擇“鏡像”頁簽,可以在列表中找到5個鏡像(redis、postgres、worker、result、vote)。
查看鏡像


4.依次在列表中單擊5個鏡像的名稱進入詳情頁。在“鏡像版本”頁簽中查看鏡像版本。
- redis的鏡像版本為alpine。
- postgres的鏡像版本為9.4。
- worker、result、vote的鏡像版本均與在步驟2中記錄的字符串相同。
設置提交代碼觸發自動編譯
通過以下配置,可實現代碼變更后自動觸發構建任務的執行,從而實現項目的持續集成。
步驟 1 在任務“phoenix-sample-ci”的詳情頁,單擊頁面右上角“編輯任務”。
步驟 2 選擇“執行計劃”頁簽。
步驟 3 打開“提交代碼觸發執行”開關
,保存任務。
由于在參數設置頁面為參數codeBranch配置的默認值為“master”,因此本次設置的結果是當master有代碼變更時自動觸發構建。
步驟 4 驗證配置結果:修改項目代碼并提交至master,即可查看構建任務是否自動執行。
設置定時執行任務
為了防止問題代碼進入生產環境,確保應用總是處于可部署的狀態,團隊建議對應用進行持續不斷的驗證。
通過以下設置,可實現 構建任務的定時執行。
步驟 1 在任務“phoenix-sample-ci”的詳情頁,單擊頁面右上角“編輯任務”。
步驟 2 選擇“執行計劃”頁簽。
步驟 3 打開“啟用定時執行”開關
,根據需要選擇執行日與執行時間,保存任務。
本文檔中勾選“全選”,執行時間為“12:00”。
步驟 4 驗證配置結果:根據配置時間查看構建任務是否自動執行,本節不再贅述。