發表文章

目前顯示的是有「adb」標籤的文章

在 Jenkins 環境下使用 adb

因為 Jenkins 在結束工作的時候,會將所有 fork 出來的子進程全部砍掉,來確保不會有 leakage 的情況發生,讓 Jenkins 可以長時間運行。通常這個行為是沒有問題的,有時候也可以仰賴這個行為來讓 Job Script 寫起來簡潔一些,省一些功夫。 但是如果某個 Jenkins Job 會啟動 server or daemon 性質的 process,而我們希望當 Job 結束後, daemon process 可以保留,這個時候需要在一開始啟動這個 daemon 的時候,加上 "dontKillMe" 的環境變數,來告知 Jenkins 不要回收這個 process。 詳細說明可以參考 這裡 adb 就是一個很好的例子。 adb daemon 可以同時間處理很多 connection,通常在大規模的自動化測試中,一台 PC 會接著很多 device,如果 adb daemon 被砍掉,其他 device connection 就會中斷,這並不是我們希望看到的。 以下是針對指定 adb server 不要被 Jenkins 回收的範例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 jenkins_env = os . environ . copy() jenkins_env[ "BUILD_ID" ] = "dontKillMe" start_time = time . clock() event = Event() is_device_timeout = False cmd = "adb -s %s wait-for-device" % (deviceNo) try : adb_pid = subprocess . Popen(cmd, env = jenkins_env) while adb_pid . poll() is None : event . wait(timeout = 1.0 ) if (time . clock() -...