站長資訊網
最全最豐富的資訊網站

Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

* 環境:
CentOS7
代碼倉庫:Gitlab
持續集成代碼更新:Jenkins
構建打包:Maven
鏡像自動交付腳本:Shell

基礎環境軟件安裝:Gitlab、Jenkins、Maven配置,安裝參考網上,這里安裝略,重點介紹項目持續集成和鏡像交付。
結合上一博文:http://www.hospitaldelafe.com/Linux/2019-02/157106.htm
這里配置了兩個基礎服務容器的自動化構建,一個常規業務服務容器的自動化構建,其他的容器服務持續集成類似操作,這不做重復操作。


* 創建基礎持續集成項目-config

1.1 創建自由風格的軟件項目-Job,創建config-tmp-release
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

1.2 創建maven項目-Job,創建基礎項目config-tmp-ms
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

1.3 配置config-tmp-ms基礎項目
基于jdk8,配置config-tmp-ms項目Git代碼倉庫源,并選取release分支。
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例
配置關聯項目config-tmp-release:
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例
構建命令及構建后操作腳本:
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

1.4配置腳本
項目jar包同步腳本:/home/jenkins/docker-tmp/script/rsync.sh config-tmp-ms config-service

cat /home/jenkins/docker-tmp/script/rsync.sh  #!/bin/bash  ip=10.1.1.1  #docker tmp server  passwd=******  rsync -vzrtopg --numeric-ids --progress --password-file=/etc/rsyncd.password6 /home/jenkins/.jenkins/workspace/$1/target/alaxiaoyou-$2-0.0.1-SNAPSHOT.jar root@$ip::$1  expect /home/jenkins/docker-test/script/image.exp $ip $passwd $1 $2 $3

其中config-tmp-ms必須跟項目job名稱一樣。$1為此項目job名稱“config-tmp-ms”,$2為此項目代碼git@gitlab.alaxiaoyou.com:xxx/alaxiaoyou-config-service.git, provider:config-service。目的是自動替換各個provider配置。

expect腳本遠程觸發rancher服務器上腳本: /home/jenkins/docker-pro/script/image.exp

cat /home/jenkins/docker-pro/script/image.exp   #!/usr/bin/expect -f  set ipaddress [lindex $argv 0]  set passwd [lindex $argv 1]  set msname [lindex $argv 2]  set msnameb [lindex $argv 3]    spawn ssh name@$ipaddress;  expect "password:";  send "$passwdr";  expect "#"  send "sudo nohup /data/docker/layout-script/pro-all.sh $msname $msnameb  >> /data/docker/logs/$msname.log &r"  expect eof {exit 1}

rancher server服務器上腳本,構建,推送push到阿里鏡像倉庫:/data/docker/layout-script/pro-all.sh

#!/bin/bash  namems=$1  namemsb=$2  version=latest  msrepo=/data/docker/$1  imgrepo=xmbaby  imgname=$1    if [ ! -d $msrepo ];then    mkdir -p $msrepo    scp jenkins@10.1.1.1:~/.jenkins/workspace/$1/target/alaxiaoyou-$2-0.0.1-SNAPSHOT.jar $msrepo  echo "[$namems]" >> /etc/rsyncd.conf  echo "path=/data/docker/$namems/" >> /etc/rsyncd.conf  echo "comment = update  ignore errors  read only = no  list = no  hosts allow = 10.1.1.1/255.255.255.0  auth users = root  uid = root  gid = root  secrets file = /etc/rsyncd.secrets" >> /etc/rsyncd.conf    else    echo "開始構建docker鏡像"    fi    echo "FROM registry-internal.cn-hangzhou.aliyuncs.com/xmbaby-pre/ms-jdk8" > $msrepo/dockerfile  echo "MAINTAINER $namems "name@alaxiaoyou.com"" >> $msrepo/dockerfile  echo "ADD alaxiaoyou-$namemsb-0.0.1-SNAPSHOT.jar /data/httpd/" >> $msrepo/dockerfile  echo "WORKDIR /data/httpd/" >> $msrepo/dockerfile  echo "ENTRYPOINT java -Xmx512m -Xss512k -jar alaxiaoyou-$namemsb-0.0.1-SNAPSHOT.jar" >> $msrepo/dockerfile    cd $msrepo    docker build -t ms/$namems .    if [ $? -ne 0 ];then    echo "$namems 鏡像構建失敗,請檢查dockerfile !"  exit    else    imageid=`docker images |grep "ms/$namems" |awk '{print $3}'`  docker login --username=name@alaxiaoyou.com --password=****** registry-internal.cn-hangzhou.aliyuncs.com  docker tag $imageid registry-internal.cn-hangzhou.aliyuncs.com/$imgrepo/$imgname:$version  docker push registry-internal.cn-hangzhou.aliyuncs.com/$imgrepo/$imgname:$version    fi

