简介:我们现在都流行把项目封装成docker的镜像,不过实际用的时候就会发现很麻烦,我们每次更改代码了以后都要打包成docker容器

,事实证明项目比较多的时候真的会让人崩溃,我这边用spring cloud微服务+docker,才跑了6个项目每次修改上传,内心早已崩溃,现在我介绍一下

利用jenkins做持续集成,阿里code作代码托管平台,为什么不用开源中国呢,其实我这边的项目一直都是托管在开源中国上面的,主要是我实验的时候发现开源中国的https协议的证书,

不是很被官方jenkins容器认同,每次都可以触发,但代码就是下载失败,jenkins是基于java的,所以我们要把开源中国的证书导入到java的cacerts中

本来把它的证书从浏览器导出来了,当时cacerts文件需要root权限而jenkins容器又只有jenkins用户的权限,宝宝发脾气就用了阿里的code了。

所以不推荐用开源中国webhook和jenkins搭配

环境:阿里云code的代码托管平台

jenkins容器

一台安装docker环境的主服务器

思路:分为3个job,job1->job2->job3,只有当前面的一个job单元测试成功了,才触发执行下一个job

job1:在阿里云code上面设置webhook的push操作,我们提交代码到阿里云code,触发webhook给jenkins发送消息,jenkins自动去配置好的git地址下载源码到主目录

job2:job1成功后,将源码打包成docker镜像,并且push到阿里云的docker仓库,或者自己的私有register的docker仓库

job3:job2成功后,将以前老的容器stop,甚至删除,从阿里云的docker仓库,或者自己的私有register的docker仓库pull镜像并且运行docker镜像

步骤:

job1:

1.运行jenkins容器:

docker run -d -p 8080:8080 -p 50000:50000 -v /home/container:/var/jenkins_home \
-v /etc/localtime:/etc/localtime \
-v /etc/timezone:/etc/timezone jenkins

这里映射注意:

/home/container目录需要设置权限,jenkins内部的用户是jenkins,不然会权限被拒绝,具体看http://www.cnblogs.com/waterlufei/p/6682283.html

jenkins的默认时间是有问题的,有8个小时的时差,是时区的问题所以我们需要映射下时间

点击新建,建一个自由风格的项目,描述简单介绍下

填写自己的项目git地址,和git的用户名和密码,阿里云的用户名和密码不是登陆的用户名密码,这里和开源中国不一样

触发器:

我用的是通用的webhook插件,在系统管理->管理插件中下载,如果你不想下载插件也可以直接用出发远程构建,不过我试过,阿里code和开源中国上面webhook一直添加不上去,

这里不深究,没意义

构建的时候执行的命令,选择构建->Execute shell:

然后apply,保存,job1就搭建完了

2.系统设置->管理用户,点击右边的设置

这是我们的apikey,我们都知道访问api的时候,正规点的软件都会有提供专门的api的账号密码,我们访问的时候携带这对用户名和密码就好了

3.系统设置->Configure Global Security,去掉防止跨站点请求伪造的勾,这样我们就可以在浏览器和阿里的webhook访问到api的地址了,不然我们把用户名和密码放到url

中,还是不能访问

4.进入阿里code的一个项目,点击setting->webhook

http://userID:apitoken@IP:8080/generic-webhook-trigger/invoke

userID:apitoken就是前面看到的User ID和API Token

IP:8080是jenkin容器的主页地址

generic-webhook-trigger/invoke是固定的,对应jenkins的Generic Webhook Trigger插件

现在我们测试下:

改变下项目,push下,然后触发jenkins执行

主目录下已经有我们的项目了

QA:我们的项目下载在jenkins容器里,不管怎么改都是在容器中而jenkins容器中又没有docker的环境,对于这种情况有两种思想:

1.想办法在容器内部搭建docker环境,可以实现(不推荐)

2.容器是固定好的,容器只应该负责做它该做的事,而不是什么都干,像现在这种情况,应该是在别的有docker环境的主机上执行,jenkins只负责自己的触发执行等等(推荐)

我们采用第二种方法,jenkins的设计者应该也是这么想的,所以提供的我们子节点的概念,我们可以配置子节点slave,并且用ssh协议连接

,这样我们的工作空间就在一个有docker环境的主机上了,

实现待更新。。。。。。

