Jenkins 搭建 Spring Cloud Maven 自動打包

一、什麼是Jenkinshtml

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

二、Jenkins 的優勢java

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

三、什麼是持續集成(CI)linux

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

四、持續集成特色git

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

五、持續集成做用web

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

六、Jenkins 應用場景docker

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

七、Jenkins 如何安裝 下面借用 別人博客:http://www.javashuo.com/article/p-uwnlsnfu-mq.htmlshell

 

下面開始 記錄博客內容數據庫

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

一、由於每次都根據commitId 下載的代碼 那麼須要在執行以前刪除掉 歷史文件服務器

 

二、執行 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

相關文章
相關標籤/搜索