差異處
這裏顯示兩個版本的差異處。
java:ant:execute_job_with_scp [2017/01/08 12:13] tony [register the sshd as a service] |
java:ant:execute_job_with_scp [2023/06/25 09:48] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | {{tag>jenkins ant cygwin signtool}} | + | |
- | ====== 透過SCP執行某些跨平台工作 ====== | + | |
- | ===== Problem ===== | + | |
- | 某天我們有了要在exe檔上sign certificate的需求,然而我們的build server是在linux上的jenkins。整理一下目前狀況: | + | |
- | * Signtool Server: Windows Server 2003,32位元。 | + | |
- | * Build Server: CentOS6,64位元。 | + | |
- | * 簡化後的Build Process: 從版控系統checkout code後,開始編譯,產生各專案artifacts;透過installanywhre產生出installer;計算CRC code,並包成一個壓縮檔。 | + | |
- | ===== Thinking ===== | + | |
- | 基於以上需求,我開始思考有哪些做法: | + | |
- | - 拆解build job: 將步驟拆成多個build job,透過jenkins slave將產生的installer丟到Signtool Server上執行。 | + | |
- | - 不拆解build job: 讓Signtool Server上有類似jenkins slave的程式,可以接收我們的指令,而動作可以在ant script內完成。 | + | |
- | 使用第一種做法,我需要refactor build script,並且要考慮installer放置可抓取位置的問題。而第二個做法呢? 考慮可以傳輸檔案、執行指令: | + | |
- | - 透過ssh server: 可使用cygwin或其它現有的ssh server。 | + | |
- | - 透過rest api: 可基於[[https://spring.io/guides/gs/rest-service/|sprint restapi]]去實作。 | + | |
- | 為了簡單也不需要額外實作,我選擇了ssh server的方式。 | + | |
- | ===== How to? ===== | + | |
- | ==== select ssh server - apache sshd ==== | + | |
- | 在ssh server的選擇上,首先我使用了cygwin。在Signtool Server上安裝cygwin後,首先遇到類似以下的訊息 | + | |
- | <code> | + | |
- | could not be located in the dynamic link library KERNEL32.dll | + | |
- | </code> | + | |
- | 嘗試過不同版本的cygwin依然無法解決,接著改用[[https://mina.apache.org/sshd-project/|apache sshd]]。我使用的是1.2.0的版本,我遇到以下問題: | + | |
- | - sshd.bat找不到main class: 從source code得知,bat launch的class名稱需改為org.apache.sshd.server.SshServer。 | + | |
- | - 連線後該如何登入: 從source code得知,只要給一個帳號與密碼是相同即可登入。如果有疑慮就需要自己override PasswordAuthenticator,可以參考[[https://mina.apache.org/sshd-project/configuring_security.html|link]]。 | + | |
- | - 執行發生找不到jvm.dll的問題: 由於apache sshd必須使用java7以上,且windows 2003不支援java8,因此我使用java 7。而這個問題只要將jre7/bin/client複製到jre7/bin/server後,即可解決。 | + | |
- | 在成功啟動apache sshd後,可以透過putty連線測試一下。 | + | |
- | ==== register the sshd as a service ==== | + | |
- | 將程式註冊為service有不少方法,最簡單的方法是透過mssm。首先透過mssm執行: | + | |
- | <code bash> | + | |
- | mssm.exe install apache-sshd | + | |
- | </code> | + | |
- | 接著會出現如下圖畫面,去選擇你sshd.bat:\\ | + | |
- | {{:java:ant:mssm_register_sshd.png|}} | + | |
- | 安裝完成後,可以透過sc指令確認並啟動: | + | |
- | <code bash> | + | |
- | sc query apache-sshd | + | |
- | sc start apache-sshd | + | |
- | </code> | + | |
- | {{:java:ant:sc_query_apache_sshd.png|}}\\ | + | |
- | 確認沒問題後,請記得再次確認: | + | |
- | - 重新啟動後會自動啟動。 | + | |
- | - 可透過putty連線。 | + | |
- | ===== Reference ===== | + | |
- | * [[https://mina.apache.org/sshd-project/|apache sshd]] | + | |
- | * [[http://stackoverflow.com/questions/3582108/create-windows-service-from-executable|NSSM - the Non-Sucking Service Manager]] | + | |
- | * [[http://stackoverflow.com/questions/18123144/missing-server-jvm-java-jre7-bin-server-jvm-dll|missing-server-jvm-java-jre7-bin-server-jvm-dll]] | + |