1.5 構建操作
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

構建config-tmp-release項目,此項目執行完成后,自動構建關聯的下級項目config-tmp-ms,config-tmp-ms項目會Jenkins中自動拉取最新代碼,觸發rsync同步腳本,rsync腳本里觸發docker鏡像build和push操作。Jenkins最終構建完成后,即可將鏡像倉庫拉取最新交付的鏡像。


* 創建基礎持續集成項目-gateway

2.1 創建自由風格的軟件項目-Job,創建gateway-tmp-release
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

2.2 創建maven項目-Job,創建基礎項目gateway-tmp-ms
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

2.3 配置gateway-tmp-ms基礎項目
基于jdk8,配置gateway-tmp-ms項目Git代碼倉庫源,并選取release分支。
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

配置關聯項目gateway-tmp-release:
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

配置構建前操作腳本,構建命令,構建后操作腳本:
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

2.4配置腳本
構建前配置模板替換,配置成相應的provider,這里為gateway provider:
腳本:sh /home/jenkins/docker-tmp/script/configuration.sh gateway-tmp-ms api-gateway

cat /home/jenkins/docker-tmp/script/configuration.sh  #!/bin/bash  sed s/module/alaxiaoyou-$2/g  /home/jenkins/.jenkins/workspace/ms-tmp-configuration/module.yml > /home/jenkins/.jenkins/workspace/ms-tmp-configuration/bootstrap.yml  yes | cp -rfp /home/jenkins/.jenkins/workspace/ms-tmp-configuration/bootstrap.yml /home/jenkins/.jenkins/workspace/$1/src/main/resources/

其中gateway-tmp-ms必須跟項目job名稱一樣。$1為此項目job名稱“gateway-tmp-ms”,$2為此項目代碼git@gitlab.alaxiaoyou.com:xxx.git名稱”api-gateway”。目的是自動替換各個provider配置,接下來后面各個provider自動替換。

模板文件:

cat /home/jenkins/.jenkins/workspace/ms-tmp-configuration/module.yml  spring:    application:      name: module     cloud:      zookeeper:        connect-string: zookeeper1:2181,zookeeper2:2181,zookeeper3:2181      config:        uri: http://msconfig:20000

構建后配置,項目包(maven打包)同步腳本rsync,從git倉庫服務器拉取代碼打包后,包同步到docker-tmp服務器(rancher服務器)中:
項目jar包同步腳本:sh /home/jenkins/docker-tmp/script/rsync.sh gateway-tmp-ms api-gateway

cat /home/jenkins/docker-tmp/script/rsync.sh  #!/bin/bash  ip=10.1.1.1  #docker tmp server  passwd=******  rsync -vzrtopg --numeric-ids --progress --password-file=/etc/rsyncd.password6 /home/jenkins/.jenkins/workspace/$1/target/alaxiaoyou-$2-0.0.1-SNAPSHOT.jar root@$ip::$1  expect /home/jenkins/docker-tmp/script/image.exp $ip $passwd $1 $2 $3

expect腳本遠程觸發rancher服務器上腳本: /home/jenkins/docker-tmp/script/image.exp

