linux 大行其道的今天想必大家都已经拥抱 core 了吧,通常的方案都是 gitlab+jenkins+centos,但是这样的方案不适合我这种懒人,一直在寻求简单的解决方案,在寻求方案的过程中发现目前国内的第三方的对c#不够友好啊,没发现好用的,所以就想到的Azure,不得不说MS还是挺给力的。
下面是我的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
这里简要解释下 yaml 的脚本参数的大致意思
指令注释说明$(xxx)这个是azure 的占位符,上面我用variables 声明了-f指定要使用的Dockerfile路径;这个很重要,不加会报找不到文件夹的错误-t镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。$(pwd)这个pwd 可以直接写,但是出于安全考虑,配置到azure的variables(参数环境变量里面)了读者可以通过如下方式设置
接下来添加一个新的 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 fiRemove 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 fiPull Image
#从阿里云拉取刚刚push的镜像 docker pull registry.cn-hangzhou.aliyuncs.com/zohnz/webnotebookRun 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
至此我们已经完成了所有配置阶段,下面我来提交一次代码,测试发布流程
github 提交代码进入Azure查看Build构建进度,我这构建很快,我进去的时候已经构建Build完了点进去查看Job日志,发现都已经执行完了去阿里云容器镜像服务查看是否Push上来去Azure 里面查看,Release 是否执行成功
去阿里云安全组添加5003端口的外网访问打开我们服务器的地址+端口号
至此,我们的四部Linux发布之路已全部完成,大家可以根据自己的需要灵活配置
转载于:https://www.cnblogs.com/zhaozhengyan/p/azure-devops-aliyun.html
相关资源:WebAppWithDatabaseDemo:具有数据库的示例ASP.NET Core MVC应用程序,用于使用Azure DevOps演示CI-CD管道-源码