Shell
Jenkins - 環境變數未從管道設置
這是我的腳本。我試圖在 pipline shell 腳本中設置變數:
node { anyconnect = docker.image('anyconnect:1').run("--cap-add NET_ADMIN --cap-add SYS_ADMIN --device /dev/net/tun:/dev/net/tun -e VPN_USER=${env.USER} -e VPN_PASS=${env.PASS} --name anyconnect") sh 'echo "Startig anyconnect and setting route"' sh """ IPADDRESS = \$(docker inspect -f "{{ .NetworkSettings.IPAddress }}" anyconnect) echo $IPADDRESS ip route replace xx.xx.xx.xx. via $IPADDRESS """ anyconnect.stop() }
但我得到:
groovy.lang.MissingPropertyException:沒有這樣的屬性:IPADDRESS 類:groovy.lang.Binding
我試圖導出它和其他東西,比如使用 $ {env.VARIABLE} or just $ {VARIABLE} 仍然無法幫助在管道中設置變數。Jenkins 管道應該如何完成?
用單引號替換雙引號,以防止
$IPADDRESS
被解釋為 Groovy 變數:sh ''' IPADDRESS = \$(docker inspect -f "{{ .NetworkSettings.IPAddress }}" anyconnect) echo $IPADDRESS ip route replace xx.xx.xx.xx. via $IPADDRESS '''
或者,轉義美元符號:
sh """ IPADDRESS = \$(docker inspect -f "{{ .NetworkSettings.IPAddress }}" anyconnect) echo ${'$'}IPADDRESS ip route replace xx.xx.xx.xx. via ${'$'}IPADDRESS """