Saya mencoba mendapatkan nilai tertentu dari budak dengan menjalankan perintah shell seperti:
git rev-parse HEAD
git config --get remote.origin.url
Metode yang saya coba tulis untuk ini adalah:
def executeCommand(String command) {
stdout = sh script: command, returnStdout: true
return stdout.trim()
}
Sekarang ketika saya mencoba menjalankan perintah pertama:
output = executeCommand('git rev-parse HEAD')
Saya mendapatkan KESALAHAN:
[Running] groovy "/Users/user-a/Documents/cmd.groovy"
Caught: groovy.lang.MissingMethodException: No signature of method: cmd.sh() is applicable for argument types: (LinkedHashMap) values: [[script:git rev-parse HEAD, returnStdout:true]]
Possible solutions: is(java.lang.Object), use([Ljava.lang.Object;), run(), run(), any(), tap(groovy.lang.Closure)
groovy.lang.MissingMethodException: No signature of method: cmd.sh() is applicable for argument types: (LinkedHashMap) values: [[script:git rev-parse HEAD, returnStdout:true]]
Possible solutions: is(java.lang.Object), use([Ljava.lang.Object;), run(), run(), any(), tap(groovy.lang.Closure)
at cmd.executeCommand(cmd.groovy:2)
at cmd.run(cmd.groovy:6)
Saya juga mencoba:
output = command.execute().text
Tapi ini tidak menghasilkan apa-apa.
Saya kehabisan ide tentang cara menjalankan perintah shell di Groovy di Jenkins dan mencatat hasilnya.
DETAIL LEBIH LANJUT
Saya bekerja dengan Perpustakaan bersama Jenkins. Saya telah mengekspos metode untuk Jenkinsfile
saya dengan nama getLatestBuildDetails()
. Metode ini didefinisikan dalam perpustakaan saya. Salah satu tindakan dalam metode ini adalah menjalankan perintah git
secara lokal. Jadi untuk menjalankan perintah shell apa pun secara lokal, saya telah membuat fungsi executeCommand
yang mengambil perintah sebenarnya untuk dijalankan sebagai String dan menjalankannya dan mengembalikan output untuk digunakan nanti oleh getLatestBuildDetails()
"git rev-parse HEAD"..execute().text
- person rohit thomas   schedule 17.08.2018.execute()
cocok dengan jenkins-pipeline? - person StephenKing   schedule 17.08.2018sh
merupakan langkah dari Jenkins Pipelines, namun postingan Anda lainnya tidak Kedengarannya tidak sebanyak Anda sebenarnya menggunakan saluran pipa Jenkins. Bisakah Anda menambahkan detail lebih lanjut, di mana Anda menggunakan kode yang diberikan? - person StephenKing   schedule 17.08.2018executeCommand
hanya berfungsi jika saya memanggil @NonCPS jika tidak maka tidak. - person   schedule 17.08.2018