cat /home/jenkins/docker-tmp/script/image.exp  #!/usr/bin/expect -f  set ipaddress [lindex $argv 0]  set passwd [lindex $argv 1]  set msname [lindex $argv 2]  set msnameb [lindex $argv 3]  set jvm [lindex $argv 4]    spawn ssh name@$ipaddress;  expect "password:";  send "$passwdr";  expect "#"  send "sudo nohup /data/docker/layout-script/all.sh $msname $msnameb $jvm  >> /data/docker/logs/$msname.log &r"

rancher server服務器上腳本,構建,推送push到阿里鏡像倉庫:/data/docker/layout-script/all.sh

#!/bin/bash  namems=$1  namemsb=$2  version=latest  msrepo=/data/docker/$1  imgrepo=xmbaby  imgname=$1    if [ ! -d $msrepo ];then    mkdir -p $msrepo    scp jenkins@10.1.1.1:~/.jenkins/workspace/$1/target/alaxiaoyou-$2-0.0.1-SNAPSHOT.jar $msrepo    echo "[$namems]" >> /etc/rsyncd.conf  echo "path=/data/docker/$namems/" >> /etc/rsyncd.conf  echo "comment = update  ignore errors  read only = no  list = no  hosts allow = 10.1.1.1/255.255.255.0  auth users = root  uid = root  gid = root  secrets file = /etc/rsyncd.secrets" >> /etc/rsyncd.conf    else    echo "開始構建docker鏡像"    fi    echo "FROM registry-internal.cn-hangzhou.aliyuncs.com/xmbaby-pre/ms-jdk8" > $msrepo/dockerfile  echo "MAINTAINER $namems "name@alaxiaoyou.com"" >> $msrepo/dockerfile  echo "ADD alaxiaoyou-$namemsb-0.0.1-SNAPSHOT.jar /data/httpd/" >> $msrepo/dockerfile  echo "WORKDIR /data/httpd/" >> $msrepo/dockerfile  echo "ENTRYPOINT java -Xmx512m -Xss512k -jar alaxiaoyou-$namemsb-0.0.1-SNAPSHOT.jar" >> $msrepo/dockerfile    cd $msrepo    docker build -t ms/$namems .    if [ $? -ne 0 ];then    echo "$namems 鏡像構建失敗,請檢查dockerfile !"  exit    else    imageid=`docker images |grep "ms/$namems" |awk '{print $3}'`  docker login --username=name@alaxiaoyou.com --password=****** registry-internal.cn-hangzhou.aliyuncs.com  docker tag $imageid registry-internal.cn-hangzhou.aliyuncs.com/$imgrepo/$imgname:$version  docker push registry-internal.cn-hangzhou.aliyuncs.com/$imgrepo/$imgname:$version    fi

2.5 構建操作
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

構建gateway-tmp-release項目,此項目執行完成后,自動構建關聯的下級項目gateway-tmp-ms,gateway-tmp-ms項目會Jenkins中自動拉取最新代碼,觸發rsync同步腳本,rsync腳本里觸發docker鏡像build和push操作。Jenkins最終構建完成后,即可將鏡像倉庫拉取最新交付的鏡像。


* 創建持續集成項目-sms

3.1 創建maven項目-Job,創建sms-tmp-release
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

3.2 配置ms-tmp-release項目
基于jdk8,配置sms項目Git代碼倉庫源,并選取release分支。
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

構建基于pom.xml進行構建
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

3.3 創建maven項目-Job,創建sms-tmp-ms
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

3.4 配置sms-tmp-ms項目
基于jdk8,配置sms項目Git代碼倉庫源,并選取release分支:
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

配置關聯項目sms-tmp-release:
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

配置構建前操作腳本,構建命令,構建后操作腳本:
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

3.5配置腳本
構建前配置模板替換,配置成相應的provider,這里為sms provider:
腳本:sh /home/jenkins/docker-tmp/script/configuration.sh sms-tmp-ms sms-provider

cat /home/jenkins/docker-tmp/script/configuration.sh sms-tmp-ms sms-provider  #!/bin/bash  sed s/module/alaxiaoyou-$2/g  /home/jenkins/.jenkins/workspace/ms-tmp-configuration/module.yml > /home/jenkins/.jenkins/workspace/ms-tmp-configuration/bootstrap.yml  yes | cp -rfp /home/jenkins/.jenkins/workspace/ms-tmp-configuration/bootstrap.yml /home/jenkins/.jenkins/workspace/$1/src/main/resources/

