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


持續集成交付部署是什么意思,它給我們帶來什么好處?
先貼一張圖
持續集成(Continuous Integration)
  • 持續集成強調開發人員提交了新代碼之后,立刻進行構建、(單元)測試(這個要看情況了是否需要)
持續交付(Continuous Delivery)
  • 持續交付在持續集成的基礎上,將集成后的代碼部署到更貼近真實運行環境的「類生產環境」(production-like environments)中。比如,我們完成單元測試后,可以把代碼部署到連接數據庫的 Staging 環境中更多的測試。如果代碼沒有問題,可以繼續手動部署到生產環境中。
持續部署(Continuous Deployment)
  • 持續部署則是在持續交付的基礎上,把部署到生產環境的過程自動化。
 
減少重復勞動 提高效率
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 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 進行 編譯 發布
接下來Release發布
發布打包的成果物在這里查看
 
 
 
發布成功 查看下docker image
 
已經成功創建了test_image這個鏡像
 
容器是也跑成功了
 
驗證一下

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM