Windows系统下使用Jenkins自动化发布.NET core程序到Linux平台下利用Docker快速启动
准备工作:
Windows安装Jenkins 官网自行下载 https://jenkins.io/
Linux服务器一台,建议使用VM虚拟机完成,系统版本建议Centos7系列
Linux安装Docker CE版本,官网自行下载https://www.docker.com/
Window下载好压软件,因为该软件支持CMD命令,这里还需要修改一下本地的环境变量,右键【我的电脑】->【高级系统设置】->【高级】->【环境变量设置】->选择系统变量【Path】->点击【编辑】->点击【新建】,把好压的安装目录放进去。我好压的安装目录是:C:\Program Files\2345Soft\HaoZip
一切就绪后,打开jenkins,默认http://localhost:8080,如下
我们需要在jenkins插件管理中下载相关插件,然后构建的时候会利用这些插件
插件1:Git插件Git plugin
插件2:Scp远程上传插件 Hudson SCP publisher plugin
插件3:SSH插件 Publish Over SSH,
如下图直接搜索插件名称,点击安装就可以了。
Jenkins插件设置,进入系统管理->系统设置
找到【SCP repository hosts】上传插件设置位置:
Hostname:远程liunx服务器 IP地址
Port:端口(默认22)
Root Repository Path:文件存放目录
User Name:登入用户名
Password/Passphrase:密码
图例:
找到【SSH Servers】连接liunx服务器插件设置:
Name:别名,可以结合业务取
Hostname:远程liunx服务器 IP地址
Username:登入用户名
Remote Directory:连接默认工作目录
Passphrase / Password:密码
Port:连接端口(默认22)
图例:
完成插件配置后,创建项目,点击【新建】->输入项目名称->选择【构建一个自由风格的软件项目】->点击【OK】
图例:
配置项目,点击【源代码管理】->选择【Git】
图例:
选择【构建】->点击【增加构建步骤】->选择【Execute Windows batch command】
图例:
构建前工作,需要写的命令思路大纲是,使用dotnet命令,发布项目,然后压缩
例如:
切换CMD编码
chcp 65001
切换到项目Web目录
cd ./Boss.Web.Test/
还原项目get包
dotnet restore
生成项目检查是否可以生成成功
dotnet build
发布项目,发布前需要删除之前的发布文件和压缩包依次是
rd /s /q web-publish
del web-publish.zip
dotnet publish – o 指定发布目录
最后压缩发布的文件
HaoZipC a –tzip web-publish.zip “web-publish\* -r,
发布完成后
选择【构建后操作】->点击【增加构建后操作步骤】->选择【Publish artifacts to SCP Repository】,准备把发布压缩文件上传到远程linux服务器
图列:
下拉选择要上传服务器地址(刚才配置过的都在里面),点击【增加】,第一个上传的是我们的源代码压缩包,第二个是我们要生成docker的依赖文件
图列:
这里的docker依赖文件是我们.netcore项目需要打包成镜像的指令文件Dockerfile
例如:以下是最简单的打包.netcore镜像命令
将发布文件和dockerfile上传到远程linux服务器后,需要通过SSH远程执行命令
现在开始编写远程SSH所需要执行的命令
图例
需要写的命令思路大纲是,切换到发布文件目录,解压发布文件,打包镜像,上传镜像仓库,运行镜像
例如:
切换到发布文件所在目录
cd /home/web-publish
删除之前的发布文件
rm –rf web-publish
解压
unzip –o web-publish.zip
删除文件压缩包
rm –f web-publish.zip
生成docker镜像
docker build –t ${name}:${tag} ${dcokerfile所在目录}
停止之前运行的容器
docker stop ${容器}
删除之前的容器
docker rm ${容器}
运行生成的镜像
docker run –d –p 8002:80 –name ${容器名称} ${组织}/${仓库}:${标记}
点击保存,配置就完成了。
返回
返回首页看到刚配置好的数据,点击后面的构建就行了。
Docker 卷和挂载
由于容器的文件系统会随着容器删除也会删除,可以理解为容器的文件系统不是持久的。
所以需要数据卷或绑定挂载完成需要持久化的东西。
以下是卷和绑定挂载的一些概念
卷
卷是由Docker管理,非Docker进程不应该修改文件系统这一部分,卷是在Docker中保留数据的最佳方式。
创建卷命令:docker volume create --名称
将卷应用于容器的时候,此目录是装入容器的目录,类似绑定挂载的工作方式,除了卷由Docker管理与主机核心功能隔离。
删除未被容器使用的卷命令:docker volume prune
匿名卷在首次装入容器的时候未给出明确的名称,因此Docker为它们创建了一个随机名称,该名称在给定的Docker主机中保证是唯一的。除了名称外,命名和匿名卷的行为方式是一样的。
卷还支持使用驱动程序,这些驱动程序允许您将数据存储在远程主机或云提供程序上,以及其它可能性。
卷只能是目录,不能是单个文件,配置文件在主机文件修改后,容器会及时应用到,反之亦可。
使用命令:
$ docker run -d –p 8008:80
--name devtest \
--mount source=myvol2,target=/app \
组织/仓库名:版本
绑定挂载
可以存储在主机系统的任意位置,Docker主机或Docker容器上的非Docker进程可以随时修改它们。
主机目录必须是一个完整的路径,该文件在绑定过程中如果不存在会自动创建,它们依赖于具有特定目录结构的主机文件系统。如果你正在开发新的Docker应用程序,请考虑使用命名卷。你无法使用Docker Cli命令直接管理绑定装入。
注意:使用绑定挂载注意你可以通过容器中运行的进程修改主机文件系统,包括创建,修改,删除重要的系统文件目录或文件。
tmpfs
挂载仅存储在主机系统的内存中,永远不会写入文件系统。主要可以在容器的生命周期供容器使用,以存储非持久状态的敏感信息。
绑定这种方式,可以是文件和目录,经测试.net core绑定单个配置文件appsettings.json,在主机目录修改后,需要启动容器才会生效。
使用绑定挂载或卷的提示
1:如果将空卷装入容器中存在文件或目录的目录中,则会将这些文件或目录复制到卷中,同样,如果启动容器的时候指定尚不存在的卷则会自动创建一个空卷。这是预先填充另一个容器所需数据的好方法。
2:如果将绑定挂载或非空卷装入容器中存在的某些文件或目录的目录中,则这些文件或目录会被装在模糊,也就是说绑定挂载或非空卷会遮盖容器中的文件内容,隐藏的文件内容不会被删除或更改,但是在安装绑定挂载或卷的时候无法访问。
使用命令:
$docker run
-d–p 8005:80
-it
\
--name
devtest
\
--mount
type=bind
,source
="$(pwd)"/target,target
=/app
\
组织/仓库名:版本