最近由於項目自動化構建的需要,研究了下gradle調用腳本並傳參的用法,在此作個總結。
Pre
build.gradle中定義了$jenkinsJobName $jenkinsBuild兩個Jenkins變量,意圖將gradle中的這兩個值傳到shell/python腳本中去用
def jenkinsBuild = System.getenv("BUILD_NUMBER") ?: "0"
println "jenkinsBuild is set to $jenkinsBuild" def jenkinsJobName = System.getenv("JOB_NAME") ?: "defaultJobName" println "jenkinsJobName is set to $jenkinsJobName"
Gradle調用shell腳本帶參數
gradle task
task upload(type: Exec) { executable 'sh' args "-c","../shelldemo.sh $jenkinsJobName $jenkinsBuild" }
shelldemo.sh腳本中
#!/usr/bin/env bash #從build.gradle中傳入的兩個參數 jenkinsJobName=$1 jenkinsBuild=$2 echo "jenkinsJobName=$jenkinsJobName" echo "jenkinsBuild=$jenkinsBuild" ...
Gradle調用python腳本帶參數
gradle task
task uploadpython(type: Exec) { workingDir './' commandLine "python","pythondemo.py", "$jenkinsJobName", "$jenkinsBuild" }
pythondemo.py腳本
#encoding:utf8 import sys jenkinsJobName=sys.argv[1] jenkinsBuild=sys.argv[2] print jenkinsJobName print jenkinsBuild
...
Gradle Exec官方文檔的說明
注意雙引號
Groovy中只為雙引號的字符進行插值,所以如果寫了單引號,是不work的。
http://stackoverflow.com/questions/14900883/trying-to-undersand-how-i-can-pass-arguments-from-gradle-to-my-shell-script
Groovy only performs String interpolation for double-quoted Strings. (That's one of the reasons why I use double quotes by default.) Try: ... args "-c", "source dosomething.sh $arg"