.Net Core DevOps -免費用Azure四步實現自動化釋出(CI/CD)
阿新 • • 發佈:2019-08-02
前言
linux 大行其道的今天想必大家都已經擁抱 core 了吧,通常的方案都是 gitlab+jenkins+centos,但是這樣的方案不適合我這種懶人,一直在尋求簡單的解決方案,在尋求方案的過程中發現目前國內的第三方的對c#不夠友好啊,沒發現好用的,所以就想到的Azure,不得不說MS還是挺給力的。
必備清單
- GitHub ==>GitHub 入門教程
- 阿里雲容器映象服務 或 https://hub.docker.com
- Azure DevOps 註冊=》https://azure.microsoft.com/zh-cn/services/devops/
- 一臺伺服器 ps : 薅的299三年的阿里雲ECS
一、 搞定GitHub
- 開啟VS,新建
ASP.NET Core Web 應用程式
,起名為WebNotebook
- 點選下一步,記得啟用 Docker 支援,點選 建立
- 如果上一步沒有點選啟用Docker支援,通過新建新增即可
- 把程式碼Push到GitHub
下面是我的Docker檔案配置
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build WORKDIR /src RUN ls -al COPY ["WebNotebook/WebNotebook.csproj", "WebNotebook/"] RUN dotnet restore "WebNotebook/WebNotebook.csproj" COPY . . WORKDIR "/src/WebNotebook" RUN dotnet build "WebNotebook.csproj" -c Release -o /app FROM build AS publish RUN dotnet publish "WebNotebook.csproj" -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "WebNotebook.dll"]
以下是我的專案的Demo
https://github.com/zhaozhengyan/WebNotebook
二、配置阿里雲容器映象服務
- 登入阿里雲,找到容器映象服務=》https://cr.console.aliyun.com/
- 建立名稱空間,起個名字,我這裡叫
zohnz
(PS:私有公開看個人需要) - 建立映象倉庫,起個名字,我這裡叫
webnotebook
(注意:只能小寫) - 進去檢視映象倉庫的基本資訊,標紅的複製下來,一會配置 Azure Pipeline 要用
三、Azure CI/CD 配置
- 首先註冊註冊Azure 賬戶,進入 https://dev.azure.com/
- 建立一個組織, 我這裡叫
zohnz
- 建立一個project,我這裡叫
Nexter
- 進入
Pipelines
,新增一個新的 Build(PS:這個應該叫持續整合)
- 編輯
azure-pipelines.yml
,複製如下程式碼,把下面引數替換成自己的
# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
trigger:
- master
pool:
vmImage: 'ubuntu-latest'
variables:
dockerId: [email protected] # 阿里雲 login username
namespace: zohnz # 阿里雲 名稱空間
imageName: webnotebook # 阿里雲 倉庫名稱
registry: registry.cn-hangzhou.aliyuncs.com # 阿里雲 公網地址
dockerfilepath: WebNotebook/Dockerfile # Github Dockerfile相對路徑
steps:
- script: |
docker build -f $(dockerfilepath) -t $(imageName) .
docker login -u $(dockerId) -p $(pwd) $(registry)
docker tag $(imageName) $(registry)/$(namespace)/$(imageName)
docker push $(registry)/$(namespace)/$(imageName)
displayName: push to aliyun
這裡簡要解釋下 yaml 的指令碼引數的大致意思
讀者可以通過如下方式設定
- 接下來新增一個新的
Release
,主要功能是Pull映象和Run映象
- 配置Agent的名字我這裡叫
Push and Run
,還有一些其他配置,參考下圖
- 點選剛剛的
Push and Run
右邊的+
號,新增Task
- 搜尋
SSH
,點選ADD
,這裡的意思是在遠端主機上執行自己的指令碼
- 點選
Manage
配置自己的登入賬號和密碼,新增一個 SSH Service connection
- 選擇剛剛新增的名字為
ssh_aliyun
的 SSH service connection
- 接下來填寫需要配置的指令碼,選擇
Inline Script
,我這裡寫了四個task
- 以下是我的四個task的指令碼
Remove Container
#判斷是否存在webnotebook容器 docker ps | grep webnotebook &> /dev/null #如果不存在,則Remove if [ $? -ne 0 ] then echo "webnotebook container not exist continue.. " else echo "remove webnotebook container" docker rm webnotebook -f fi
Remove old Image
#判斷是否存在registry.cn-hangzhou.aliyuncs.com/zohnz/webnotebook 映象 docker images | grep registry.cn-hangzhou.aliyuncs.com/zohnz/webnotebook &> /dev/null #如果不存在,不做操作 if [ $? -ne 0 ] then echo "image does not exist , continue..." else echo "image exists !!! remove it" docker rmi --force registry.cn-hangzhou.aliyuncs.com/zohnz/webnotebook fi
Pull Image
#從阿里雲拉取剛剛push的映象 docker pull registry.cn-hangzhou.aliyuncs.com/zohnz/webnotebook
Run Image
# 執行映象對宿主及暴露5003埠 docker run --restart unless-stopped -p 5003:80 --name webnotebook -d registry.cn-hangzhou.aliyuncs.com/zohnz/webnotebook
配置完Task我們需要把剛剛的Build和Release串聯起來,選擇之前Build pipeline,新增完之後,記得Save
這裡是我配置好的 build pipeline
四、配置阿里雲
- 登入自己的阿里雲伺服器,用win自帶的cmd就可以,我這裡是ubuntu
C:\Users\zhaozy>ssh [email protected]
[email protected]'s password:
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-52-generic x86_64)
- 安裝Docker
sudo apt-get update #重新整理源
sudo apt-get -y install docker.io #安裝docker
- 輸入
docker -v
檢視docker是否安裝成功
root@iZs9kgd0x5xmhaZ:~# docker -v
Docker version 18.09.7, build 2d0083d
至此我們已經完成了所有配置階段,下面我來提交一次程式碼,測試釋出流程
- github 提交程式碼
- 進入Azure檢視Build構建進度,我這構建很快,我進去的時候已經構建Build完了
- 點進去檢視Job日誌,發現都已經執行完了
- 去阿里雲容器映象服務檢視是否Push上來
去Azure 裡面檢視,Release 是否執行成功
- 去阿里雲安全組新增
5003
埠的外網訪問
開啟我們伺服器的地址+埠號
總結
至此,我們的四部Linux釋出之路已全部完成,大家可以根據自己的需要靈活配置