pipeline {
agent any
stages {
stage('Build React Image') {
steps {
...
}
}
stage('Push React Image') {
steps {
...
}
}
stage('Build Backend Image') {
steps {
...
}
}
stage('Push Backend Image') {
steps {
...
}
}
def remote = [:]
remote.name = '...'
remote.host = '...'
remote.user = '...'
remote.password = '...'
remote.allowAnyHosts = true
stage('SSH into the server') {
steps {
writeFile file: 'abc.sh', text: 'ls -lrt'
sshPut remote: remote, from: 'abc.sh', into: '.'
}
}
}
}
我遵循了此页面上的文档:https://jenkins.io/doc/pipeline/steps/ssh-steps/,以Jenkinsfile的形式进入服务器。我的最终目标是将ssh放入服务器,从dockerhub中拉出,构建并安装它。
首先,我只想成功地将其切入。
这个Jenkinsfile给了我WorkflowScript: 61: Expected a stage @ line 61, column 9. def remote = [:]
不确定这样做是否正确。如果有一种更简单的方法可以通过SSH进入服务器并像我手动执行命令那样执行命令,那么也很高兴知道。
谢谢。
答案 0 :(得分:0)
问题与插件无关,但与管道的声明性语法有关。当错误消息指出需要一个阶段并找到变量声明时。
管道必须包含阶段,阶段必须包含一个阶段。一个阶段必须走一步。...过去,我浪费大量时间试图遵守严格的声明式语法,但现在不惜一切代价避免使用它。
尝试下面的简化脚本管道。
stage('Build React Image') {
echo "stage1"
}
stage('Push React Image') {
echo "stage2"
}
stage('Build Backend Image') {
echo "stage3"
}
stage('Push Backend Image') {
echo "stage4"
}
def remote = [:]
remote.name = '...'
remote.host = '...'
remote.user = '...'
remote.password = '...'
remote.allowAnyHosts = true
stage('SSH into the server') {
writeFile file: 'abc.sh', text: 'ls -lrt'
sshPut remote: remote, from: 'abc.sh', into: '.'
}
答案 1 :(得分:0)
该错误由语句def remote = [:]
和后续赋值在stage
块之外引起。另外,由于声明性语法不直接在steps
块内支持语句,因此您还需要将代码的那部分包装在script
块内。
stage('SSH into the server') {
steps {
script {
def remote = [:]
remote.name = '...'
remote.host = '...'
remote.user = '...'
remote.password = '...'
remote.allowAnyHosts = true
writeFile file: 'abc.sh', text: 'ls -lrt'
sshPut remote: remote, from: 'abc.sh', into: '.'
}
}
}