第四十三章微服務CICD(5)-gitlab+jenkins+docker+dockerregsitry

店家小二發表於2018-12-18

一、總體流程

部署:

  • 開發機(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安裝

四、gitlab通知jenkins進行構建

五、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

七、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


相關文章