国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

云服務(wù)器|WEB服務(wù)器|FTP服務(wù)器|郵件服務(wù)器|虛擬主機(jī)|服務(wù)器安全|DNS服務(wù)器|服務(wù)器知識(shí)|Nginx|IIS|Tomcat|

服務(wù)器之家 - 服務(wù)器技術(shù) - 服務(wù)器知識(shí) - 構(gòu)建及部署jenkins pipeline實(shí)現(xiàn)持續(xù)集成持續(xù)交付腳本

構(gòu)建及部署jenkins pipeline實(shí)現(xiàn)持續(xù)集成持續(xù)交付腳本

2022-03-01 22:39kl 服務(wù)器知識(shí)

這篇文章主要為大家介紹了構(gòu)建及部署jenkins pipeline實(shí)現(xiàn)持續(xù)集成持續(xù)交付腳本,喲需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

構(gòu)建及部署jenkins pipeline實(shí)現(xiàn)持續(xù)集成持續(xù)交付腳本

前言

之前的文章中,已經(jīng)全面介紹過(guò)jenkins pipeline的特點(diǎn)及用途,以及實(shí)操了一把,將我們的構(gòu)建產(chǎn)物jar包丟到了目標(biāo)主機(jī)。這篇是接著上篇的實(shí)操,實(shí)現(xiàn)構(gòu)建即部署的腳本實(shí)現(xiàn)。會(huì)在之前的git clone(拉源碼),maven build(構(gòu)建),deploy jar(上傳jia包)的基礎(chǔ)上,在新增兩個(gè)步驟start app(啟動(dòng)服務(wù)),check health(檢查應(yīng)用健康),真正實(shí)現(xiàn)持續(xù)交付,持續(xù)集成。

新增的步驟腳本

stage("start app") {
            steps {
                script {
                    if ("production" == "${profile}") {
                        sshagent(credentials: ["deploy_token"]) {
                            sh "ssh it@192.1xx.0.96 "sh /home/deploy/start.sh > /dev/null 2>&1 &""
                            echo "xx系統(tǒng)192.1xx.0.96啟動(dòng)完成"
                        }
                    }
                    if ("uat" == "${profile}") {
                        echo "xx系統(tǒng)啟動(dòng)完成"
                    }
                }
            }
        }
        stage("check health") {
            steps {
                script {
                    def healthUrl = null
                    if ("production" == "${profile}") {
                        healthUrl = "https://api.xx.cn:8016/health"
                    }
                    if ("uat" == "${profile}") {
                        healthUrl = ""
                    }
                    echo "睡眠兩分鐘,待應(yīng)用完全準(zhǔn)備好"
                    Thread.sleep((long) 1000 * 60 * 2)//睡眠兩分鐘
                    def shellStr = sh(script: "curl ${healthUrl}", returnStdout: true)
                    def map = null
                    try {
                        echo "應(yīng)用健康檢查結(jié)果:${shellStr}"
                        map = new JsonSlurper().parseText(shellStr)
                    } catch (Exception e) {
                    }
                    if (map != null && "UP" == map.get("status")) {
                        echo "應(yīng)用健康運(yùn)行"
                    } else {
                        Thread.sleep((long) 1000 * 60 * 1)//睡眠1分鐘
                        shellStr = sh(script: "curl ${healthUrl}", returnStdout: true)
                        map = new JsonSlurper().parseText(shellStr)
                        if (map == null || "UP" != map.get("status")) {
                            throw new RuntimeException("應(yīng)用不穩(wěn)定,請(qǐng)檢查服務(wù)是否正常")
                        } else {
                            echo "應(yīng)用健康運(yùn)行"
                        }
                    }
                }
            }
        }

需要注意的點(diǎn):

