1. 程式人生 > >Git+Spring-boot+Docker+ Maven +Registry私有倉庫 +jenkins 持續整合測試

Git+Spring-boot+Docker+ Maven +Registry私有倉庫 +jenkins 持續整合測試

第一步 pull docker-registry

#:docker pull registry
//   此/opt/data/registry目錄為私有倉庫映象宿主機對映目錄
#:/usr/bin/docker -d -v -v /opt/data/registry:/tmp/registry --insecure-registry 222.27.196.8:5000

第二步 build jekins映象

建立一個包容以下內容的Dockerfile:

FROM jenkins

USER root
RUN apt-get update \
  && apt-get install -y sudo \
  && rm -rf /var/lib/apt/lists/*
RUN echo "jenkins ALL=NOPASSWD: ALL"
>> /etc/sudoers USER jenkins COPY plugins.txt /usr/share/jenkins/plugins.txt RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt

我們需要賦予jenkins使用者sudo許可權以便能在容器內執行Docker命令。當然,也可以將jenkins使用者加入到Docker組中來避免在所有Docker命令前使用‘sudo’,不過由於這個組gid的不同會造成不可移植(如Pini文中所述)。

最後兩行用於處理plugins.txt檔案中定義的外掛。如果你不需要任何外掛可以忽略這兩行,不過我推薦至少包括如下內容:

$ cat plugins.txt
scm-api:latest
git-client:latest
git:latest
greenballs:latest

如果不想安裝任何外掛,可建立個空檔案或將相關指令從Dockerfile中刪除。本文並不需要上述外掛。

現在來構建並執行容器,將Docker socket和程式對映進來。

$ docker build -t myjenkens.
...
Successfully built 471fc0d22bff
$ docker images

第四步 啟動myjenkins容器

/home/jenkins_home 目錄為jenkins的主目錄本地對映, 只有這樣jenkins容器幹掉後,資料才不會丟失

#: docker run -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v /lib64/libdevmapper.so.1.02:/usr/lib/libdevmapper.so.1.02 -v /lib64/libsystemd.so.0:/usr/lib/libsystemd.so.0 -v /lib64/libgcrypt.so.20:/usr/lib/libgcrypt.so.20 -v /lib64/libudev.so.0:/usr/lib/libudev.so.0 -v /home/jenkins_home:/var/jenkins_home  myjenkins

第五步 jenkins設定

經過上面的配置,你可以訪問你的Jenkins了,在瀏覽器中輸入:http://your server ip:8080/,效果如下:

img

按照提示我們執行cat /var/lib/jenkins/secrets/initialAdminPassword得到Administrator password,注意var 要改成home ,輸入後點擊Continue,如下:

img

設定初始賬戶和密碼

img

設定完成後進入介面:

img

下載其它外掛

系統管理 –>管理外掛
在可選外掛中下載如下兩個外掛
這裡寫圖片描述
這裡寫圖片描述

配置Publish Over SSH

系統管理 –> 系統設定 –>Publish over SSH

這裡寫圖片描述

配置GitHub Plugin

系統管理 –> 系統設定 –> GitHub –> Add GitHub Sever

如下圖所示

img

API URL 輸入 https://api.github.com,Credentials點選Add新增,Kind選擇Secret Text,具體如下圖所示。

img

設定完成後,點選TestConnection,提示Credentials
verified for user UUserName, rate limit: xxx
,則表明有效。

第六步 github配置

sercret text

注:此處需要一個對專案有寫許可權的賬戶

進入github –> setting –> Personal Access Token –> Generate new token

img

img

自己先儲存此token,如果丟失,之後再也無法找到這個token

GitHub webhooks 設定

進入GitHub上指定的專案 –> setting –> WebHooks&Services –> add webhook –> Payload URL為下圖要求

這裡寫圖片描述
這部分內容等到在jenkins新增任務時會遇到 這裡大家可以回頭再配
img
jenkins 中點開使用者, 拿到api token 最後Payload URL 完整寫法是

http://userName:userApiToken@JENKENINS_URL/job/projectName?build?token=APITOKEN

這裡寫圖片描述

第七步 構建一個maven專案

這裡寫圖片描述
配置此專案
這裡寫圖片描述
這裡寫圖片描述

  1. 填寫專案的git地址, eg. https://github.com/your_name/your_repo_name.git
  2. 新增github使用者和密碼
  3. 選擇githubweb原始碼庫瀏覽器,並填上你的專案URL,這樣每次構建都會生成對應的changes,可直接鏈到github上看變更詳情

-設定鉤子token,觸發遠端構建
通過鉤子 只要Github有push操作就會自動構建, 這裡token就是上面的在Github配置的token=?
這裡寫圖片描述
- 構建觸發器,構建環境

這裡寫圖片描述

- maven build 設定
這裡寫圖片描述
- maven 通過ssh 遠端部署設定
這裡寫圖片描述
引數說明:

  1. Transfer SetSource files:表示要上傳的本地的jar包及路徑,可到工作空間去看。

  2. Remove prefix:表示要上傳時要去除的資料夾,即只上傳jar包。

  3. remote driectory:即表示執行時的路徑,相當於把jar包上傳到這裡了。這裡的base dirPublish Over SSH 設定的/jenkins_release

  4. exec commad:要執行的命令指令碼。

指令碼deploy.sh

#!/bin/sh
REGISTRY_URL=222.27.196.8:5000
cd /jenkins_release
cp *.jar /opt/jenkinsWeb/release
cd /opt/jenkinsWeb/release
path=`pwd`
echo $path
if docker images | grep ${REGISTRY_URL}/eureka-registry
        then
                docker rmi ${REGISTRY_URL}/eureka-registry
fi
docker build -t ${REGISTRY_URL}/eureka-registry .
docker push  ${REGISTRY_URL}/eureka-registry
if docker ps -a | grep -i eureka-registry
 then
        docker rm -f eureka-registry
fi
docker create --name eureka-registry ${REGISTRY_URL}/eureka-registry
sh /opt/jenkinsWeb/bin/bootstrap.sh
~                                    

最後點選儲存即可
可以看到把通過ssh傳過來的jar 扔到 /opt/jenkinsWeb/release 目錄, 此目錄下還有個Dockerfile 用來構建Spring-boot 應用映象。內容:

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD kitty-eureka-registry.jar app.jar

ENV JAVA_OPTS="-Dlogging.path=/var/log"
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]                                                                                  

- 構建後操作

img

第八步 測試構建效果:

-可以用curl 模擬

curl -s -u cbam:c4118bbe83b80a855eafc7939fd0xxxx -X POST http://222.27.196.8:8080/job/eureka-registry/build?token=yyyyy

如果出現Error 403 No valid crumb was included in the request錯誤, 在jenkins 全域性安全設定中取消 對 防止跨站點請求偽造 的勾選
這裡寫圖片描述
-或著直接在IDEA 中直接編輯專案並push 到remote ,看效果已經開始構建:
這裡寫圖片描述
-Github效果
-測試效果1

img

-測試效果2

img

參考