模板文件:

cat /home/jenkins/.jenkins/workspace/ms-tmp-configuration/module.yml  spring:    application:      name: module     cloud:      zookeeper:        connect-string: zookeeper1:2181,zookeeper2:2181,zookeeper3:2181      config:        uri: http://msconfig:20000

其中sms-tmp-ms必須跟項目job名稱一樣。$1為此項目job名稱“sms-tmp-ms”,$2為此項目代碼git@gitlab.alaxiaoyou.com:xxx.git名稱”sms-provider”。目的是自動替換各個provider配置。

構建后配置,項目包(maven打包)同步腳本rsync,從git倉庫服務器拉取代碼打包后,包同步到docker-tmp服務器(rancher服務器)中:
腳本:sh /home/jenkins/docker-tmp/script/rsync.sh sms-tmp-ms sms-provider 256m

cat /home/jenkins/docker-tmp/script/rsync.sh  sms-tmp-ms sms-provider 256m  #!/bin/bash  ip=10.1.1.1  #docker tmp server  passwd=******  rsync -vzrtopg --numeric-ids --progress --password-file=/etc/rsyncd.password6 /home/jenkins/.jenkins/workspace/$1/target/alaxiaoyou-$2-0.0.1-SNAPSHOT.jar root@$ip::$1  expect /home/jenkins/docker-test/script/image.exp $ip $passwd $1 $2 $3

Jenkins和rancher不在同一臺服務器行,用shell expect腳本遠程觸發rancher服務器上腳本:

cat /home/jenkins/docker-test/script/image.exp  #!/usr/bin/expect -f  set ipaddress [lindex $argv 0]  set passwd [lindex $argv 1]  set msname [lindex $argv 2]  set msnameb [lindex $argv 3]  set jvm [lindex $argv 4]    spawn ssh name@$ipaddress;  expect "password:";  send "$passwdr";  expect "#"  send "sudo nohup /data/docker/layout-script/all.sh $msname $msnameb $jvm  >> /data/docker/logs/$msname.log &r"  expect eof {exit 1}

rancher server服務器上腳本,構建,推送push到阿里鏡像倉庫:/data/docker/layout-script/all.sh

#!/bin/bash  namems=$1  namemsb=$2  version=latest  msrepo=/data/docker/$1  imgrepo=xmbaby  imgname=$1    if [ ! -d $msrepo ];then    mkdir -p $msrepo    scp jenkins@10.1.1.1:~/.jenkins/workspace/$1/target/alaxiaoyou-$2-0.0.1-SNAPSHOT.jar $msrepo    echo "[$namems]" >> /etc/rsyncd.conf  echo "path=/data/docker/$namems/" >> /etc/rsyncd.conf  echo "comment = update  ignore errors  read only = no  list = no  hosts allow = 10.1.1.1/255.255.255.0  auth users = root  uid = root  gid = root  secrets file = /etc/rsyncd.secrets" >> /etc/rsyncd.conf    else    echo "開始構建docker鏡像"    fi    echo "FROM registry-internal.cn-hangzhou.aliyuncs.com/xmbaby-pre/ms-jdk8" > $msrepo/dockerfile  echo "MAINTAINER $namems "name@alaxiaoyou.com"" >> $msrepo/dockerfile  echo "ADD alaxiaoyou-$namemsb-0.0.1-SNAPSHOT.jar /data/httpd/" >> $msrepo/dockerfile  echo "WORKDIR /data/httpd/" >> $msrepo/dockerfile  echo "ENTRYPOINT java -Xmx512m -Xss512k -jar alaxiaoyou-$namemsb-0.0.1-SNAPSHOT.jar" >> $msrepo/dockerfile    cd $msrepo    docker build -t ms/$namems .    if [ $? -ne 0 ];then    echo "$namems 鏡像構建失敗,請檢查dockerfile !"  exit    else    imageid=`docker images |grep "ms/$namems" |awk '{print $3}'`  docker login --username=name@alaxiaoyou.com --password=****** registry-internal.cn-hangzhou.aliyuncs.com  docker tag $imageid registry-internal.cn-hangzhou.aliyuncs.com/$imgrepo/$imgname:$version  docker push registry-internal.cn-hangzhou.aliyuncs.com/$imgrepo/$imgname:$version    fi

