使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)
使用Jenkins与Docker持续集成与发布NetCore项目(教程一)
原文地址:https://www.cnblogs.com/Jackyye/p/12588182.html
基本环境
该教程的环境基于
服务器系统:CentOs
软件需部署:Docker,Docker Registry(Docker私有库),JDK,Jenkins(非docker安装),Gogs(Git私有库)
Jenkins所需插件:
Gogs plugin
SSH plugin
确定思路
首先我们要明确实现持续集成/持续发布的具体思路。
在git仓库收到推送的时候,触发webhook,webhook将请求发送到jenkins服务器。
触发jenkins流水线/计划。在jenkins计划中,git pull 最新的代码到特定项目文件夹,用docker build 编译后,上传到docker registry。
然后使用ssh命令远程主机,使用docker拉取项目,移除之前的项目,部署最新的项目
具体实现
一、生成Dockerfile文件
这个思路是通过docker实现的,所以链接整个流程的关键是Dockerfile文件,在使用visual studio新建项目时,勾选为项目配置docker,即可自动生成Dockerfile。具体dockerfile文件的编写可以参考docker官网:https://docs.docker.com/get-started/part2/
PS:这里需要注意一下,自动生成的dockerfile文件的默认路径可能会有偏差(这里需要保证JenkinsTest.csproj 与 它的WORKDIR 能对应上)
二、jenkins添加一个测试计划
在jenkins中点击新建任务,给项目命名,这里命名test,后保存即可,先不用进行其他配置操作。(确认已经安装Gogs-Webhook Plugin)
新建完后退出总界面,可以看到我们已经有一个任务计划了。
三、把带有Dockerfile的项目上传到Gogs服务器上
这个git的操作就不展开描述了,相信大家都懂,不懂的可以学习廖雪峰老师的git教程
cd projectdir
git commit -am XXX
git push
上传完后进入Gogs的仓库设置,选择管理web钩子,添加web钩子,选择gogs-webhook
gogs-webhook设置的注意事项:(图三)
- 根据Gogs-Webhook Plugin官网里描述,默认的Gogs推送地址形式如下,服务器地址+端口号+/gogs-webhook/?job=+任务名(这里是test)
http(s)://<< jenkins-server >>/gogs-webhook/?job=<< jobname >>
- 设置自己的密钥文本,也就是这个推送的密码,如:123456什么的,这个稍后在jenkins要用到
完成以上步奏后,就可以实现任务推送后触发jenkins任务了,接下来就开始配置jenkins
四、配置jenkins
配置SSH远程凭证
因为我们的思路里有要远程其他服务器的步奏,所以我们先要给jenkins添加一个链接凭证
- 进入jenkins首页,点击凭据,展开后点击系统,在全局凭据右侧有个小倒三角,点击添加凭据,如下图
2. 我们远程登录只需要用户名和密码就行,所以类型选择username with password,在用户名和密码里输入你要登录的服务器名和密码,id不用填,描述可以描述你的服务器名
- 进入到jenkins设置里的系统设置,找到SSH remote hosts选项,点击新增,依次输入你的服务器名,端口号22,选择刚刚新增的凭证
点击test connect 如出现success 就连接成功,这个很重要!!!
jenkins任务配置
1.进入项目,点击配置
2.在我们第三步设置的gogs密码,现在该用上了,在gogs webhook的设置中,把Use Gogs secret勾上,然后把密码输进去,为了防止恶意触发项目构建
3.在构建触发器中选择,when a change is pushed to gogs
4.添加一个本地构建命令,实现的流程是:git pull(git拉取) -> docker build(docker根据dockerfile构建) -> docker tag(修改为指定的docker私有库) -> docker push(上传到私有库)
//由于我的私有库不是https的,所以在执行docker命令前先信任私有库
vi /etc/docker/daemon.json
{
"insecure-registries":["[Registry IP]:5000"]
}
//进入项目目录
cd ./jenkins
//拉取项目
git pull
//用dockerfile构建项目
docker build --tag jenkinstest:${BUILD_NUMBER} . --network=host //这里是利用了jenkins参数${BUILD_NUMBER}来标识版本,也可以用BUILD_ID
//指定image上传服务器
docker tag jenkinstest:${BUILD_NUMBER} localhost:5000/jenkinstest:${BUILD_NUMBER} //localhost:5000,我把docker registry部署在同一个服务器所以这里是localhost
//推送image到registry
docker push localhost:5000/jenkinstest:${BUILD_NUMBER}
5.添加一个远程命令,选择你刚刚添加的ssh链接,实现的流程是:docker pull -> docker rm -> doceker run,请确保你远程的服务器信任了私有库"insecure-registries":["[Registry IP]:5000"] (参考上个步奏)
//更新image
docker pull [Registry IP]:5000/jenkinstest:${BUILD_NUMBER}
//通过名字移除容器
docker container rm jk --force
//-p --name 以特定名后台运行容器
docker run --publish 8000:80 --detach --name jk [Registry IP]:5000/jenkinstest:${BUILD_NUMBER}
至此,只要把你的代码推送到git上,就能自动构建和部署你的项目啦!
使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)的更多相关文章
- ASP.NET Core & Docker & Jenkins 零基础持续集成实战
原文:ASP.NET Core & Docker & Jenkins 零基础持续集成实战 一.本系列教程说明 源代码管理工具:Gogs 持续集成工具:Jenkins 容器:Docker ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(二):部署
前面又是废话 我之前写过: Asp.Net Core 程序部署到Linux(centos)生产环境(一):普通部署 Asp.Net Core 程序部署到Linux(centos)生产环境(二):doc ...
- 最佳实战Docker持续集成图文详解
最佳实战Docker持续集成图文详解 这是一种真正的容器级的实现,这个带来的好处,不仅仅是效率的提升,更是一种变革:开发人员第一次真正为自己的代码负责——终于可以跳过运维和测试部门,自主维护运行环境( ...
- 基于 Jenkins 快速搭建持续集成环境
什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火 ...
- jenkins + Git 搭建持续集成环境
持续集成通过自动化构建.自动化测试以及自动化部署加上较高的集成频率保证了开发系统中的问题能迅速被发现和修复,降低了集成失败的风险,使得系统在开发中始终保持在一个稳定健康的集成状态.jenkins是目前 ...
- 基于 Jenkins 快速搭建持续集成环境--转
源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...
- Jenkins 快速搭建持续集成环境
持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域 ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(三):搭建jenkins集群环境
写在前面 大家可以看到本文的配图,左边是jenkins单机环境,右边是jenkins集群.个中区别,不言而喻,形象生动. 前面我分别介绍了.net core 程序的多种部署方式(无绝对孰优孰劣): 1 ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(一):Jenkins安装
2019/1/31更新,经过我一段时间的使用 建议大家的jenkins还是不要使用docker方式安装 建议大家的jenkins还是不要使用docker方式安装 建议大家的jenkins还是不要使用d ...
随机推荐
- Visual Studio 2013编译Tesseract 3.04
文章目录 去年时候使用了VS2008编译了Tesseract 3.02版本,主要是参考了一份官方文档,但是对于目前的最新版本并没有给出说明. 本文主要参考了Paul Vorbach的How to bu ...
- C++ Primer Plus 学习之 类继承
主要介绍了类的继承.虚函数.类继承的动态内存分配问题.继承与友元函数. 公有派生 基类的公有成员和私有成员都会成为派生类的一部分. 基类的私有成员只能通过基类的公有或者保护方法访问.但是,基类指针或引 ...
- JavaScript 预解析机制
首先我们来看一段代码: <script> console.log(a); var a = 10; </script> 此时运行结果为 为什么会显示undefined呢?这就 ...
- 创建SpringMVC项目过程
1.导入对应jar包 <properties> <spring.version>5.0.2.RELEASE</spring.version> </proper ...
- 达拉草201771010105《面向对象程序设计(java)》第十周学习总结
达拉草201771010105<面向对象程序设计(java)>第十周学习总结 实验十 泛型程序设计技术 实验时间 2018-11-1 第一部分:理论知识 泛型:也称参数化类 ...
- springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据
springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据 表单html: <form class="form-horizontal ...
- js获取当前日期是一年中的第几天
js获取当前日期为一年中的第几天 const currentYear = new Date().getFullYear().toString(); // 今天减今年的第一天(xxxx年01月01日) ...
- Jquery实现checkbox全选、取消全选和反选
最近在看廖雪峰的Jquery教程,事件篇的练习题比较综合,研究了很久终于研究出来了,现在分享出来,提供给小白学习.题目如下: 首先要获取到全选checkbox和每一项的checkbox,然后通过逻辑代 ...
- https信任库采坑记
最近在客户现场遇到一个棘手的http问题,现象很直接,访问某https的时候报错: javax.net.ssl.SSLPeerUnverifiedException: peer not authent ...
- 《深入理解 Java 虚拟机》读书笔记:虚拟机类加载机制
正文 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制. 一.类加载的时机 1.类的生命 ...