我有一个 Jenkins Pipeline,它使用 Publish Over SSH 和 SSH Pipeline Steps 插件在 Java 构建服务器上执行 shell 脚本。
整个过程工作正常,除了执行 Maven 行并生成许多日志行时。
当到达这一点时,Jenkins Pipeline 并没有结束,只有达到超时时间后才结束。
如果我将 Maven 日志行数减少到 30 行,Jenkins Pipeline 会正确运行,否则不会。
管道:
...
stage('Build') {
steps {
script {
def remote = [
name: 'vm-dev',
host: 'dev.myhost.com',
user: 'user',
identityFile: '/var/lib/jenkins/.ssh/ssh-key',
allowAnyHosts: true
]
sshCommand remote: remote, command: "/home/user/workspace/dev/scripts/java15/02-build.sh ${BUILD_NUMBER}"
}
}
}
...
shell脚本:
#!/bin/bash
set -e
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk use java 15.0.2-open
mvn clean install -U -DskipTests=true -q #The log problem is here
if [ $? -ne 0 ]; then
echo "Fail."
exit 1
fi
echo "Success."
exit 0
感谢您的帮助。
如果减小 shell 脚本输出日志的大小,管道将正常工作。
我已经测试了 Publish Over SSH 的高级执行选项,但没有成功。
log-buffer
插件或调整 Jenkins 的日志设置来完成。tee
命令将日志写入控制台和文件
mvn clean install -U -DskipTests=true -q | tee build.log
,然后在 Jenkins 管道中使用 archiveArtifacts
保存 build.log
文件。