📢歡迎點贊 :👍 收藏 ?留言 📝 如有錯誤敬請指正,賜人玫瑰,手留余香!
📢本文作者:由webmote 原創
📢作者格言:無盡的折騰后,終于又回到了起點,工控,我來了 !
前言
沒有人喜歡windows平臺下的自動化構建,一如多年前沒人喜歡linux的桌面一樣。不過由于windows平臺具有巨大的客戶群體和開發公司的死忠粉,因此Jenkins工具還是具有相當大的用戶群體的,因此作為開發者的一員,有時候,不得不去了解下運維工作的內容,甚至自己也需要兼職干些什么。最近在考慮windows下ci集成,又拉起了jenkins的手,畢竟雖然界面難看,可是手真的很暖。
問題
Jenkins是一個可擴展的持續集成軟件平臺,也是CI的工具箱中的重要一員,持續集成,就是通常所說的CI(Continues Integration),可以說是現代軟件技術開發的基礎。
持續集成是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,通常每個成員至少集成一次,也意味著每天可能會發生多次集成。這應該是開發經理能想到的事情,不過在我向我的領導說起這事時,他竟然說根本沒有的事,哎,奈何如此?
如果每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,那么從而能盡快地發現集成錯誤。團隊發現這個過程可以大大減少集成的問題,讓團隊能夠更快的開發內聚的軟件,這個說法竟然不能說服領導,有時候在低認知的團隊做事情真的比較難。
剛說了一堆Jenkins的介紹,而我遇到的問題是:
Jenkins對批處理或powershell進行了輸出跟蹤,并且可以跟蹤子進程,它在批處理結束后,會對整個進程樹進行掃描,關閉所有拉起的其他進程。
這真是個好特性!當然是對資源利用來說的。
對于我這種想保持拉起的子進程,一直運行而不被關閉的做法而言,簡直是災難,經過了好多個小時的嘗試,最終我發現了這個問題。
Jenkins殺死了 批處理拉起的進程!
解決
為了避免拉起來的進行被殺死,Jenkins提供了一些hack技術。
主要是設置2個環境變量,因此不管你是什么腳本,理論上都可以進行設置,以保持子進程繼續運行。
下面是在Powershell腳本下寫的代碼:
# my_powershell_script.ps1 content
$ENV:BUILD_ID="dontKillMe"
$ENV:JENKINS_NODE_COOKIE="dontKillMe"
總結
又浪費了幾天的時間,領導特別不喜歡,哎~~~~
自動化就是這么難落地!