第四十三章 微服务CICD(5)- gitlab + jenkins + docker + dockerregsitry
一、总体流程

部署:
- 开发机(mac)
- ip:11.11.11.11
- docker:1.12.1
- 部署机(centos7)
- ip:10.211.55.4
- docker:1.12.3
- 生产机(centos7)
- ip:10.211.55.3
- docker:1.10.3(装k8s1.4的时候自带安装的版本)
总体流程:
- 在开发机开发代码后提交到gitlab
- 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry,
- 之后将该镜像推到生产机。(之后引入k8s,会将该镜像推到云上,云自己分配机器)
- 这一步这里不做了,之后引入k8s后再做
二、gitlab安装
三、jenkins安装
- 第四十章 jenkins(2016-11-01 10:25)
四、gitlab通知jenkins进行构建
- 第四十一章 jenkins + gitlab + webhooks + publish-over-ssh(1)
- 第四十二章 jenkins + gitlab + webhooks + publish-over-ssh(2)
五、docker-registry安装
1、部署机(下载镜像,启动镜像)
- docker pull hub.c.163.com/library/registry:latest
- docker tag 0bb8b1006103 registry
- docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry registry
- 默认的存储目录:/var/lib/registry
2、开发机
- 先设置--insecure-registry(这里介绍三种情况)
- 之后push镜像到registry
2.1、mac:

说明:设置insecure registry如上,否则有https的问题,导致无法push和pull,之后"apply restart"就好了。
- docker push 10.211.55.4:5000/zhaojigang/jdk8:c7_j8
- ps -ef | grep docker 看看docker进程的options设置成功没有
2.2、docker1.10.3
在/etc/sysconfig/docker中修改OPTIONS='--selinux-enabled=false --insecure-registry=10.211.55.4:5000'
修改后
- systemctl daemon-reload
- systemctl restart docker
- ps -ef | grep docker 看看docker进程的options设置成功没有
2.3、docker1.12.3
在/lib/systemd/system/docker.service中修改ExecStart=/usr/bin/dockerd --insecure-registry=10.211.55.4:5000
- systemctl daemon-reload
- systemctl restart docker
- ps -ef | grep dockerd 看看docker进程的options设置成功没有
3、生产机
如果需要从registry拉取pull镜像,也需要像上边那样设置,之后才可以拉取。
六、gitlab
- 创建项目 myservice1-docker
- 设置该项目的webhook:第四十一章 jenkins + gitlab + webhooks + publish-over-ssh(1)
七、jenkins
1、"系统管理"->"系统设置"(已经设置过了):第四十一章 jenkins + gitlab + webhooks + publish-over-ssh(1)
2、项目配置:
2.1、general
项目名称:myservice1-docker(其实就是项目的artifactid)
2.2、源码管理

2.3、构建触发器

2.4、Build

- package:打成jar包
- docker:build:打成镜像
- docker:push:将镜像推到私服
八、本地开发代码

