从groovy管道文件在linux Jenkins服务器上执行powershell脚本



所以,在花了半天时间作为我们的惊喜jenkins-devops家伙之后,我不确定这种情况是否可能。我们有一个linux Jenkins服务器,它运行一个groovy文件来构建我们的一些软件。最近,我们从dropbox转移到了onedrive,我的任务之一是更改所有CI应用程序,将文件上传到onedrive。使用appveyor和powershell我可以做到这一点,但詹金斯给我带来了问题。我希望重新使用我为appveyor编写的powershell脚本,对它们进行调整,并在Jenkins管道中使用它们。我已经在Jenkins服务器上安装了Powershell插件,但它仍然找不到Powershell。我已经在本地测试了GetAccessToken.ps1脚本(但我在w10上(,它很好。

Groovy代码片段

stage('Deploy')
{
environment
{
ONEDRIVE_ID = credentials('OneDriveClientId')
ONEDRIVE_SECRET = credentials('OneDriveSecretKey')
ONEDRIVE_TOKEN = powershell "Common/Build/GetAccessToken.ps1 ${ONEDRIVE_ID} ${ONEDRIVE_SECRET}"
}
steps
{
echo 'Deploying Code....'
sh "chmod +x Common/Build/UploadToOnedrive.ps1"
powershell "Common/Build/UploadToOnedrive.ps1 -t ${ONEDRIVE_TOKEN} -s bootloader/redacted/Build/redacted-f redacted -v ${VERSION} -b ${BRANCH_NAME}"
}
}

错误

Caused: java.io.IOException: Cannot run program "powershell" (in directory "/var/lib/jenkins/workspace/test_branch"): error=2, No such file or directory

基于其他SO帖子和jenkins.io帖子,我尝试了大约10种不同的脚本调用方式,但都失败了。我想知道我是否需要一个Windows从属程序来运行powershell(尽管我认为插件会允许我这样做(。最后,我将尝试更改旧的bash脚本,以便使用curl上传,但我真的希望使用powershell脚本。

哦,这是我的路径。我想我读到pwsh/powershell安装在/usr/local/sbin或/usr/local/bin中,所以这不应该是的问题

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

多亏了Shane的健全性检查,我能够在Jenkins-ubuntu服务器上安装pwsh,然后我的groovy pwsh步骤开始工作。我在传递变量时仍然遇到一些问题,但这是另一个主题。我现在可以在我的groovy脚本中使用这样的脚本了

environment {
ONEDRIVE_TOKEN = pwsh (script: "Common/Build/GetAccessToken.ps1 ${env.ONEDRIVE_ID} ${env.ONEDRIVE_SECRET}", returnStdout: true)
}

更新;以下是我如何使用变量从groovy调用powershell脚本

sh 'pwsh Common/Build/UploadToOnedrive.ps1 -t $ONEDRIVE_TOKEN -s "Release" -f "testname" -v $VERSION -b $BRANCH_NAME'   

最新更新