Azure-Devops-pipline的自动化部署

前言

本文用一个flask项目作为示例,但任何类型项目的部署过程都与其类似,关键就在于Dockerfile和azure-piplines.yml这两个文件,读者需要根据自己的项目进行改动。

零. 项目准备

首先要有一个Flask项目,项目结构如下
MLflow-dashboard-restapi/
│
├── app.py
└── ......

(这里的app.py是接口文件,需要gunicorn使其在后台运行,否则pipline会卡住)

然后根目录下创建以下文件,注释的地方需要修改

a.requirements.txt

pandas
numpy
pmdarima
statsmodels
mlflow
matplotlib
scikit-learn
hyperopt
requests
#以上根据自己的项目所需的依赖修改
flask
gunicorn

b.Dockerfile(无后缀)

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"]

一. 新建 DockerHub 仓库

  1. DockerHub 官网注册账号并登录,记好username和password。
  2. 创建一个新的repository,记好Repositor Name。

二. Azure DevOps Docker Connection

  1. 登录到 Azure DevOps。
  2. Project Settings -> Service connections -> New service connection -> Docker Registry。
  3. 选择 Docker Hub,输入 DockerHub 账号和密码,Name自定,其他默认,点击Save。

三. 新建一个 agent 池

  1. 导航到 Azure DevOps -> Project Settings -> Agent pools -> Add pool。
  2. 创建一个新的 agent 池,Pool type选self-hosted,Name自定,其他默认。

四. 创建 azure-pipelines.yml

在项目根目录下创建 azure-pipelines.yml 文件,内容如下,注释的地方需要修改:

trigger:
- main

variables:
  #根据自己的Azure service connection修改
  dockerHubConnection: 'API_dockerhub'   
  #根据自己的Dockerhub修改
  imageName: '<your dockerhub username>/<your dockerhub repo>'  

pool:
  #根据自己的agent修改
  name: pipline1
  demands:
    - Agent.Version -gtVersion 2.182.1

steps:
- script: |
    sudo apt-get update
    sudo apt-get install -y python3 python3-pip
  displayName: 'Install Python'

- script: |
    python3 -m pip install --upgrade pip
    pip3 install -r requirements.txt
  displayName: 'Install dependencies'

- task: Docker@2
  inputs:
    containerRegistry: $(dockerHubConnection)
    repository: $(imageName)
    command: buildAndPush
    Dockerfile: '$(Build.SourcesDirectory)/Dockerfile'
    tags: |
      latest

- script: |
    docker ps -q | xargs -r docker stop
    docker ps -a -q | xargs -r docker rm
  displayName: 'Stop Existing Docker Containers'

- script: |
    docker run -d -p 8000:8000 $(imageName):latest
  displayName: 'Run Docker Container'

五. Azure 虚拟机

  1. 登录 Azure 门户Microsoft Azure
  2. 创建一个新的虚拟机,选择合适的配置(可默认)和区域(我是East Asia),其他默认。

     3.确保打开 8000 端口的入站规则(网络->填加入站规则)。

     4.连接虚拟机

    5.虚拟机会自动连接ssh

如果没有自动连接就输入命令:az ssh vm --resource-group DevOps1_group --vm-name DevOps1 --subscription ccb6b571-ebba-4942-affc-a32ffe56d00e

六. 虚拟机配置Docker

虚拟机中执行以下命令安装并登录docker:

sudo apt-get update
sudo apt-get install -y python3 python3-pip docker.io
sudo usermod -aG docker $USER
sudo newgrp docker
docker login

(注:这里还要根据自己的项目安装配置,如mysql,java等)

七. 虚拟机中配置代理并持续运行

  1. 在 Azure DevOps 中,导航到 Project Settings -> Agent pools,选择刚刚建好的agent pool,然后点击 New agent
  2. 点击下载链接

     3.虚拟机中下载和配置代理

mkdir myagent && cd myagent
curl -O <刚复制的链接>
tar zxvf vsts-agent-linux-x64-2.182.1.tar.gz
./config.sh

     4.持续运行代理,这里和官网步骤不一样

sudo ./svc.sh install
sudo ./svc.sh start

创建一个服务文件:

sudo nano /etc/systemd/system/vsts.agent.<YourProjectName>.<AgentPoolName>.service
#这里<YourProjectName>和<AgentPoolName>自己修改

在文件中添加以下内容,注释处根据自己项目修改:

[Unit]
Description=Azure Pipelines Agent (<YourProjectName>.<AgentPoolName>) #改
After=network.target

[Service]
ExecStart=/home/e1221771/myagent/runsvc.sh  #改
User=<username>                             #这里可以输入命令whoami查询username
WorkingDirectory=/home/e1221771/myagent     #改
KillMode=process
KillSignal=SIGTERM
TimeoutStopSec=5min

[Install]
WantedBy=multi-user.target

保存并退出,然后执行以下命令以使服务生效并启动,记得改命令:

sudo systemctl daemon-reload
sudo systemctl enable vsts.agent.<YourProjectName>.<AgentPoolName>.service  #改
sudo systemctl start vsts.agent.<YourProjectName>.<AgentPoolName>.service   #改

八. 提交上传项目,创建新的pipline并运行

先把本地项目push到Azure repo上,然后左侧导航栏pipline->New pipline,根据步骤链接到repo中的项目,并且选择azure-pipline.yml文件,最后run pipline。

此后每次在本地修改代码后直接输入下面3行命令就可以自动出发pipline并完成自动化部署了

git add .
git commit -m "devops"
git push

pipline成功运行

postman接口测试成功(红框处改成虚拟机的公共ip)

九. 重启虚拟机后需要做的

sudo systemctl start vsts.agent.<YourProjectName>.<AgentPoolName>.service   #改
docker login

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值