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