第四十三章微服務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
相關文章
- 達芬奇密碼 第四十三章密碼
- 微服務架構 | 5. 服務容災微服務架構
- 5款Java微服務開源框架Java微服務框架
- 微服務5:服務註冊與發現(實踐篇)微服務
- Laravel 5 使用 Grpc 構建的微服務LaravelRPC微服務
- 劃分微服務邊界的5個特徵微服務特徵
- 微服務2:微服務全景架構微服務架構
- 微服務03 微服務sentinel, springcloudgateway微服務SpringGCCloudGateway
- .NET Core/.NET5/.NET6 開源專案彙總6:框架與架構設計(DDD、雲原生/微服務/容器/DevOps/CICD等)專案框架架構微服務dev
- SpringCloud微服務系列(5): 服務容錯斷路器HystrixSpringGCCloud微服務
- 微服務微服務
- 5 種微服務閘道器,該選哪個?微服務
- 微服務進展緩慢的 5 個難點微服務
- 微服務1:微服務及其演進史微服務
- CICD 入門指北
- 微服務思考(01):什麼是微服務?微服務的優勢和劣勢微服務
- 微服務架構(一):什麼是微服務微服務架構
- 【微服務目錄】.NET Core 微服務介紹微服務
- 第四十三章: 基於SpringBoot & RabbitMQ完成TopicExchange分散式訊息消費Spring BootMQ分散式
- 一起玩轉微服務(5)——分層架構微服務架構
- 成功備戰微服務的5個準備步驟微服務
- Go Micro(5)——架構與微服務的設計模式Go架構微服務設計模式
- [翻譯]微服務設計模式 - 5. 服務發現 - 服務端服務發現微服務設計模式服務端
- 微服務思想微服務
- 理解微服務微服務
- .NET 微服務微服務
- go微服務Go微服務
- 微服務部署微服務
- go 微服務Go微服務
- 搭建微服務微服務
- 微服務架構:構建PHP微服務生態微服務架構PHP
- 微服務指南走北(一):微服務是什麼微服務
- 小白入門微服務(0) - 什麼是微服務微服務
- Java微服務 vs Go微服務,究竟誰更強!?Java微服務Go
- 微服務17:微服務治理之異常驅逐微服務
- 【虹科乾貨】5個關於微服務的誤解微服務
- 阿里雲微服務引擎 MSE 5 月產品動態阿里微服務
- 微服務思考(02):微服務實施前有哪些問題?微服務