Jenkins管道-如何使一个阶段工作在Windows和Linux



我正在Jenkins上开发一个声明式管道,其中一个必要条件是它必须同时适用于Windows和Linux。

现在,为了实现这一目标,我正在使用两个阶段,一个用于Linux环境,另一个用于Windows环境,因为可以在下面的代码中看到

stage('Integration Tests on Windows') {
when { expression { env.OS == 'BAT' }}
steps 
{
dir('') 
{
bat 'gradlew.bat integrationTest'
junit '**/build/test-results/integrationTest/*.xml'
}
}
}
stage('Integration Tests on LINUX') {
when { expression { env.OS == 'UNIX' }}
steps 
{
dir('') 
{
sh 'gradlew integrationTest'
junit '**/build/test-results/integrationTest/*.xml'
}
}
}

我想知道是否有更好的方法来做到这一点,同时保持管道声明性?

不确定您是否正在使用git。然而,我们更喜欢的方法是在Linux和Windows上使用sh步骤:

我们通过使用Windows git附带的bash/sh来完成。你只需要确保它(sh)在路径中(例如,如果你手动安装git,它甚至会要求你将它的命令行工具添加到路径中)。对于Jenkins节点,你可能想把它添加到你的Jenkins节点配置中。

我们使用的一个替代方法是一个包装器函数,你可以在你的Jenkinsfile或Pipeline库中指定它。它可能看起来像这样:

def executeCmd(def args) {
if (isUnix()) {
sh args 
} else {
bat args
}
}

请注意,这显然只能处理在Windows和Linux上参数100%相同的情况。

因此我建议在Windows和Linux上使用sh

或者,如果你喜欢,你可能想在Linux上使用Powershell,而使用pwsh步骤。

相关内容

  • 没有找到相关文章

最新更新