CI/CD平臺的做用我就再也不囉嗦了。如今又比較流行docker容器化(快速,環境無縫切換等做用),因此世面上尚未一套成型的,固定的套件來拱企業快速搭建本身的CI/CD平臺(花錢買服務的除外),docker雲也更是五花八門,DaoCloud,Swarm等。做者有幸參加了公司的CI/CD平臺搭建,從無到有的作了一套持續集成持續交付平臺,算上大體接近尾聲了。這裏分享一下,閱讀此博文須要如下知識儲備與要求:java
文章結構web
做者在上家公司着手作了一套基於Shell腳本的CI平臺,這裏再也不囉嗦,只簡單放一張圖: spring
重頭戲來了。基於Shell腳本的部署其實仍是能解決通常企業的CI需求,然而,對於微服務架構的多工程快速部署,平臺無關性,就須要容器化部署了。 同理,上一張圖: docker
下面開始一步一步的講解:架構
說白了,就是代碼提到Gitlab,在Gitlab配置一個webhook像Jenkins發送一個請求,Jenkins收到這個請求後就會開始執行構建。固然了,Jenkins裏是依賴的Gitlab plugin插件來支持這個功能的。參考博文:Gitlab plugin使用app
這一步是最繁瑣的,也是要重點講的,這裏涉及到不少配置。首先須要說一下的是,我這裏的Jenkins是物理部署的。這一步Jenkins的配置我會在最後貼出來。Jenkins在這一步裏執行構建(clean install)後打包好工程後自動根據插件curl
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
複製代碼
依賴一個事先準備好的Dockerfile構建出docker鏡像並推送到遠程Habor. 這一步須要注意以下配置:maven
<build>
<resources>
<resource> //必需要轉換一下,由於Dockerfile裏有內置變量須要轉換
<directory>src/main/docker</directory>
<filtering>true</filtering>
<includes>
<include>**/Dockerfile</include>
</includes>
<targetPath>../docker</targetPath>
</resource>
<!--注意這裏必定要把resources目錄下的配置文件引進去,而且不要指定targetPath-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<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>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<serverId>docker-private-registry</serverId>
<registryUrl>${docker.repostory}</registryUrl>
<pushImage>true</pushImage>
<imageName>
${docker.repostory}/${docker.registry.name}/${project.artifactId}
</imageName>
<dockerDirectory>
${project.build.directory}/docker
</dockerDirectory>
<resources>
<rescource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</rescource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
複製代碼
這裏須要指出的是,docker-private-registry這一行,必定要在本身maven的setting文件裏配置上本身Harbor和帳號密碼。spring-boot
<server>
<id>docker-private-registry</id>
<username>zdy</username>
<password>****</password>
<configuration>
<email>something@qq.com</email>
</configuration>
</server>
複製代碼
給個參考博文(建議你們用個人配置,參考博文真的只能參考,不少錯誤):spotify插件微服務
而後給下本身的srm/main/docker目錄下的Dockerfile
FROM anapsix/alpine-java:8
ENV APP_NAME @project.build.finalName@.@project.packaging@
# 後期更改成日誌目錄,將日誌掛載出來
VOLUME /tmp
#默認工做目錄/
ADD $APP_NAME /app.jar
EXPOSE 8070
ENTRYPOINT ["java","-jar","/app.jar"]
複製代碼
上面的具體配置我就不一一講了,由於很複雜,像dockerfile裏的內置變量轉換不出來什麼的,你們就多參考參考個人配置,配置都是整理了很長時間纔出來的,仍是那句老話,只講思路,具體配置你們多參考其餘文章,思路出來了,慢慢的就能夠摸索出來。
按照上面的配置後,jenkins構建算是完成了,咱們新構建的docker鏡像也推送到了遠程的HarBor私服鏡像庫。這時就要執行CURL指令來觸發Rancher拉取鏡像部署了。 下面給一下我jenkins的截圖。
至於CURL後面如何寫的,Rancher官網webhook,須要事先在Rancher的webhook配置,生成一些參數,而後curl.我就很少講了,你們自行看官網。 Rancher WebHook講的比較草率,可能不少人很矇蔽,其實這篇博文的精華就是開頭那一張圖,按照圖中的思路摸索摸索就大體能夠出來,爲何做者不肯意詳講呢,由於說實在的配置這個東西太麻煩了,不少配置很複雜,都須要本身摸索。我也只能提一提思路。
效果我就不演示,提交完代碼後,在Jenkins構建好鏡像自動推送到Harbor,而後Curl Ranche的WebHook,觸發Rancher拉取最新鏡像並部署。 Over, Have a good day .