微软Azure DevOps 使用docker 持续集成 dotnet azure 环境设置 创建项目 修改默认的dockerfile 准备dockerhub账号 构建流程 在服务器上运行docker 其他 后续优化

  • 登录azure

    地址 https://dev.azure.com/
    微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化

  • 使用微软账号就可以进行登录。

  • 点击右上角新建项目
    微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化

  • 项目信息,尽量用小写
    微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化

创建项目

微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化

修改默认的dockerfile

```
FROM microsoft/dotnet:2.1-aspnetcore-runtime-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM microsoft/dotnet:2.1-sdk-stretch AS build

RUN mkdir -p /app
WORKDIR /src
COPY . .
RUN dotnet restore "firstapp.csproj"
RUN dotnet build "firstapp.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "firstapp.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "firstapp.dll"]
    ```

准备dockerhub账号

到现在为止,docker仓库创建完毕,代码仓库也创建完毕,准备开始构建。

构建流程

微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化

部署完成后,就可以看到 docker镜像上传到dockerhub了。

在服务器上运行docker

这里演示用ubuntu服务器, 首先安装docker环境
sudo apt-get install docker.io
安装成功后在终端输入docker,确保docker安装ok。

增加构建步骤,ssh到服务器,自动拉取镜像并运行。
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化
微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化

	# stop and remove all containers
	currcontainer=$(docker ps -a |  grep "$(Build.Repository.Name)_feature*"  | awk '{print $1}')
	if [ "${currcontainer}" != "" ]; then
	   docker stop $(docker ps -a |  grep "$(Build.Repository.Name)_feature*"  | awk '{print $1}')
	   docker rm -f $(docker ps -a |  grep "$(Build.Repository.Name)_feature*"  | awk '{print $1}')
	fi
	# run curr
	docker pull a304885433/$(Build.Repository.Name):$(Build.BuildId)
	docker run -d -p 8002:80 --name=$(Build.Repository.Name)_feature a304885433/$(Build.Repository.Name):$(Build.BuildId)

微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化

微软Azure DevOps 使用docker 持续集成 dotnet
azure 环境设置
创建项目
修改默认的dockerfile
准备dockerhub账号
构建流程
在服务器上运行docker
其他
后续优化

再次部署,就可以看到部署成功,站点就可以访问了。

其他

  • 镜像名称一定要增加 账号前缀,比如说示例中的就是 a304885433/firstapp:xxxx ,这样在构建镜像后,才可以直接推动到这个账号下的这个仓库。
  • 服务器运行docker镜像的时候,必须先停止已运行的镜像,然后在启动。 在启动镜像时,需要指定name,后续可以根据name查询这个镜像。仅当该镜像存在,则需要停止并删除这个镜像。

后续优化

  • dockerid 可以定义成环境变量,在脚本中直接进行引用,这样可以保证后续脚本及构建步骤基本上可以模板化,保存为模板。