jenkins 构建dotnet core 部署到docker

1.azure centos 8 docker环境,整个操作在root账号下进行

2.安装jenkins

  进入jenkis官网的安装指导安装jenkins jenkins安装成功后查看进程

 jenkins 构建dotnet core 部署到docker

3.使jenkins账户可以访问docker.sock

  因为要在jenkins中指定docker命令要用到docker.sock进行通信。

 查看docker.sock所属组

jenkins 构建dotnet core 部署到docker

可以看到文件属于farvison组

执行 gpasswd -a jenkins farvison  //把jenkins用户加入到farvison组

这行 newgrp farvison   //更新farvison组

4.创建aspnnetweb项目,并勾选docker支持

jenkins 构建dotnet core 部署到docker

这是后会生成dockerfile文件,但是这个目录结构和构建时候有出入。所以要把dockerfile拷贝到代码的根目录(sln文件所在目录)

本地硬盘的结构如图:

jenkins 构建dotnet core 部署到docker

5.把整个代码上传到gitea

gitea的安装请参考gitea文档,push以后的代码结构如图

jenkins 构建dotnet core 部署到docker

6.在jenkins中创建任务

jenkins 构建dotnet core 部署到docker

 

jenkins 构建dotnet core 部署到docker

 docker命令的写法很重要。

#!/bin/bash
docker stop aspnetweb
docker rm aspnetweb
docker rmi aspnetweb
docker build -t aspnetweb . --network=host
docker run -d -p:5000:80 --name aspnetweb aspnetweb

 

首先docker命令默认的工作目录为当前jenkins的project(job)的目录

jenkins 构建dotnet core 部署到docker

dockerfile正是在这个目录下,这样docker build -t aspnetweb . --network=host才会生成镜像。

  jenkins 构建dotnet core 部署到docker

dockerfile之所以要放在根目录是因为dockerfile的文件内容有关系

jenkins 构建dotnet core 部署到docker

这样.csproj文件才会和硬盘目录对应起来。我试过更改dockerfile文件内容把

COPY ["WebApplication5/WebApplication5.csproj", "WebApplication5/"]

改成

COPY ["WebApplication5.csproj", "WebApplication5/"]

同时把dockerfile文件放到根目录下的WebApplication5下面如图

jenkins 构建dotnet core 部署到docker

但没有构建成功,对生成的dockerfile还不是很熟悉。

7.执行任务构建

jenkins 构建dotnet core 部署到docker

 查看容器和镜像jenkins 构建dotnet core 部署到docker

9.浏览器访问网站

    1.要开启firewall防火墙

   $ sudo firewall-cmd --zone=public --add-port=5000/tcp

    2.azure的“”网络“”菜单中增加5000端口的入站规则

   jenkins 构建dotnet core 部署到docker

    

jenkins 构建dotnet core 部署到docker

因为swagger需要项目的xml文件,但是在dockerfile中没有复制到镜像中,所以会报错而不能访问网站

jenkins 构建dotnet core 部署到docker

解决方法是在dockerfile中增加一行指令:

jenkins 构建dotnet core 部署到docker

把application.xml从WebApplication5/目录拷贝到/app目录下,再重新执行构建任务,就可以正常访问。

到此.net core的整个构建告一段落。