Jenkins 搭建 Spring Cloud Maven 自動打包

1、什麼是Jenkins

  • Jenkins是一個開源軟件項目,是基於Java開發的一種自動化測試和持續集成、發佈工具。

2、Jenkins 的優點

  • 易安裝:僅僅一個 java -jar jenkins.war,從官網下載該文件後,直接運行,無需額外的安裝,更無需安裝數據庫;
  • 易配置:提供友好的GUI配置界面;
  • 變更支持:Jenkins能從代碼倉庫(Subversion/CVS)中獲取併產生代碼更新列表並輸出到編譯輸出信息中;
  • 支持永久鏈接:用戶是通過web來訪問Jenkins的,而這些web頁面的鏈接地址都是永久鏈接地址,因此,你可以在各種文檔中直接使用該鏈接;
  • 集成E-Mail/RSS/IM:當完成一次集成時,可通過這些工具實時告訴你集成結果(據我所知,構建一次集成需要花費一定時間,有了這個功能,你就可以在等待結果過程中,幹別的事情);
  • JUnit/TestNG測試報告:也就是用以圖表等形式提供詳細的測試報表功能;
  • 支持分佈式構建:Jenkins可以把集成構建等工作分發到多臺計算機中完成;
  • 文件指紋信息:Jenkins會保存哪次集成構建產生了哪些jars文件,哪一次集成構建使用了哪個版本的jars文件等構建記錄;
  • 支持第三方插件:使得 Jenkins 變得越來越強大;

3、什麼是持續集成(CI)

  • 隨着軟件開發複雜度的不斷提高,團隊開發成員間如何更好地協同工作以確保軟件開發的質量已經慢慢成爲開發過程中不可迴避的問題。尤其是近些年來,敏捷(Agile) 在軟件工程領域越來越紅火,如何能在不斷變化的需求中快速適應和保證軟件的質量也顯得尤其的重要。
  • 持續集成正是針對這一類問題的一種軟件開發實踐。它倡導團隊開發成員必須經常集成他們的工作,甚至每天都可能發生多次集成。而每次的集成都是通過自動化的構建來驗證,包括自動編譯、發佈和測試,從而儘快地發現集成錯誤,讓團隊能夠更快的開發內聚的軟件。

4、持續集成特點

  • 它是一個自動化的週期性的集成測試過程,從檢出代碼、編譯構建、運行測試、結果記錄、測試統計等都是自動完成的,無需人工干預;
  • 需要有專門的集成服務器來執行集成構建;
  • 需要有代碼託管工具支持;

5、持續集成作用

  • 保證團隊開發人員提交代碼的質量,減輕了軟件發佈時的壓力;
  • 持續集成中的任何一個環節都是自動完成的,無需太多的人工干預,有利於減少重複過程以節省時間、費用和工作量;

6、Jenkins 應用場景

  • 持續、自動地構建/測試軟件項目。
  • 監控一些定時執行的任務。

7、Jenkins 如何安裝 下面借用 別人博客:https://www.cnblogs.com/hanmk/p/6808932.html

 

下面開始 記錄博客內容

  項目要求 根據 commitId 下載git 代碼 (沒有找到具體 jenkins 插件 所以全使用shell編寫腳本完成功能)

1、因爲每次都根據commitId 下載的代碼 那麼需要在執行之前刪除掉 歷史文件

 

