我們公司的詹金斯有主人和兩個奴隸節點。我正在爲它編寫插件。插件做的一件事是從svn檢出一些文件。此操作無法從插件中提取。 爲此,我從我的插件的java代碼執行控制檯命令「svn checkout」。問題是來自svn的文件被檢出爲master,而不是從屬節點。 我怎樣才能讓文件檢出到奴隸?Jenkins插件,如何在遠程節點上執行系統命令?
回答
首先你有這些對象,通常收到的參數perform
方法:
Launcher launcher;
AbstractBuild<?, ?> build;
BuildListener listener;
那麼你已經創建並添加參數到argumentListBuilder,也許是這樣的:
ArgumentListBuilder command = new ArgumentListBuilder();
command.addTokenized("xcopy /?");
然後執行例如:
ProcStarter ps = launcher.new ProcStarter();
ps = ps.cmds(command).stdout(listener);
ps = ps.pwd(build.getWorkspace()).envs(build.getEnvironment(listener));
Proc proc = launcher.launch(ps);
int retcode = proc.join();
ProcStarter will r在由launcher
實例指定的節點上取消命令。但請至少在使用之前瀏覽上述所有類的javadoc,以上是而不是直接從工作代碼複製粘貼。
這裏是根據海德的答案代碼,適合Groovy腳本控制檯(在/script
)
def static Run(nodeName, runCommand)
{
def output = new java.io.ByteArrayOutputStream();
def listener = new hudson.util.StreamTaskListener(output);
def node = hudson.model.Hudson.instance.getNode(nodeName);
def launcher = node.createLauncher(listener);
def command = new hudson.util.ArgumentListBuilder();
command.addTokenized(runCommand);
def ps = launcher.launch();
ps = ps.cmds(command).stdout(listener);
// ps = ps.pwd(build.getWorkspace()).envs(build.getEnvironment(listener));
def proc = launcher.launch(ps);
int retcode = proc.join();
return [retcode, output.toString()]
}
// for (aSlave in hudson.model.Hudson.instance.slaves) {
(recode, output) = Run("build-slave9", "xcopy /?");
println output;
(注意事項:未經測試的讀取標準輸入程序注意ByteArrayOutputStream
,所以千萬不要運行程序。非常長的輸出。未經測試的非ASCII輸出。)
我使用腳本控制檯測試了這一點,並調用createLauncher()返回一個NullPointerException。我的目標是遍歷所有的奴隸,並對他們執行維護腳本。有沒有人看過這個作品? –
它在4月份爲我工作,今天在Jenkins 1.580.1上運行。奴隸必須在線才能工作。 (你有一個叫做「build-slave9」的奴隸,還是你改變了它?) –
- 1. 如何在遠程系統上執行BASH腳本的命令?
- 2. perl系統命令執行
- 3. 執行shell命令編程android系統
- 4. 如何在遠程系統上並行執行
- 5. 使用Twisted在遠程系統上運行命令
- 6. 在遠程計算機上使用wmi python執行系統命令
- 7. 如何通過java程序在遠程系統上運行SSH命令(後續)
- 8. 在遠程服務器上執行命令行命令
- 9. Jenkins tfs插件和遠程節點上的結帳源代碼
- 10. WMI如何遠程執行命令?
- 11. PHP執行命令節點
- 12. 在Jenkins上執行activator命令
- 13. 遠程執行命令
- 14. 執行Python命令遠程
- 15. linux遠程執行命令
- 16. 遠程docker命令執行
- 17. 如何在使用Java的遠程系統上運行SSH命令?
- 18. 在python中執行系統命令
- 19. 在postgresql中執行系統命令
- 20. 從js文件執行節點命令
- 21. Ansible中是否有任何adhoc命令在遠程節點上運行遠程命令?
- 22. 如何在遠程PC上執行dos命令?
- 23. 如何在遠程服務器上輕鬆執行R命令?
- 24. 如何在遠程計算機上執行命令?
- 25. 使用Java在遠程系統上執行批處理文件
- 26. 如何用HTML按鈕上的按鈕執行系統命令?
- 27. 如何在C++中並行執行系統命令
- 28. Jenkins管道:docker.withServer(...)不會在遠程服務器上執行docker命令
- 29. Python如何在遠程機器上執行命令並等待執行完成?
- 30. Jenkins執行bash shell命令
謝謝,我會試試! –
有一個問題:「CreateProcess error = 2,系統找不到指定的文件。」我試過命令「svn co」和「cmd.exe/C svn co」。你有任何想法來解決它? –
@ V.Artyukhov你是怎麼構造'command'的?只是一個猜測,沒有看到你的代碼,但你應該''ArgumentListBuilder.addTokenized(java.lang.String s)' – hyde