jenkins+webhook+docker做持续集成的更多相关文章

  1. Jenkins+Svn+Docker搭建持续集成环境 自动部署

    一.准备工作: 两台服务器:192.168.206.212,192.168.206.213 自己新建一个maven项目 其中两台机子做下面的软件配置 212机子: 安装expect并配置: 安装jen ...

  2. jenkins maven tomcat做持续集成

    maven 采用 maven 3.0以上的版本.tomcat 采用 tomcat 7.0 以上的版本 1. tomcat 配置用户账号和权限 tomcat-users.xml <role rol ...

  3. Docker+Jenkins+Maven+SVN搭建持续集成环境

    Docker+Jenkins+Maven+SVN搭建持续集成环境 环境拓扑图(实验项目使用PHP环境) 发布流程图 环境说明 系统:Centos 7.4 x64 Docker版本:18.09.0 Ma ...

  4. 使用 Jenkins 搭建 iOS/Android 持续集成打包平台【转】

    背景描述 根据项目需求,现要在团队内部搭建一个统一的打包平台,实现对iOS和Android项目的打包.而且为了方便团队内部的测试包分发,希望在打包完成后能生成一个二维码,体验用户(产品.运营.测试等人 ...

  5. 利用jenkins和docker实现持续交付

    利用jenkins和docker实现持续交付 一.什么是持续交付 让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定.持续的保持在随时可以发布的状况.它的目标在于让软件的构建.测试与发布变得更 ...

  6. Jenkins+Maven+Sonar系统持续集成环境部署以及配置

    一.Jenkins介绍以及安装 什么是持续集成?   随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Ag ...

  7. Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    Net 项目构建基于Jenkins + Github + Mono 的持续集成环境 阅读目录 1 安装 2 配置 3 测试 在Redhat enterprise 6.5 的服务器上,为在gutub 上 ...

  8. 【持续集成】GitLab CI + Docker 实现持续集成

    GitLab CI + Docker 实现持续集成 一.持续集成(Continuous Integration, CI)的基本概念 概述 在传统软件的开发中,代码的集成工作通常是在所有人都将工作完成后 ...

  9. 使用gitlab构建基于docker的持续集成(二)

    使用gitlab构建基于docker的持续集成(二) gitlab docker aspnetcore Centos配置gitlab镜像并且启动 Centos配置防火墙 windows上访问gitla ...

随机推荐

  1. 详细领悟ThreadLocal变量

    关于对ThreadLocal变量的理解,我今天查看一下午的博客,自己也写了demo来测试来看自己的理解到底是不是那么回事.从看到博客引出不解,到仔细查看ThreadLocal源码(JDK1.8),我觉 ...

  2. [Bnuz OJ]1176 小秋与正方形

    传送门 问题描述 某天,acm的小秋拿到了一张很大很大的纸.他现在打算把它撕成正方 形.但是他没有任何工具,没有尺子,所以他尝试一种有趣的方法切分矩形.假设这是一个a*b的矩形(a>b),那么小 ...

  3. 前端资讯周报 3.6 - 3.12: 对学习Javascript最有帮助的三本书,以及HTML标题的迷思

    每周一我都会分享上一周我订阅的技术站点中,和解决问题的过程中阅读到的值得分享的文章. 毕竟个人的阅读量有限,也欢迎大家留言或者私信给我你们阅读到的,对你们前端技术有帮助的任何内容,题材不限,语言不限. ...

  4. jQuery获取Select选择的Text和Value

     jQuery获取Select选择的Text和Value:语法解释:1. $("#select_id").change(function(){//code...});   //为S ...

  5. JAVA面试题和答案(二)

    本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能 ...

  6. RabbitMQ-从基础到实战(2)— 防止消息丢失

    转载请注明出处 1.简介 RabbitMQ中,消息丢失可以简单的分为两种:客户端丢失和服务端丢失.针对这两种消息丢失,RabbitMQ都给出了相应的解决方案. 2.防止客户端丢失消息 如图,生产者P向 ...

  7. 如何修改SVN客户端中保存的密码

    本文主要讲述Linux命令行下怎么修改已经保存的客户端密码: 第一步,删除 subvision文件: rm -rf ~/.subvision 第二步:执行任意需要访问服务器的svn命令,会提示是否永久 ...

  8. Static语句块和初始语句块的使用---2015年10月恒生电子笔试试卷

    package lhm.test; /** * @author lenovo * */public class Person { private int id; private static int ...

  9. canvas 3D雪花效果

    <!DOCTYPE html> <html style="height: 100%;"> <head> <meta charset=&qu ...

  10. 《连载 | 物联网框架ServerSuperIO教程》- 17.支持实时数据库,高并发保存测点数据。附:3.4 发布与版本更新说明。

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...