天天看點

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

持續內建傳遞部署是什麼意思,它給我們帶來什麼好處?

先貼一張圖

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署
持續內建(Continuous Integration)

  • 持續內建強調開發人員送出了新代碼之後,立刻進行建構、(單元)測試(這個要看情況了是否需要)

持續傳遞(Continuous Delivery)

  • 持續傳遞在持續內建的基礎上,将內建後的代碼部署到更貼近真實運作環境的「類生産環境」(production-like environments)中。比如,我們完成單元測試後,可以把代碼部署到連接配接資料庫的 Staging 環境中更多的測試。如果代碼沒有問題,可以繼續手動部署到生産環境中。

持續部署(Continuous Deployment)

  • 持續部署則是在持續傳遞的基礎上,把部署到生産環境的過程自動化。

更多概念請參考

https://link.zhihu.com/?target=http%3A//www.mindtheproduct.com/2016/02/what-the-hell-are-ci-cd-and-devops-a-cheatsheet-for-the-rest-of-us/

減少重複勞動 提高效率

jenkins大家都知道吧,但今天我們用微軟的vsts來定制個性化定制持續內建傳遞(個人或者小團隊我建議用vsts 也不用自己安裝jenkins環境了 直接用vsts線上系統很友善)

用到的資源有:

  1. 騰訊雲伺服器ubuntu一台(自己先安裝好docker哈)
  2. vsts建立一個git(有微軟賬号就能免費建立,<=5人團隊是免費使用的,對于靈活團隊綽綽有餘啦) https://www.visualstudio.com/zh-hans/team-services/

  

一步步看圖

第一步 在vsts建立一個工程

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署
vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署
vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署
vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

建立git使用者

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

然後用git工具clone到本地 我習慣用Sourcetree 大家可以用自己習慣的方式

如果提示輸入密碼就輸入上面建立的使用者名和密碼

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

第二步建立一個實驗工程

這裡我們建立一個非常簡單的console webapplication

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

安裝nuget包

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署
vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

這裡注意一點:我這裡寫死了 用 5001端口 注意我用的是 *:5001 沒有用 localhost:5001 如果用這個方式的話 部署docker上會通路不了

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

确認可以跑起來

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

然後git送出代碼到master分支

第三步我們來配置vsts

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

先配置第一部分 一有代碼送出到master分支 就自動編譯 打包 【CI部分】

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署
vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

選擇 ASP.NET Core 會預設有以下Task

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

一定要注意選擇linux環境編譯

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

Test我們暫時不需要就Remove掉

由于我們不是web project

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

配置觸發器 (意思就是一有代碼送出打master分支[可以指定特定分支]就會觸發CI)

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

嘗試跑一下

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署
vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

CI正常完成

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

到此CI配置工作已完成

接下來我想要完成自動 釋出到我的騰訊雲伺服器 在伺服器上把釋出的檔案打包并生成一個image 然後用這個image生成一個Container 并啟動

第四部我們配置Release

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署
vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署
vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

Sourece alias 這個大家可以修改成名字短一點

執行Release釋出的時候會把之前CI public的東西download然後放在命名為 Source alisa檔案夾内

我改成 _test_netcore-docker

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

接下來來配置環境

大家可以根據實際情況配置多個環境 比如 內建測試環境 和 prod環境

我這裡就隻配置一個prod環境

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

由于我們是釋出到騰訊雲伺服器 是以在這裡選擇 Empt process 且命名為prod

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

接下來要配置 Release 操作的 Task

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

我們添加SSH 目的是用SSH 連結到 騰訊雲伺服器 然後 把釋出的檔案通過SSH傳輸到我的伺服器

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

得先配置SSH無密碼登入

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署
vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

按照提示進行配置

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

配置好後

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

Source folder 輸入我們之前配置的别名 _test_netcore-docker

最終如下

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

然後再添加SSH執行指令工具

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署
vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

unzip -q site/drop/TestDotnetcore.zip -d site/drop/ 釋出的檔案是zip的 通過這個指令解壓zip <TestDotnetcore.zip是我檢視釋出的日志找到的這個名字目前我還沒有找到變量可以代替>

sudo rm -rf site/drop/*.zip 解壓完成後删除掉

touch site/drop/Dockerfile 生成一個dockerfile

echo "FROM microsoft/aspnetcore:2.0" >> site/drop/Dockerfile echo指令是往建立的dockerfile裡面寫入内容

echo "COPY . /publish" >> site/drop/Dockerfile

echo "WORKDIR /publish" >> site/drop/Dockerfile

echo "EXPOSE 5001" >> site/drop/Dockerfile

echo "CMD [\"dotnet\", \"TestDotnetcore.dll\"]" >> site/drop/Dockerfile

sudo docker build --rm -t test_image -f site/drop/Dockerfile site/drop/ 建立一個image 名字叫 test_image

sudo docker ps -q --filter "name=test_netcore" | grep -q . && sudo docker rm -f test_netcore || true 檢視是否有沒有叫 test_netcore的容器有沒有在runing 如果有就幹掉它

sudo docker run --name test_netcore -d -p 5001:5001 test_image:latest 根據test_image啟動一個名字叫test_netcore的容器

if sudo docker images -f "dangling=true" | grep ago --quiet; then sudo docker rmi -f $(sudo docker images -f "dangling=true" -q); fi 檢視是否有<none>的image 把它删掉 因為我們建立image的時候每次都會覆寫是以會産生一些沒有的image

sudo docker images -f "dangling=true" | grep -q . && sudo docker rmi -f $(sudo docker images -f "dangling=true" -q)

sudo rm -rf site/drop 都ok了就删掉drop目錄

以上一切準備好 送出一個commit到master試試

會自動觸發CI 進行 編譯 釋出

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

接下來Release釋出

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

釋出打包的成果物在這裡檢視

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署
vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署
vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

釋出成功 檢視下docker image

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

已經成功建立了test_image這個鏡像

容器是也跑成功了

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

驗證一下

vsts + XX雲伺服器建構netcore+docker持續內建傳遞部署

完美!!!不管你用的是騰訊雲還是阿裡雲還是其他雲都是可以的!

遺留問題:

TestDotnetcore.zip是我檢視釋出的日志找到的這個名字目前我還沒有找到變量可以代替

有誰知道幫忙教育下!

如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”将是我最大的寫作動力!歡迎各位轉載,轉載文章之後須在文章頁面明顯位置給出作者和原文連接配接,謝謝。