jenkins 构建dotnet core 部署到docker
1.azure centos 8 docker环境,整个操作在root账号下进行
2.安装jenkins
进入jenkis官网的安装指导安装jenkins jenkins安装成功后查看进程
3.使jenkins账户可以访问docker.sock
因为要在jenkins中指定docker命令要用到docker.sock进行通信。
查看docker.sock所属组
可以看到文件属于farvison组
执行 gpasswd -a jenkins farvison //把jenkins用户加入到farvison组
这行 newgrp farvison //更新farvison组
4.创建aspnnetweb项目,并勾选docker支持
这是后会生成dockerfile文件,但是这个目录结构和构建时候有出入。所以要把dockerfile拷贝到代码的根目录(sln文件所在目录)
本地硬盘的结构如图:
5.把整个代码上传到gitea
gitea的安装请参考gitea文档,push以后的代码结构如图
6.在jenkins中创建任务
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)的目录
dockerfile正是在这个目录下,这样docker build -t aspnetweb . --network=host才会生成镜像。
dockerfile之所以要放在根目录是因为dockerfile的文件内容有关系
这样.csproj文件才会和硬盘目录对应起来。我试过更改dockerfile文件内容把
COPY ["WebApplication5/WebApplication5.csproj", "WebApplication5/"]
改成
COPY ["WebApplication5.csproj", "WebApplication5/"]
同时把dockerfile文件放到根目录下的WebApplication5下面如图
但没有构建成功,对生成的dockerfile还不是很熟悉。
7.执行任务构建
查看容器和镜像
9.浏览器访问网站
1.要开启firewall防火墙
$ sudo firewall-cmd --zone=public --add-port=5000/tcp
2.azure的“”网络“”菜单中增加5000端口的入站规则
因为swagger需要项目的xml文件,但是在dockerfile中没有复制到镜像中,所以会报错而不能访问网站
解决方法是在dockerfile中增加一行指令:
把application.xml从WebApplication5/目录拷贝到/app目录下,再重新执行构建任务,就可以正常访问。
到此.net core的整个构建告一段落。