第四十三章 微服务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
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.xxx</groupId> 8 <artifactId>myservice1-docker</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <properties> 12 <java.version>1.8</java.version><!-- 官方推荐 --> 13 <docker.registry>10.211.55.4:5000</docker.registry> 14 <push.image>true</push.image> 15 </properties> 16 17 <parent> 18 <groupId>org.springframework.boot</groupId> 19 <artifactId>spring-boot-starter-parent</artifactId> 20 <version>1.3.5.RELEASE</version> 21 </parent> 22 23 <!-- 引入实际依赖 --> 24 <dependencies> 25 <dependency> 26 <groupId>org.springframework.boot</groupId> 27 <artifactId>spring-boot-starter-web</artifactId> 28 </dependency> 29 <dependency> 30 <groupId>org.springframework.boot</groupId> 31 <artifactId>spring-boot-starter-actuator</artifactId> 32 </dependency> 33 </dependencies> 34 35 <build> 36 <plugins> 37 <plugin> 38 <groupId>org.springframework.boot</groupId> 39 <artifactId>spring-boot-maven-plugin</artifactId> 40 </plugin> 41 <plugin> 42 <groupId>com.spotify</groupId> 43 <artifactId>docker-maven-plugin</artifactId> 44 <version>0.4.13</version> 45 <configuration> 46 <imageName>${docker.registry}/${project.groupId}/${project.artifactId}:${project.version}</imageName> 47 <dockerDirectory>${basedir}/src/main/docker</dockerDirectory> 48 <pushImage>${push.image}</pushImage> 49 <resources> 50 <resource> 51 <!-- ${project.build.directory},项目构建输出目录,默认为target/ --> 52 <directory>${project.build.directory}</directory> 53 <!-- ${project.build.finalName},打包出来的jar名称,默认为${project.artifactId}-${project.version} --> 54 <include>${project.build.finalName}.jar</include> 55 </resource> 56 </resources> 57 </configuration> 58 </plugin> 59 </plugins> 60 </build> 61 </project>
View Code
说明:第三十八章 springboot+docker(maven)
2、Dockerfile
1 FROM 10.211.55.4:5000/zhaojigang/jdk8:c7_j8
2 3 ADD myservice1-docker-1.0-SNAPSHOT.jar app.jar
4 5 ENV JAVA_HOME /opt/jdk
6 ENV PATH $PATH:$JAVA_HOME/bin
7 8 CMD ["java","-jar","app.jar"]
View Code
说明:基础镜像是本地开发好的一个镜像,需要之后推到远程registry:docker push 10.211.55.4:5000/zhaojigang/jdk8:c7_j8
注意:实际上
1 FROM 10.211.55.4:5000/zhaojigang/jdk8:c7_j8
2 ADD myservice1-docker-1.0-SNAPSHOT.jar app.jar
不应该硬编码,应该写作
1 FROM @docker.registry@/zhaojigang/jdk8:c7_j8
2 ADD @project.build.finalName@.jar app.jar
但是暂时没成功!!!
3、HelloDockerController.java
1 package com.xxx.docker.myservice1.web;
2 3 import org.springframework.web.bind.annotation.RequestMapping;
4 import org.springframework.web.bind.annotation.RestController;
5 6 @RestController 7 @RequestMapping("/docker")
8 public class HelloDockerController {
9 @RequestMapping("/hello")
10 public String helloDocker(){
11 return "hello docker12!!!";
12 }
13 }
View Code
九、git提交代码
- git add --all
- git commit -m"xxx"
- git push origin HEAD:dev
之后,查看jenkins编译console,可以看到,会先打镜像,最后将镜像push到远程的registry中,供将来的机器去pull。
本文转自掘金-第四十三章 微服务CICD(5)- gitlab + jenkins + docker + dockerregsitry

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
kubernetes下jenkins 搭建实例
之前用Docker搭建过Jenkins,使用Ubuntu14的镜像,开通ssh后自己上传tomcat、jdk、jenkins包。所有东西都放到了容器里,整个容器体积会越来越大,不方便备份恢复数据。 最近开始测试kubernetes下自动化测试环境的搭建(参考:http://dockone.io/article/859)。 考虑到k8s的容器分散在各个机器上,不太方便ssh来ssh去,于是不再采用ssh的方法登录容器,而是直接把jenkins需要的软件环境放到物理机上(比如都在 /ceph/docker/下),通过volumeMounts把目录挂载到容器里。 即解决了容器体积大的难题,同时方便了修改配置,有什么需要修改的东西直接改物理容器上的即可,一经修改,所有容器都生效。 这应该是k8s下创建容器比较正规的方法,即所有应用数据都通过volumeMounts挂载到容器里来运行,镜像只提供一个应用运行的环境,这样做好处大大地。 rc_jenkins.yaml: apiVersion: v1 kind: ReplicationController metadata: name: rc-jen...
-
下一篇
开源监控利器Prometheus初探
前言: Kubernetes作为当下最炙手可热的容器管理平台,在给应用部署运维带来便捷的同时,也给应用及性能监控带来了新的挑战。本文给大家分享一款十分火热的开源监控工具Prometheus,让我们一起来看它是如何兼顾传统的应用监控、主机 性能监控和Kubernetes监控的。 目录: 一、Prometheus简介 二、Prometheus架构图 三、Prometheus架构详解 四、Prometheus监控Kubernetes 一、Prometheus简介 什么是Prometheus?Prometheus是一个开源的系统监控及告警工具,最初建设在SoundCloud。从2012 Prometheus推出以来,许多公司都采用它搭建监控及告警系统。同时,项目拥有非常活跃的开发者和用户社区。 它现在是一个独立于任何公司的开源项目,为了强调这一点并明确项目的管理结构,在2016年Prometheus加入CNCF基金会成为继Kubernetes之后的第二个托管项目。 Prometheus有什么特点? 多维的数据模型(基于时间序列的k/v键值对)。 灵活的查询及聚合语句(PromQL)。 不依赖分...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装Nodejs环境
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL数据库在高并发下的优化方案
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果