2、執行 Shell 別忘了 代碼開始加上( #!/bin/bash -x 代表這是shell腳本 )

#!/bin/bash -x
HARBOR_IP='192.168.155.100:8082'         # 鏡像名字
REPOSITORIES='projectName'               # 項目名字
HARBOR_USER=''                           # 私服賬號
HARBOR_USER_PASSWD=''                    # 私服密碼
WORKSPACE='/var/lib/jenkins/workspace/'  # linux 路徑
DOCKER_TAG=''                            # docker tag
GIT_ACCOUNT=''                           # git賬號
GIT_PWD=''                               # git密碼

echo 讀取/var/rc下配置文件                 # 我在linux服務器上放了個配置文件
#切換到根目錄
cd /
#切換到配置文件目錄
cd /var/rc
#讀取第一行內容
CONFIG_LINE_CONTENT=$(sed -n 4p project_config.txt)
#截取需要的內容
#項目名字
PROJECT_NAME=${CONFIG_LINE_CONTENT%%|*}
#截取左面第一個|之後所有內容
LINE=${CONFIG_LINE_CONTENT#*|}
#分支
BRANCH=${LINE%%|*}
#截取左面第一個|之後所有內容
LINE=${LINE#*|}
#commitID
GIT_COMMIDIT=${LINE%%|*}

#覈對項目名字
if [ ${} == '' ]; then               

  echo 下載 projectName 項目代碼 --- start
  #切換工作目錄
  cd /
  cd /var/lib/jenkins/workspace/projectName
  echo 創建倉庫
  git init
  echo 克隆master分支代碼
  git clone -b ${BRANCH} http://${GIT_ACCOUNT}:${GIT_PWD}。。。。。。.git
  echo 下載 commitid 之前所有代碼
  git checkout ${GIT_COMMIDIT}
  echo 下載  項目代碼 --- end

  echo 打包rc-ts-vo --- start
  echo 切換目錄到pom所在文件夾
  cd /
  cd /var/lib/jenkins/workspace/
  mvn clean install 
  echo 打包rc-ts-vo --- end
  
  #echo 上傳rc-ts-vo --- start
  #mvn clean deploy -U
  #echo 上傳rc-ts-vo --- end
  
  echo 打包rc-ts-client --- start
  echo 切換目錄到pom所在文件夾
  cd ..
  cd rc-ts-client
  mvn clean install 
  echo 打包rc-ts-client --- end
  
  #echo 上傳rc-ts-client --- start
  #mvn clean deploy -U
  #echo 上傳rc-ts-client --- end

    echo 操作docker私服 ---開始
    echo 切換目錄
    cd projectName
    #DOCKER_TAG=$(cat version.txt)
    DOCKER_TAG='v1.3'
    echo 項目構建docker鏡像之前先打成jar包
    mvn clean install 
    echo 拉取鏡像,發佈
    echo docker 私有倉庫登錄
    docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}
    echo docker 打成鏡像
    docker build -t ${HARBOR_IP}/${REPOSITORIES}:${DOCKER_TAG} .
    echo docker 推送到私服
    docker push ${HARBOR_IP}/${REPOSITORIES}:${DOCKER_TAG}
    echo 操作docker私服 ---結束


 



fi

以上是jenkins 操作 linux、git、docker 全部代碼 下面貼上我利用插件 操作遠程服務器上docker容器

找到Jenkins 插件 Execute shell script on remote host using ssh 

SSH site 這是目標主機 需要在系統設置裏面設置

Command 這是在目標主機上執行的shell

#!/bin/bash -x

REPOSITORIES='projectName'
HARBOR_IP='192.168.155.100:8082'
WORKSPACE='/var/lib/jenkins/workspace/'
DOCKER_TAG='vyhj'

# Stop container, and delete the container.
CONTAINER_ID=`docker ps | grep ${REPOSITORIES} | awk '{print $1}'`
echo 容器ID ${CONTAINER_ID}
if [ -n "${CONTAINER_ID}" ]; then
docker stop ${CONTAINER_ID}
docker rm ${CONTAINER_ID}
else #如果容器啓動時失敗了,就需要docker ps -a才能找到那個容器
CONTAINER_ID_IAMGES=`docker ps -a | grep ${REPOSITORIES} | awk '{print $1}'`
if [ -n "${CONTAINER_ID_IAMGES}" ]; then  # 如果是第一次在這臺機器上拉取運行容器,那麼 
docker ps -a也是找不到這個容器的
docker rm ${CONTAINER_ID_IAMGES}
fi
fi

 # Delete godseye_web image early version.
IMAGE_ID=`docker images | grep ${REPOSITORIES} | awk '{print $3}'`

echo 鏡像ID ${IMAGE_ID}

if [ -n "${IMAGE_ID}" ]; then
docker rmi ${IMAGE_ID}
fi

echo 私有倉下載鏡像
# Pull image.
docker pull ${HARBOR_IP}/${REPOSITORIES}:${DOCKER_TAG}

echo 創建容器

# Run.
docker run -d --name ${REPOSITORIES} -p 9003:9003 ${HARBOR_IP}/${REPOSITORIES}:${DOCKER_TAG}

最後貼上一個 我讀取 commitId、項目名、分支名 文件格式

projectName|master|7ecb342f56e67cdfa6f05ea29aff5578840dffbd|end

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章