1. 程式人生 > >.Net Core DevOps -免費用Azure四步實現自動化釋出(CI/CD)

.Net Core DevOps -免費用Azure四步實現自動化釋出(CI/CD)

前言

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

  1. 開啟VS,新建 ASP.NET Core Web 應用程式 ,起名為 WebNotebook
  2. 點選下一步,記得啟用 Docker 支援,點選 建立
  3. 如果上一步沒有點選啟用Docker支援,通過新建新增即可
  4. 把程式碼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的指令碼
  1. 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
    
  2. 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
    
  3. Pull Image

    #從阿里雲拉取剛剛push的映象
    docker pull registry.cn-hangzhou.aliyuncs.com/zohnz/webnotebook
  4. 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釋出之路已全部完成,大家可以根據自己的需要靈活配置