linux 大行其道的今天想必大家都已经拥抱 core 了吧,通常的方案都是 gitlab+jenkins+centos,但是这样的方案不适合我这种懒人,一直在寻求简单的解决方案,在寻求方案的过程中发现目前国内的第三方的对c#不够友好啊,没发现好用的,所以就想到的Azure,不得不说MS还是挺给力的。
ASP.NET Core Web 应用程序
,起名为 WebNotebook
下面是我的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
zohnz
(PS:私有公开看个人需要)webnotebook
(注意:只能小写)zohnz
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: xxx@163.com # 阿里云 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镜像Push and Run
,还有一些其他配置,参考下图Push and Run
右边的 +
号,添加TaskSSH
,点击ADD
,这里的意思是在远程主机上执行自己的脚本Manage
配置自己的登录账号和密码,添加一个 SSH Service connectionssh_aliyun
的 SSH service connectionInline Script
,我这里写了四个taskRemove 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
C:\Users\zhaozy>ssh root@xx.xx.xx.xx
root@47.98.193.96's password:
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-52-generic x86_64)
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
至此我们已经完成了所有配置阶段,下面我来提交一次代码,测试发布流程
去Azure 里面查看,Release 是否执行成功
5003
端口的外网访问打开我们服务器的地址+端口号
至此,我们的四部Linux发布之路已全部完成,大家可以根据自己的需要灵活配置
.Net Core DevOps -免费用Azure四步实现自动化发布(CI/CD)
原文:https://www.cnblogs.com/zhaozhengyan/p/azure-devops-aliyun.html