TL; DR 我想使用sh
步骤,即使Jenkins在Windows上运行。我不想使用bat
步骤,除非您可以告诉我如何使用bat
我一直在将一些旧的Jenkins工作转换为2.x Pipeline脚本。我的一个工作使用“发布SSH插件”来:
例如:
我想在Pipeline Script中复制它,所以我已经完成了以下操作:
stage('Deploy') {
withCredentials([[$class: 'FileBinding', credentialsId: 'bitbucket-key-file', variable: 'SSHKEY']]) {
sh '''
scp -i "$SSHKEY" dsub.tar.gz tprmbbuild@192.168.220.57:dsubdeploy
scp -i "$SSHKEY" deployDsubUi.sh tprmbbuild@192.168.220.57:dsubdeploy
ssh -i "$SSHKEY" -o StrictHostKeyChecking=no 192.168.220.57 <<- EOF
DEPLOY_DIR=/home/tprmbbuild/dsubdeploy
echo '*** dos2unix using sed'
sed -e 's/\r$//' $DEPLOY_DIR/deployDsubUi.sh > $DEPLOY_DIR/deployDsubUi-new.sh
mv $DEPLOY_DIR/deployDsubUi-new.sh $DEPLOY_DIR/deployDsubUi.sh
chmod 755 $DEPLOY_DIR/deployDsubUi.sh
echo '*** Deploying Dsub UI'
$DEPLOY_DIR/deployDsubUi.sh $DEPLOY_DIR/dsub.tar.gz
EOF'''
}
}
问题是,我在执行构建时得到了这个堆栈跟踪:
[Pipeline] sh
[E:\Jenkins\jenkins_home\workspace\tpr-ereg-ui-deploy@2] Running shell script
1 [main] sh 3588 E:\Jenkins\tools\Git_2.10.1\usr\bin\sh.exe: *** fatal error - add_item ("\??\E:\Jenkins\tools\Git_2.10.1", "/", ...) failed, errno 1
Stack trace:
Frame Function Args
000FFFF9BB0 0018005C24E (0018023F612, 0018021CC39, 000FFFF9BB0, 000FFFF8B30)
000FFFF9BB0 001800464B9 (000FFFFABEE, 000FFFF9BB0, 1D2345683BEC046, 00000000000)
000FFFF9BB0 001800464F2 (000FFFF9BB0, 00000000001, 000FFFF9BB0, 4A5C3A455C3F3F5C)
000FFFF9BB0 001800CAA8B (00000000000, 000FFFFCE00, 001800BA558, 1D234568CAFA549)
000FFFFCC00 00180118745 (00000000000, 00000000000, 001800B2C5E, 00000000000)
000FFFFCCC0 00180046AE5 (00000000000, 00000000000, 00000000000, 00000000000)
00000000000 00180045753 (00000000000, 00000000000, 00000000000, 00000000000)
000FFFFFFF0 00180045804 (00000000000, 00000000000, 00000000000, 00000000000)
End of stack trace
答案 0 :(得分:4)
同意“我相信它没有产生壳”。它正在尝试运行“E:\ Jenkins \ tools \ Git_2.10.1 \ usr \ bin \ sh.exe”(使用Windows反斜杠语法)。除非我们在上述目录中配置了shell可执行文件(sh.exe),否则它将失败。
Powershell(或Cmd Shell):
如果您要使用批处理文件,则必须安装/配置3个二进制文件(ssh,scp,ssh)。其他一切都到位(我看到你正在使用ssh将命令传递给远程机器。我假设远程服务器是基于linux / unix的。)
<强>替代强>:
你可以在virtualbox上使用cygwin或运行linux(或者在windows上模拟linux的任何软件)。但是,运行3个命令可能不值得(如果你计划将来转换/编写更多shell脚本,那肯定会很有成效。)
答案 1 :(得分:3)
您可以在Windows中使用“bat”而不是“sh”。 还使用2个反斜杠正确地转义路径字符串。见下面的例子
node {
currentBuild.result = "SUCCESS"
try {
stage('Checkout'){
checkout scm
}
stage('Convert to Binary RPD'){
bat "D:\\oracle\\Middleware\\user_projects\\domains\\bi\\bitools\\bin\\biserverxmlexec -D .\\RPD -P Gl081Reporting -O .\\GLOBI.rpd"
}
stage('Notify'){
echo 'sending email'
// send to email
emailext (
subject: "SUCCESS: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
body: """$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
Check console output at $BUILD_URL to view the results.""",
to:"girish.lakshmanan@abc.co.uk girish.la@gmail.com"
)
}
}
catch (err) {
currentBuild.result = "FAILURE"
throw err
}
}
答案 2 :(得分:1)
您应该能够直接在批处理脚本中从git安装运行scp.exe。 这里没有&#34;&#34;据我所知,批量文档,但你可以把脚本在服务器上运行到一个单独的文件。
(未测试的)
sp.solveset(sp.exp(1 - 10*x) - 15,x, domain = sp.S.Reals)
}