一千萬個為什麽

搜索

如何停止從Jenkins開始的VPN連接?



我剛剛發現了這個網站,我想問我的第一個問題。

我在詹金斯有一個管道項目,基本上這樣做:

  • SVN更新
  • 構建
  • 部署

由於部署目標機器位於不同的網絡上,因此我需要啟動OpenVPN連接。這可以正常使用 bat'start openvpn config.ovpn'

問題是我需要在進程完成後丟棄VPN連接,並且沒有用於OpenVPN的停止命令。

我的第一種方法是保存啟動OpenVPN的進程ID並在稍後關閉。像這樣的東西:

stage('Connect VPN') {
        bat '''wmic process get parentprocessid,name | grep WMIC | tr -d \'WMIC.exe \' > wmic_pid
            start openvpn myconfig.ovpn'''
    }

stage('Deploy') {
   //Deployment process
}

stage('Disconnect VPN') {
    env.WMID_PID=readFile('wmic_pid').trim()
    bat 'taskkill -pid %WMID_PID% -t'
}

但是,由於某些原因,使用wmic保存的進程ID與OpenVPN所使用的進程ID不匹配。當它在cmd上手動執行時,此過程正常工作。

有任何想法嗎?

PS:我在Windows Server 2012上。

轉載註明原文: 如何停止從Jenkins開始的VPN連接?

一共有 1 個回答:

你的問題在這裏沒有答案,因為你的方式“在雜草叢中” - 運行似乎在Windows上利用cygwin的非常特殊的批處理腳本,簡而言之,你在這裏是“wtf”類。沒關系!在這項工作中,我們所有人都在這個地方度過了很多美好的一天。

我建議你考慮將它們轉換為PowerShell任務,你可以使用:

node {
    powershell 'get-process "Openvpn" | stop-process -force'
}

為此提供幫助。這將簡化您的構建服務器並移除cygwin上的外部依賴關系 - 如果您曾經在任何規模上遇到困難,這都是一個真正的怪物。它很難自動安裝,難以保持最新,惡劣的工廠和維護不善。

也許更大的一面,在部署過程中使用VPN隧道有點不正規。您可能會考慮將工件推送到Jenkins和您的目標服務器有權訪問的存儲庫,然後從目標服務器輪詢出現新的構建,然後安裝它。或者簡單地將您的構建和部署階段與手動步驟分開 - 在構建/測試成功後登錄到生產環境以啟動部署。