1. 程式人生 > >微軟Azure DevOps自動化部署

微軟Azure DevOps自動化部署

1.準備一個https://hub.docker.com賬號,申請一個免費的映象倉庫(免費賬戶可以申請一個)

建立docker遠端映象庫

 

 

2.新建一個mvc的專案

 


給這個專案加上Dockerfile檔案(AzureDemo/AzureDemo/..中新增)

 

FROM dukecheng/aspnetcore:aspnetcore-runtime-2.2.0
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet
", "AzureDemo.dll"]

 

 在sln同級新增三個檔案
azure_build.sh

workspace=`pwd`
docker run --rm -v ~/.cache:/root/.cache -v ~/.config:/root/.config -v ~/.gnupg:/root/.gnupg -v ~/.local:/root/.local -v ~/.npm:/root/.npm -v `pwd`/SanBlog:/data digitallyseamless/nodejs-bower-grunt bash -c "bower install && npm install
" docker run --rm -v ~/.dotnet:/root/.dotnet -v ~/.nuget:/root/.nuget -v ${workspace}:/src --workdir /src dukecheng/aspnetcore:aspnetcore-sdk-2.2.100-preview3-009430 bash -c "dotnet restore ./AzureDemo.sln && rm -rf ./AzureDemo/AzureDemo/obj/Docker/publish && dotnet publish ./AzureDemo/AzureDemo.csproj -c Release -o ./obj/Docker/publish
"

 

azuredemo.base.yml

# Docker image
# Build a Docker image to deploy, run, or push to a container registry.
# Add steps that use Docker Compose, tag images, push to a registry, run an image, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

pool:
vmImage: 'Ubuntu 16.04'

variables:
imageName: 'your-container-image-name:$(build.buildId)'

steps:
- script: docker build -f Dockerfile -t $(imageName) .
displayName: 'docker build'

azuredemo.base.yml
version: '3'

services:
azuredemoweb:
image: shitong/shitong:${IM_TAG-latest}
networks:
- appnet
volumes:
- /var/log:/var/log
- /data/azure:/app/data
redis:
image: redis
networks:
- appnet
ports:
- 7379:6379
volumes:
- /data/redis:/data
- /var/log:/var/log
mongo:
image: mongo
volumes:
- /data/mongodb/db:/data/db
- /data/mongodb/backup:/data/backup
- /var/log:/var/log
networks:
- appnet
ports:
- 27017:27017
networks:
appnet:

 

這塊的azuredemoweb節點下的image:shitong/shitong:${IM_TAG-latest}

shitong/shitong就是我們第一步所建的hub.docker.com上的映象檔案庫

azuredemo.Development.yml

version: '3'

services:
azuredemoweb:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- 8080:80

 專案結構

 

 

3.準備Azure DevOps帳號 用來託管程式碼,使用pipeline自動打包docker映象

  

把我們第二步準備的專案push到Azure DevOps


該準備的都準備好了
接下來就是重點了

 

 

 

 

 

 

之後就會變成這樣

 

 

 

下面會有四個步驟:


(1).還原nuget等依賴包 釋出專案

 

(2).打包成docker映象

 

 

(3).推送docker映象到docker hub

 

 

(4).伺服器pull docker映象 遠端部署 執行專案

 

 

 

cd /data/deploy/ && export IM_TAG=azuredemo_$(Build.BuildId)  && docker pull shitong/shitong:${IM_TAG} && docker-compose -f azuredemo.base.yml -f azuredemo.Development.yml config > docker-stack.yml && docker stack deploy --with-registry-auth -c docker-stack.yml myapp

 

 

 最後儲存

 

4.遠端伺服器

首先要在遠端伺服器安裝docker
具體可以參考官網
https://docs.docker.com/install/linux/docker-ce/ubuntu/
這裡安利一個教我docker的大佬的部落格,可以檢視/學習下基本的命令
https://www.52hhx.com/index/articleDetail/73
騰訊雲的上機實驗
https://cloud.tencent.com/developer/labs/search?keyword=docker

建立資料夾和azuredemo.base.yml,azuredemo.Develoment.yml

 

內容直接拷貝第一步專案裡的
之後再把azuredemo.base.yml裡的一些路徑創建出來

 

 

最後在Azure DevOps測試