Toggle navigation
首页
产品中心
全新RDIF.vNext低代码框架
镇店
.NET C/S开发框架
.NET Web敏捷开发框架
.NET 快速开发框架(全新EasyUI版本)
.NET 代码生成器
.NET WebAPI服务端开发框架
客户案例
付款方式
国思学堂
技术文章
新闻资讯
下载
关于
首页
技术文章
RDIF.NET
正文
原创
2021-01-28
浏览 (
9527
)
.NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)
通过前面三篇: [.NET Core部署到linux(CentOS)最全解决方案,常规篇](http://www.guosisoft.com/article/detail/244) [.NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx)](http://www.guosisoft.com/article/detail/245) [.NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus)](http://www.guosisoft.com/article/detail/246) 通过前面三篇文章的介绍,我们已经对.net core多方案部署到linux下有了非常全面的认识,小型团队已经足够使用。虽然目前的方案可以实现一键部署更新,但是还是需要登陆到linux服务器去执行相应的命令。 显示,这不是最优的方案,那么还有没有更好的方案呢?比如:当我们提交给git仓库后,自动出发部署命令是不是就更方便了呢? 答案是肯定的,我们可以借助jenkins来实现。 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称 CI) 。 ## 1、CI/CD ![ci/cd](http://doc.rdiframework.net/rdiblog/20210125174317.png) ### 1.1、持续集成 > continuous integration 持续集成是一种软件实践,流程为:开发 => 打包 => 集成 => 测试 ![ci](http://doc.rdiframework.net/rdiblog/20210125174321.png) ### 1.2、持续交付 > continuous delivery 持续交付是一种软件工程手法,流程为:测试 => 发布 ![cd](http://doc.rdiframework.net/rdiblog/20210125174326.png) ### 1.3、持续部署 > continous deployment 持续部署是在持续交付的管道中发布版本给最终用户的一种软件工程流程,流程为:发布 => 部署上线 ![cd](http://doc.rdiframework.net/rdiblog/20210125174330.png) ## 2、Jenkins > Jenkins 是一个基于Java语言开发的CI持续构建工具,主要用于持续、自动的构建/测试软件项目。它可以执行你预先设定好的设置和脚本,也可以和 Git工具做集成,实现自动触发和定时触发器构建。 ![image-20210122181431364](http://doc.rdiframework.net/rdiblog/20210125174335.png) jenkins官网:[https://www.jenkins.io/](https://www.jenkins.io/) ![jenkins](http://doc.rdiframework.net/rdiblog/20210125174338.png) ### 2.1、安装jenkins **安装docker-conpose** 因为jenkins需要用到本地的docker-compose环境,执行以下命令安装 ``` docker exec -it jenkins /bin/bash ``` 进入**容器内部**安装docker-compose,[安装步骤去](https://github.com/yeasy/docker_practice/blob/master/compose/install.md) **1、构建自定义的Dockerfile** ```dockerfile # touch Dockerfile # vim Dockerfile ``` 编写Dockerfile: ```dockerfile FROM jenkins/jenkins USER root # 清除了基础镜像设置的源,切换成阿里云源 RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \ && echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \ && echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \ && echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list #更新源并安装缺少的包 RUN apt-get update && apt-get install -y libltdl7 && apt-get update ARG dockerGid=999 RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group # 安装 docker-compose 因为等下构建环境的需要 RUN curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose RUN chmod +x /usr/local/bin/docker-compose ``` ![构建自定义的Dockerfile](http://doc.rdiframework.net/rdiblog/20210125174343.png) 如果不安装 libltdl7 会导致如下这个问题,原因是jenkins容器内部没有这个包 ```shell docker: error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or directory Build step 'Execute shell' marked build as failure ``` 在Jenkins操作宿主的Docker的时候会出现拒绝访问的问题,其实就是容器的jenkins用户没有权限访问容器外的docker命令,所以 RUN命令 需要把Jenkins用户加入到Docker用户组 **2、构建jenkins镜像** ``` docker build . -t auto-jenkins ``` ![构建jenkins镜像](http://doc.rdiframework.net/rdiblog/20210125174348.png) 看到以下字样就构建成功了。 > Successfully built 80a4f61b5b6f > Successfully tagged auto-jenkins:latest ![构建成功](http://doc.rdiframework.net/rdiblog/20210125174358.png) **3、创建jenkins项目文件的挂载目录** ``` mkdir -p /var/jenkins_home ``` **4、修改目录权限** > 这一步必不可少!会导致权限不足报错 ``` chown -R 1000 /var/jenkins_home ``` **5、run我们自定义jenkins镜像 auto-jenkins** > 这里我用7080作为对外的jenkins ip(因为我的8080被占用了) ``` docker run --name jenkins -p 7080:8080 -p 50000:50000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/bin/docker \ -v /var/jenkins_home:/var/jenkins_home \ -d auto-jenkins ``` 使用`docker ps` 查看运行中的容器,如看到如下图,表示jenkins已正常启动: ![查看运行中的容器](http://doc.rdiframework.net/rdiblog/20210125174405.png) **6、完成jenkins安装** 访问 [http://你的服务器ip:7080](http://xn--ip-0p3cl7jf7fo83a16x:7080/) ![jenkins首次运行](http://doc.rdiframework.net/rdiblog/20210125174409.png) 这里需要安装密码,证明这是你的服务器,进入容器: ``` docker exec -it jenkins /bin/bash cat /var/jenkins_home/secrets/initialAdminPassword ``` 如下图所示,生成好了密码; ![image-20210122154143440](http://doc.rdiframework.net/rdiblog/20210125174413.png) 复制密码后,单击继续按钮。 ![安装推荐的插件](http://doc.rdiframework.net/rdiblog/20210125174417.png) 如图,点击"安装推荐的插件",安装jenkins常用插件 ![安装推荐的插件](http://doc.rdiframework.net/rdiblog/20210125174421.png) 安装完毕后,需要创建一个管理员用户账号,如下图所示。 ![创建管理员账号](http://doc.rdiframework.net/rdiblog/20210125174424.png) 提示:安装过程如果某个组件失败,可以重试一下。 ![重试安装过程失败的组件](http://doc.rdiframework.net/rdiblog/20210125174427.png) 到这里,jenkins安装结果,填写完管理员信息后,接下来开始jenkins自动化部署之旅。 ![jenkins安装完成](http://doc.rdiframework.net/rdiblog/20210125174432.png) 安装成功后,Jenkins主界面: ![Jenkins运行成功](http://doc.rdiframework.net/rdiblog/20210125174435.png) ### 2.2、jenkins配置 **1、创建一个jenkins项目** **新建项目** ![新增Item](http://doc.rdiframework.net/rdiblog/20210125174439.png) **构建一个自由风格的软件项目** ![添加任务](http://doc.rdiframework.net/rdiblog/20210125174444.png) **2、源代码管理** > 这里可以指定git分支 ![git源码](http://doc.rdiframework.net/rdiblog/20210125174447.png) 如果项目配置了公钥,那么在上图中,我们还需要配置凭证,否则是不能链接到git仓库的,如下图所示。 ![源码管理凭证添加](http://doc.rdiframework.net/rdiblog/20210125174456.png) ![源码管理](http://doc.rdiframework.net/rdiblog/20210125174500.png) **3、构建触发器** > 这里的是设置轮询去git拉取代码,如果代码有更新就触发构建操作,`H/2 * * * *` 是指每2分钟轮询拉取一次; ![构建触发器](http://doc.rdiframework.net/rdiblog/20210125174509.png) **4、构建环境** > Abort the build if it's stuck 是指如果构建过程中卡住了,就终止构建;这里是5是5分钟,5分钟超时构建失败; ![构建环境](http://doc.rdiframework.net/rdiblog/20210125174513.png) **5、添加构建脚本Execute Shell** ![添加构建脚本Execute Shell](http://doc.rdiframework.net/rdiblog/20210125174516.png) 填写构建脚本 ```shell image_version=`date +%Y%m%d%H%M`; echo $image_version; # 停止之前的docker container CID=$(docker ps | grep "core50test" | awk '{print $1}') echo $CID if [ "$CID" != "" ];then docker stop $CID docker rm $CID fi #docker stop core50test; # 删除这个container #docker rm core50test; # build镜像并且打上tag docker build -t core50test:$image_version .; docker images; # 把刚刚build出来的镜像跑起来 docker run -p 8066:5000 --name core50test -d core50test:$image_version; docker logs core50test; ``` ![shell](http://doc.rdiframework.net/rdiblog/20210125174524.png) 点击保存回到core50test项目界面 ![core50test项目](http://doc.rdiframework.net/rdiblog/20210125174527.png) 单击上图名称为"core50test"的项目,点击“立即构建” ![立即构建](http://doc.rdiframework.net/rdiblog/20210125174536.png) ![构建历史](http://doc.rdiframework.net/rdiblog/20210125174539.png) 构建控制台输出 ![image-20210125160313617](http://doc.rdiframework.net/rdiblog/20210125174542.png) 构建成功,现在打开 [http://你的服务器ip:5000](http://xn--ip-0p3cl7jf7fo83a16x:5006/),可以看到我们的网站: ![构建成功](http://doc.rdiframework.net/rdiblog/20210125174545.png) 如果网站有任何更改,提交代码,jenkins会自动拉取代码,并发布一个新的容器,等等刷新浏览器就行了; ![构造状态](http://doc.rdiframework.net/rdiblog/20210125174549.png) **构建状态** > **Successful蓝色**:构建完成,并且被认为是稳定的。 > > **Unstable黄色**:构建完成,但被认为是不稳定的。 > > **Failed红色**:构建失败。 > > **Disable灰色**:构建已禁用 **构建稳定性** > 构建稳定性用天气表示:**晴、晴转多云、多云、小雨、雷阵雨**。天气越好表示构建越稳定,反之亦然。 最后借用一张Jenkins的思维导图供大家参考: ![Jenkins的思维导图](http://doc.rdiframework.net/rdiblog/20210125174554.png) ----- 一路走来数个年头,感谢RDIFramework.NET框架的支持者与使用者,大家可以通过下面的地址了解详情。 RDIFramework.NET官方网站:[http://www.rdiframework.net/](http://www.rdiframework.net/) [http://www.guosisoft.com/](http://www.guosisoft.com/) 特别说明,框架相关的技术文章请以官方网站为准,欢迎大家收藏! RDIFramework.NET框架由海南国思软件科技有限公司专业团队长期打造、一直在更新、一直在升级,请放心使用! 欢迎关注RDIFramework.NET框架官方微信公众号(微信号:**guosisoft**),及时了解最新动态。 使用微信扫描二维码立即关注 ![微信号:**guosisoft**](http://doc.rdiframework.net/weixin.png)
正文到此结束
本文标签:
.NET
.NetCore
RDIF.NET
版权声明:
本站原创文章,由
guosisoft.com
发布,遵循
CC 4.0 by-sa
版权协议,转载请附上原文出处链接和本声明。
上一篇
.NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus)
下一篇
RDIFramework.NET敏捷开发框架助力企业BPM业务流程系统的开发与落地
热门推荐
{{article.title}}
热门指数:
浏览({{article.lookCount + 5000}})
相关文章
{{article.title}}
该篇文章的评论功能暂时被站长关闭
说给你听
本文目录
文章标签
RDIF.NET
其他
微信开发
.NET
消息交互
.NetCore
项目管理
常用工具
工作流
Web前端
数据库
挨踢业界
随机文章
RDIFramework.NET—.NET快速开发整合框架【开发实例】之产品管理(WinForm版)
RDIFramework.NET CS敏捷开发框架 V6.0发布(支持.NET6+、Framework双引擎可选,全网唯一)
史上最全面的SignalR系列教程-5、SignalR 实现一对一聊天
.NET快速信息化系统开发框架 V3.2->新增“行政区域管理”,同时大批量树采用异步加载
RDIFramework.NET代码生成器全新V5.1版本发布
JavaScript资源大全中文版(Awesome最新版)
VS依赖注入(DI)构造函数自动生成局部私有变量
如何快速开发软件?这篇文章说明白了
.NET快速信息化系统开发框架 V3.2 -> WinForm“组织机构管理”界面组织机构权限管理采用新的界面,操作权限按模块进行展示
企业数字化转型如何做?看过来
史上最全面的SignalR系列教程-3、SignalR 实现推送功能-集线器类实现方式
RDIFramework.NET开发框架在线表单设计助力可视化快速开发
Visual Studio 2015官方汇总包括下载和视频
VS2010+以上版本网站发布IIS详细步骤
项目应如何启动?
RDIFramework.NET WinForm版新增报表管理功能模块
SQLServer中的CTE(Common Table Expression)通用表表达式使用详解
RDIFramework.NET V3.3 Web版新增报表管理功能模块-重量级实用功能
ORACLE常见问题一千问[401至500](不怕学不成、就怕心不诚!)
.NET快速信息化系统开发框架 V3.2->Web版本工作流部分业务处理界面与查看界面全新展示
网站信息
文章总数:599 篇
标签总数:8 个
分类总数:8 个
留言数量:1385 条
在线人数:
89
人
运行天数:1321天
最后更新:2023-05-18
QQ:406590790
13005007127