vsts + XX雲伺服器構建netcore+docker持續集成交付部署

来源:https://www.cnblogs.com/yudongdong/archive/2018/05/15/9042750.html
-Advertisement-
Play Games

持續集成交付部署是什麼意思,它給我們帶來什麼好處? 先貼一張圖 持續集成(Continuous Integration) 持續集成強調開發人員提交了新代碼之後,立刻進行構建、(單元)測試(這個要看情況了是否需要) 持續交付(Continuous Delivery) 持續交付在持續集成的基礎上,將集成 ...


持續集成交付部署是什麼意思,它給我們帶來什麼好處? 先貼一張圖 持續集成(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創建一個工程       創建git用戶   然後用git工具clone到本地 我習慣用Sourcetree 大家可以用自己習慣的方式 如果提示輸入密碼就輸入上面創建的用戶名和密碼   第二步創建一個實驗工程 這裡我們創建一個非常簡單的console webapplication 安裝nuget包     這裡註意一點:我這裡寫死了 用 5001埠 註意我用的是 *:5001 沒有用 localhost:5001 如果用這個方式的話 部署docker上會訪問不了 確認可以跑起來   然後git提交代碼到master分支   第三步我們來配置vsts   先配置第一部分 一有代碼提交到master分支 就自動編譯 打包 【CI部分】       選擇 ASP.NET Core 會預設有以下Task   一定要註意選擇linux環境編譯   Test我們暫時不需要就Remove掉 由於我們不是web project   配置觸發器 (意思就是一有代碼提交打master分支[可以指定特定分支]就會觸發CI)   嘗試跑一下     CI正常完成     到此CI配置工作已完成 接下來我想要完成自動 發佈到我的騰訊雲伺服器 在伺服器上把發佈的文件打包並生成一個image 然後用這個image生成一個Container 並啟動   第四部我們配置Release     Sourece alias 這個大家可以修改成名字短一點 執行Release發佈的時候會把之前CI public的東西download然後放在命名為 Source alisa文件夾內 我改成 _test_netcore-docker   接下來來配置環境 大家可以根據實際情況配置多個環境 比如 集成測試環境 和 prod環境 我這裡就只配置一個prod環境 由於我們是發佈到騰訊雲伺服器 所以在這裡選擇 Empt process 且命名為prod 接下來要配置 Release 操作的 Task 我們添加SSH 目的是用SSH 鏈接到 騰訊雲伺服器 然後 把發佈的文件通過SSH傳輸到我的伺服器       得先配置SSH無密碼登錄     按照提示進行配置 配置好後

 

Source folder 輸入我們之前配置的別名 _test_netcore-docker 最終如下   然後再添加SSH執行命令工具     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 rm -rf site/drop 都ok了就刪掉drop目錄   以上一切準備好 提交一個commit到master試試   會自動觸發CI 進行 編譯 發佈 接下來Release發佈 發佈打包的成果物在這裡查看       發佈成功 查看下docker image   已經成功創建了test_image這個鏡像   容器是也跑成功了   驗證一下

 

  完美!!!不管你用的是騰訊雲還是阿裡雲還是其他雲都是可以的!   遺留問題: TestDotnetcore.zip是我查看發佈的日誌找到的這個名字目前我還沒有找到變數可以代替 有誰知道幫忙教育下!