關(guān)于執(zhí)行啟動(dòng)應(yīng)用腳本

  • 部署的腳本需要先在目標(biāo)主機(jī)寫(xiě)好,一般的如果應(yīng)用是部署在tomcat下的話,直接執(zhí)行關(guān)閉腳本,然后執(zhí)行啟動(dòng)腳本就好了。
  • 不過(guò)現(xiàn)在都是微服務(wù),spring boot這種應(yīng)用直接打成了jar了,需要使用nohup這種方式使進(jìn)程后臺(tái)運(yùn)行,如:nohup java -jar /home/xx-app.jar &。在jenkins中直接調(diào)用這種腳本的時(shí)候要注意。使用> /dev/null 2>&1 &將遠(yuǎn)程主機(jī)響應(yīng)重定向下,不然jenkins進(jìn)程會(huì)一直等待目標(biāo)主機(jī)的啟動(dòng)腳本進(jìn)程內(nèi)容輸出。

關(guān)于健康檢查

執(zhí)行啟動(dòng)應(yīng)用的腳本后,并不知道應(yīng)用是否真正的啟動(dòng)起來(lái)了。這個(gè)時(shí)候需要一個(gè)健康檢查機(jī)制檢查下應(yīng)用的健康狀況,這里涉及到一個(gè)小技巧以及兩種健康檢查的方式

線程休眠

jenkins的構(gòu)建步驟執(zhí)行到健康檢查時(shí),需要讓線程休眠1~2分鐘左右,等待應(yīng)用完全啟動(dòng)。第一次健康檢查如果失敗了,有可能是應(yīng)用沒(méi)有完全啟動(dòng),在休眠指定時(shí)間,如果還是失敗了,那么久判定這個(gè)應(yīng)用啟動(dòng)失敗,拋出異常,讓這次ci結(jié)束并標(biāo)記失敗

健康檢查方式

1.http接口的方式:如上,使用了應(yīng)用內(nèi)提供的一個(gè)健康檢查接口,去執(zhí)行http的接口,然后拿到結(jié)果判定,一般spring boot提供了健康檢查的接口, 只需要添加如下依賴(lài),spring-boot-starter-actuator,應(yīng)用就會(huì)多一個(gè)/health接口,如果應(yīng)用健康,會(huì)返回如下數(shù)據(jù)

構(gòu)建及部署jenkins pipeline實(shí)現(xiàn)持續(xù)集成持續(xù)交付腳本

2.檢查應(yīng)用運(yùn)行進(jìn)程:當(dāng)有些服務(wù)沒(méi)有使用http容器時(shí),如dubbo服務(wù)。需要使用檢查應(yīng)用進(jìn)程的方式來(lái)檢查應(yīng)用是否啟動(dòng)了,具體方式如下:

stage("check health") {
            steps {
                script {
                    def healthUrl = null
                    if ("production" == "${profile}") {
                        healthUrl = "ssh it@192.xxx.10.159 "ps -ef|grep xx-service""
                    }
                    if ("uat" == "${profile}") {
                        healthUrl = ""
                    }
                    echo "睡眠兩分鐘,待應(yīng)用完全準(zhǔn)備好"
                    Thread.sleep((long) 1000 * 60 * 1)//睡眠1分鐘
                    String shellStr = sh(script: "${healthUrl}", returnStdout: true)
                    echo "應(yīng)用健康檢查結(jié)果:${shellStr}"
                    if (shellStr.indexOf("/home/xx-service-1.0.0-") > 0) {
                        echo "應(yīng)用健康運(yùn)行"
                    } else {
                        Thread.sleep((long) 1000 * 60 * 1)//睡眠0.5分鐘
                        shellStr = sh(script: "${healthUrl}", returnStdout: true)
                        if (shellStr.indexOf("/home/xx-service-1.0.0-") > 0) {
                            echo "應(yīng)用健康運(yùn)行"
                        } else {
                            throw new RuntimeException("應(yīng)用不穩(wěn)定,請(qǐng)檢查服務(wù)是否正常")
                        }
                    }
                }
            }
        }