1、pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxx</groupId>
<artifactId>myservice1-docker</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version><!-- 官方推荐 -->
<docker.registry>10.211.55.4:5000</docker.registry>
<push.image>true</push.image>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version>
</parent>
<!-- 引入实际依赖 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>${docker.registry}/${project.groupId}/${project.artifactId}:${project.version}</imageName>
<dockerDirectory>${basedir}/src/main/docker</dockerDirectory>
<pushImage>${push.image}</pushImage>
<resources>
<resource>
<!-- ${project.build.directory},项目构建输出目录,默认为target/ -->
<directory>${project.build.directory}</directory>
<!-- ${project.build.finalName},打包出来的jar名称,默认为${project.artifactId}-${project.version} -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
</project>
说明:第三十八章 springboot+docker(maven)
2、Dockerfile
FROM 10.211.55.4:5000/zhaojigang/jdk8:c7_j8 ADD myservice1-docker-1.0-SNAPSHOT.jar app.jar ENV JAVA_HOME /opt/jdk ENV PATH $PATH:$JAVA_HOME/bin CMD ["java","-jar","app.jar"]
说明:基础镜像是本地开发好的一个镜像,需要之后推到远程registry:docker push 10.211.55.4:5000/zhaojigang/jdk8:c7_j8
注意:实际上
FROM 10.211.55.4:5000/zhaojigang/jdk8:c7_j8 ADD myservice1-docker-1.0-SNAPSHOT.jar app.jar
不应该硬编码,应该写作
FROM @docker.registry@/zhaojigang/jdk8:c7_j8 ADD @project.build.finalName@.jar app.jar
但是暂时没成功!!!
3、HelloDockerController.java
package com.xxx.docker.myservice1.web;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/docker")
public class HelloDockerController {
@RequestMapping("/hello")
public String helloDocker(){
return "hello docker12!!!";
}
}
九、git提交代码
- git add --all
- git commit -m"xxx"
- git push origin HEAD:dev
之后,查看jenkins编译console,可以看到,会先打镜像,最后将镜像push到远程的registry中,供将来的机器去pull。
十、从开发机或者生产机pull镜像并且运行测试
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
span.s2 { color: #c33720 }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { color: #c33720 }
span.s2 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { color: #c33720 }
span.s2 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Monaco; color: #f5f5f5; background-color: #000000 }
span.s1 { }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco }
第四十三章 微服务CICD(5)- gitlab + jenkins + docker + dockerregsitry的更多相关文章
- 第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s
总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...
- 第四十二章 微服务CICD(4)- jenkins + gitlab + webhooks + publish-over-ssh(2)
上一节完成了"当git客户端push代码到gitlab后,jenkins会立即去gitlab拉取代码并构建". 目的:本节完成jenkins自动构建之后,自动的将jar包部署到应用 ...
- 第三十九章 微服务CICD(1)- gitlab搭建与使用(docker版)
一.下载docker镜像 前提:docker引擎已经安装好. docker pull gitlab/gitlab-ce gitlab是8.13.1版本. 二.启动应用 docker run -d -h ...
- 第四十一章 微服务CICD(3)- jenkins + gitlab + webhooks + publish-over-ssh(1)
一.作用 使用webhooks来实现当git客户端push代码到gitlab后,jenkins会立即去gitlab拉取代码并构建. 二.步骤 1.安装插件 ruby_runtime(Hook插件依赖于 ...
- Gradle 1.12用户指南翻译——第四十三章. 构建公告插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- JHipster生成微服务架构的应用栈(四)- 网关微服务示例
本系列文章演示如何用JHipster生成一个微服务架构风格的应用栈. 环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里) 应用栈名称:appstack 认证微服务: uaa 业 ...
- “全栈2019”Java第四十三章:封装
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群
庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介 前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
随机推荐
- WEBPACK简介
Webpack 是一个强力的模块打包器. 所谓 包 (bundle) 就是一个 JavaScript 文件,它把一堆 资源 (assets) 合并在一起,以便它们可以在同一个文件请求中发回给客户端. ...
- IOS开发者账号申请记录
1. 准备好一个企业邮箱 .企业营业执照复印件.一张可以支付的VISA或者MasterCard 2. 2016/01/13 注册appid https://developer.apple.com/pr ...
- 关于MAC
以太LAN网中发送的分组称做帧,包含7个字段 MAC帧格式 前同步码 SFD DA SA 长度或类型 数据域 CRC 7字节,物理层加入 帧首定界符,1字节 目的地址,6字节 源地址,6字节 2字节 ...
- subline text3 删除行 快捷键设置
打开 首选项-->按键绑定 { "keys": ["ctrl+shift+k"], "command": "run_macr ...
- Webservice接口
快递查询接口 http://webservice.36wu.com/ExpressService.asmxip查询接口 http://webservice.36wu.com/ipService.asm ...
- asp.net mvc4 Html.BeginForm表单提交
默认是get提交,如果是post提交需要在控制器ActionResult上加:[AcceptVerbs(HttpVerbs.Post)] 举例: 在HelpController中,会定义如下的Acti ...
- js部分总结
1 currentStyle 可以获取行间样式,但是不兼容 其他浏览器用getComputedStyle(div,null)这个ie低级版本不兼容; if(div.currentStyle){ } e ...
- 查找jsp页面报错技巧
在报错跳转页面打印错误信息<div>系统执行发生错误,信息描述如下:</div> <div>错误状态代码是:${pageContext.errorData.stat ...
- php开发环境
php一般使用xampp(apache+mysql+php+perl)部署,下载地址https://www.apachefriends.org/zh_cn/index.html.本文不用集成包,搭建P ...
- 分析一个类似于jquery的小框架
在网上下了一个类似于jQuery的小框架,分析源码,看看怎么写框架. 选择器Select //用沙箱闭包其整个代码,只有itcast和I暴漏在全局作用域 (function( window , und ...