3.6 構建操作
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

構建sms-tmp-release項目,此項目執行完成后,自動構建關聯的下級項目sms-tmp-ms,sms-tmp-ms項目會Jenkins中自動拉取最新代碼,觸發rsync同步腳本,rsync腳本里觸發docker鏡像build和push操作。Jenkins最終構建完成后,即可將鏡像倉庫拉取最新交付的鏡像。

3.7 發布已構建鏡像
進入rancher控制臺

添加服務tmp-sms-ms:
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

映射卷:
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

點擊“創建”,選中“創建前總是拉取鏡像”,rancher便會分發任務至agent,進行最新鏡像的拉取。
其中鏡像為已在rancher宿主機上,進行手動鏡像構建交付到阿里云鏡像倉庫的。并非通過Jenkins自動構建交付到阿里云鏡像倉庫。

3.8 鏡像升級、回滾操作
升級步驟:
停止該服務正在運行的容器
拉取最新鏡像
運行新容器

回滾:
如果不單擊rancher控制臺右上角“Upgraded”,該服務可進行回滾操作。
rancher控制臺上方為“stopped”狀態的容器為舊容器,單擊“啟動”按鈕可進行回滾;
下方為“Running”狀態的容器為升級的容器,單擊右上角“Upgraded”按鈕可進行回滾;容器鏡像升級完成,舊容器銷毀。
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

3.9 阿里云鏡像倉庫交付的鏡像
Docker微服務-Jenkins+GitLab+Maven+Shell自動化構建實施案例

說明:以上配置了兩個基礎服務容器的持續交付,一個常規服務容器的持續交付,其他的容器服務持續交付類似操作,這不做重復操作。其中,構建、推送鏡像倉庫的腳本里對應的IP配置為生產環境地址,由于此次測試環境為內網,無外網IP。所以,涉及到鏡像的push操作無法操作成功。各個服務provider的打包,如要在Jenkins中自動操作,無法完成。所以,均從其他已打好包的服務器上拷貝過來,然后在rancher宿主機進行構建、推送push到阿里云鏡像倉庫。

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
亚洲午夜久久久精品影院| 国产亚洲精品不卡在线| 九九精品在线观看| 妇女自拍偷自拍亚洲精品| 亚洲精品字幕在线观看| 日韩精品人妻系列无码av东京| 亚欧人成精品免费观看| 精品视频在线观看你懂的一区 | 伊人久久精品一区二区三区| 中日精品无码一本二本三本| 国产精品国三级国产aⅴ| 99精品视频在线观看免费播放| 国产欧美日韩久久久久| 最新露脸国产精品视频| 亚洲精品无码永久中文字幕| 精品一区二区无码AV| 亚洲精品美女久久久久99小说| 国产欧美精品123区发布| 久热精品视频在线观看99小说| 久久国产日韩精华液的功效| 国产亚洲精品91| 国产日韩精品在线| 精品伊人久久大线蕉色首页| 自拍偷自拍亚洲精品情侣| 久久久久一级精品亚洲国产成人综合AV区| 国产精品成人va在线观看入口| 91精品国产自产在线观看永久∴| 精品伦精品一区二区三区视频| 亚洲一区二区三区国产精品| 午夜亚洲av永久无码精品| 精品久久久久久中文字幕一区 | 亚洲精品国产成人专区| 久久国产精品久久久久久久久久| xxxxbbbb国产精品| 久久精品青草社区| 久久亚洲私人国产精品| 9久久这里只有精品国产| 精品人妻伦一二三区久久| 精品日韩在线视频一区二区三区| 久久亚洲国产精品123区| 99精品国产在热久久|