使用jenkins一键部署.netcore mvc 之 docker环境
【前言】
这个放在单独章节讲解,这里先占个地方,以后放个链接(*^_^*),大家可以先参考我之前参考的一篇博文 https://segmentfault.com/a/1190000007086764
其实jenkins配置时候的坑比较多,简单介绍几个,或许大家碰上了,可以直接问我。
- 构造的时候提示没权限,permission问题
二、从Github上拉取代码执行命令的配置
git的插件其实在jenkins安装过程中的推荐插件提示中有,如果直接安装了推荐的插件,那么无需再去安装。
如果没有安装推荐插件,那么可以进入jenkins的系统管理
管理插件
安装git相关的插件
这个应该很简单,不再赘述。
我们打开一个项目(没有请新建),然后进入项目配置:
输入项目的git地址,我这里写的是github的一个项目地址,地址可以直接打开github复制:
该项填写的是项目的浏览地址,直接从浏览器地址栏复制
然后写在这个位置
还支持选择分支进行构建
这个功能默认是没有的,需要安装一个插件,名称叫 Git Parameter 插件安装的方法之前已经介绍过了,一致的。安装好这个插件以后,就可以自由地配置参数化构建过程。
源码管理继续填写git地址,直接从github复制项目地址
然后填写在对应位置
核心内容当然是构建时执行的命令了,我们下一节进行构建命令的详细剖析
2、创建一段jenkins构建命令(从shell脚本说起)
我们上一节讲解了调用了一个目录下的shell脚本,那么我们这节就开始剖析这主要的脚本内容(构建过程分解),文章最后我们会将脚本全部放出来。
1、shell脚本的变量读取
定义好目录,我们使用 echo 命令输出构建开始的提示信息。
每次使用的都是同一个目录,构建之前先使用 rm -rf 命令清空发布目录(删除所有文件)
3、publish发布项目到准备好的目录
为什么要有这个操作呢?
为了项目的一些配置安全,比如连接字符串地址,服务器地址等敏感信息,如果都放在了github上,岂不是要被有心之人瞎搞。
因此,我们自己将敏感信息配置文件放在一个特定的目录,构建的时候自动复制替换项目里面的配置文件。
一切为了服务器的安全!
四、Docker容器命令详解
docker命令我就不说了吧,有注释。
2、通过Dockerfile创建镜像,并映射端口Run容器
上一点我们使用dockerfile构建了新的镜像,我们的dockerfile其实是随着解决方案一起存放着的。
Dockerfile 其实很简单,在VS2017新建.netcore项目的时候,可以直接附带着自动建出来,如果没有,我们可以手动去创建。
里面其实很简单,仅仅几行代码。
1.描述了从微软的最新版的官方docker镜像作为基础创建新镜像(不清楚的了解一下docker的镜像机制)
2.没啥好说的
3.指定了工作目录,我们构建完毕后,会自动生成/publish文件夹
4.对外暴露80端口
5.复制文件到镜像内(必须的配置),会从/pulish目录复制项目代码到镜像中
6.相关项目的入口点程序集
五、生成前的准备工作
docker的安装是极其简单的,只需要简单的几行命令即可配置完成,这也是很多人喜爱docker的原因,无需复杂的各种软件运行环境的安装,即可简单搭建好一个程序应有的运行环境(前人都做好,而且不会出现看着别人的教程都会出各种问题的问题)。
$ #安装Docker
$ yum install docker
$ #启动docker服务
$ systemctl start docker.service
$ #配置开机启动
$ systemctl enable docker.service
centos7安装docker的命令,非本文重点,如遇到问题,可以自行查找资料解决。
2、微软官方镜像 docker.io/microsoft/aspnetcore:latest 的准备
如果没有.netcore环境(可能涉及环境变量的配置),那么shell脚本中的dotnet命令将无从谈起。
直接进微软官方的说明文档,很明确地讲解了.netcore环境的安装,当然墙外访问比较慢,如果不能流畅打开,那么只能听在下一面之词了。?
官方链接在此:https://www.microsoft.com/net/learn/get-started/windows
左侧选择Linux
选择环境为Centos
安装命令:
Install the .NET SDK
1、一键发布
我们可以在控制台输出查看我们的构建过程
拉取代码并Restore依赖包
删除镜像,重新构建镜像
从微软官方镜像,复制项目文件创建新镜像
运行容器
成功!
七、可能遇到的问题
八、鸣谢
1.Dockerfile文件
#要构建的解决方案名称
solutionName=$1
#.sln文件全路径
solutionDir=$2
#.csproj文件全路径
csprojDir=$3
#docker run的容器名称
containerName=$4
#制定run的端口
port=$5
#项目发布的目录
webDir=/vdb1/jenkins/publish/webapp
#归档目录
archivesDir=/vdb1/jenkins/publish/archives
echo "7tiny:dotnet publish"
#清空文件夹
rm -rf ${webDir}/${JOB_NAME}/*
#发布网站到webDir
dotnet publish ${JENKINS_HOME}/workspace/${JOB_NAME}/${csprojDir} -c Release -o ${webDir}/${JOB_NAME} /p:Version=1.0.${BUILD_NUMBER}
#复制配置文件
cp -rf /vdb1/jenkins/DotNetCoreWebPublishToDockerCommonConfigs/* ${webDir}/${JOB_NAME}/
#停止docker容器
docker stop ${containerName}
#删除当前容器
docker rm ${containerName}
#删除镜像
docker rmi ${containerName}
#通过Dockerfile重新构建镜像
docker build -t ${containerName} ${webDir}/${JOB_NAME}/.
#docker run容器并绑定到端口
docker run -d -p ${port}:80 --name ${containerName} ${containerName}
echo "7tiny:success!"
#发布网站到webDir dotnet publish ${JENKINS_HOME}/workspace/${JOB_NAME}/${csprojDir} -c Release -o ${webDir}/${JOB_NAME} /p:Version=1.0.${BUILD_NUMBER} #复制配置文件 cp -rf /vdb1/jenkins/DotNetCoreWebPublishToDockerCommonConfigs/* ${webDir}/${JOB_NAME}/ #停止docker容器 docker stop ${containerName} #删除当前容器 docker rm ${containerName} #删除镜像 docker rmi ${containerName} #通过Dockerfile重新构建镜像 docker build -t ${containerName} ${webDir}/${JOB_NAME}/. #docker run容器并绑定到端口 docker run -d -p ${port}:80 --name ${containerName} ${containerName} echo "7tiny:success!"
出处:https://www.cnblogs.com/7tiny/p/9119638.html