Jenkins和Docker以及Kubernetes結合考慮


今天搞了一下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

 

歡迎提出意見探討。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM