今天搞了一下Jenkins和Docker的結合,我在想幾個問題:
- 構建是經常的,構建最大的目標還是生成一個包或者應用
- 發布應用也是頻繁的,發布本質上是把這個包放到可運行的環境中便於測試
- 如果每次構建我們都需要去Build一個環境,包括配置連接池等和應用相關的資源的話,那就太消耗時間和CPU了
- 在日常項目中更多的變動應該還是在代碼上,因此考慮的就是把針對某個項目的環境發布成一個images,然后基於這個images進行應用代碼的發布。
基於這種考慮就沒必要每次構建通過Jenkins基於Dockfile去build image,而應該盡量采用事先構建的images模板。
把Jenkins作為kubernetes pod來用今天也嘗試了一下,無奈虛擬環境性能不行放棄,我個人感覺放在kubernetes集群外運行就可以了,沒必要放進去作為Pod來統一管理。
Kubernetes還是專門作為一個應用運行環境,而不是發布構建持續集成的環境比較好點 :)
基於上次的maven project,改造了一下把應用部署到kubernetes環境中的WebLogic Pod。當然只能做功能測試,如果性能測試的話,我還要考慮考慮。
項目的腳本部分改動

project=easy-springmvc-maven war_name=easy-springmvc-maven.war war_path=http://192.168.0.104:8080/jenkins/job/jeekins-test/ws/target file_path=/home/ericnie/.jenkins/workspace/jenkins_test/target/ now=$(date +"%Y%m%d%H%M%S") echo "============begin weblogic pod check========" echo "the shell execute time is ${now}" weblogic_num=`kubectl get pods | grep helloworld-service | wc -l` if [ "${weblogic_num}" == "1" ]; then kubectl delete -f /home/ericnie/rc.yaml echo "delete the weblogic pod" fi sleep 20s echo "==========create weblogc pod===========" kubectl create -f /home/ericnie/rc.yaml sleep 10s weblogic_ip=`kubectl get pods -o wide | grep helloworld-service | grep Running | awk '{for(i =1; i <=NF; i++){ if($i~/[0-9]\.[0-9]/) print $i}}'` echo "weblogic ip is ${weblogic_ip}" sleep 60s echo "==========deploy the application========" java -cp /home/ericnie/Middleware/wlserver/server/lib/weblogic.jar weblogic.Deployer -adminurl t3://${weblogic_ip}:7001 -user weblogic -password welcome1 -name ${war_name} -targets AdminServer -deploy -upload -source ${file_path}/${war_name} echo "=========job finish,you can acess!======"
jenkins console輸出
[jenkins_test] $ /bin/sh -xe /tmp/jenkins7532164656453389066.sh + project=easy-springmvc-maven + war_name=easy-springmvc-maven.war + war_path=http://192.168.0.104:8080/jenkins/job/jeekins-test/ws/target + file_path=/home/ericnie/.jenkins/workspace/jenkins_test/target/ ++ date +%Y%m%d%H%M%S + now=20171031153657 + echo '============begin weblogic pod check========' ============begin weblogic pod check======== + echo 'the shell execute time is 20171031153657' the shell execute time is 20171031153657 ++ kubectl get pods ++ grep helloworld-service ++ wc -l + weblogic_num=1 + '[' 1 == 1 ']' + kubectl delete -f /home/ericnie/rc.yaml replicationcontroller "helloworld-service" deleted service "helloworldsvc" deleted + echo 'delete the weblogic pod' delete the weblogic pod + sleep 20s + echo '==========create weblogc pod===========' ==========create weblogc pod=========== + kubectl create -f /home/ericnie/rc.yaml replicationcontroller "helloworld-service" created service "helloworldsvc" created + sleep 10s ++ kubectl get pods -o wide ++ grep helloworld-service ++ grep Running ++ awk '{for(i =1; i <=NF; i++){ if($i~/[0-9]\.[0-9]/) print $i}}' + weblogic_ip=10.0.35.3 + echo 'weblogic ip is 10.0.35.3' weblogic ip is 10.0.35.3 + sleep 60s + echo '==========deploy the application========' ==========deploy the application======== + java -cp /home/ericnie/Middleware/wlserver/server/lib/weblogic.jar weblogic.Deployer -adminurl t3://10.0.35.3:7001 -user weblogic -password welcome1 -name easy-springmvc-maven.war -targets AdminServer -deploy -upload -source /home/ericnie/.jenkins/workspace/jenkins_test/target//easy-springmvc-maven.war weblogic.Deployer invoked with options: -adminurl t3://10.0.35.3:7001 -user weblogic -name easy-springmvc-maven.war -targets AdminServer -deploy -upload -source /home/ericnie/.jenkins/workspace/jenkins_test/target//easy-springmvc-maven.war <Oct 31, 2017 3:38:35 PM CST> <Info> <J2EE Deployment SPI> <BEA-260121> <Initiating deploy operation for application, easy-springmvc-maven.war [archive: /home/ericnie/.jenkins/workspace/jenkins_test/target/easy-springmvc-maven.war], to AdminServer .> Task 0 initiated: [Deployer:149026]deploy application easy-springmvc-maven.war on AdminServer. Task 0 completed: [Deployer:149026]deploy application easy-springmvc-maven.war on AdminServer. Target state: deploy completed on Server AdminServer + echo '=========job finish,you can acess!======' =========job finish,you can acess!====== Finished: SUCCESS
歡迎提出意見探討。