遇到的問(wèn)題及小技巧

小技巧:

可以將jenkinsfile文件加上.groovy的后綴,因?yàn)閖enkinsfile的腳本搬來(lái)就是Groovy實(shí)現(xiàn)的。然后在IDE里寫(xiě)腳本的時(shí)候就會(huì)有智能提示,而且會(huì)語(yǔ)法校驗(yàn)。記得在添加構(gòu)建任務(wù)的時(shí)候也加上.groovy,默認(rèn)是沒(méi)有的

問(wèn)題:

在聲明式的jenkinsfile寫(xiě)有些Groovy腳本會(huì)觸發(fā)jenkins的腳本執(zhí)行安全策略,而腳本模式下不會(huì)有這個(gè)問(wèn)題,因?yàn)槟_本模式可以選擇在Groovy沙箱中運(yùn)行,如:

構(gòu)建及部署jenkins pipeline實(shí)現(xiàn)持續(xù)集成持續(xù)交付腳本

具體的安全策略異常如下:

[Pipeline] // node
Scripts not permitted to use new java.lang.Object. Administrators can decide whether to approve or reject this signature.
[Pipeline] End of Pipeline
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use new java.lang.Object
	at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectNew(StaticWhitelist.java:184)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onNewInstance(SandboxInterceptor.java:148)
	at org.kohsuke.groovy.sandbox.impl.Checker$3.call(Checker.java:197)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedConstructor(Checker.java:202)
	at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.constructorCall(SandboxInvoker.java:21)
	at WorkflowScript.run(WorkflowScript:58)

解決方案:

安裝插件permissive script security plugin,然后配置下jenkins.xml,加入-Dpermissive-script-security.enabled=true。重啟jenkins就好了

文末結(jié)語(yǔ)

通過(guò)這三篇jenkins pipeline的系列文章,相信你已經(jīng)入門(mén)pipeline流式構(gòu)建的腳本編寫(xiě)了,基于groovy腳本建模非常靈活,基于此我們可以新增更多的玩法,比如健康檢查成功后,通過(guò)一些即時(shí)通訊工具通知構(gòu)建的結(jié)果,如微信,釘釘?shù)取@持續(xù)集成ci/cd肯定還有很多很多的場(chǎng)景,歡迎在下方留言一起探討。

以上就是構(gòu)建及部署jenkins pipeline實(shí)現(xiàn)持續(xù)集成持續(xù)交付腳本的詳細(xì)內(nèi)容,更多關(guān)于jenkins pipeline實(shí)現(xiàn)持續(xù)集成持續(xù)交付腳本的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!

原文地址:http://www.kailing.pub/article/index/arcid/205.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩av在线中文字幕 | 91成人精品 | 亚洲狠狠爱 | 国产三级精品在线 | 黄色网页在线 | 国产高清在线精品一区二区三区 | 成人在线一区二区三区 | 日韩av手机版 | 国产精品欧美一区二区三区 | 97色婷婷成人综合在线观看 | 日韩欧美综合 | 中文字幕亚洲一区 | 久久综合九色综合欧美狠狠 | 淫片在线观看 | 国产精品视频免费看 | 日韩午夜激情 | 欧美 日韩 国产 在线 | 久久久综合色 | 成人av免费| 日韩免费视频 | 在线视频一区二区三区 | 国内精品一区二区 | 午夜视频 | 精品国产一区二区三区在线观看 | 黄色av三级 | 精品久久久久久国产 | 高清一区二区三区视频 | 精品成人在线 | 天堂一区二区三区在线 | 岛国一区| 日韩有码在线观看 | 伊人婷婷 | 亚洲免费美女视频 | 精品毛片在线 | 亚洲a网站 | 在线一区| 亚洲成av人影片在线观看 | 国产精品三区在线 | 亚洲欧美一区二区三区在线 | 亚洲精品久久久久久久久久久久久 | 狠狠操操 |