我根据Jenkins的说明构建了一个jenkins docker,如下所示:
docker run -u root --rm -d -p 8080:8080 -p 50000:50000 -v /root/.ssh/id_rsa:/root/.ssh/id_rsa -v jenkins-home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean它按照我的预期工作。
然后我设置了一个新的Pipeline作业,Jenkinsfile简单如下:
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-v /root/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
sh 'mvn -B -DskipTests clean package'
}
}
stage('Test') {
steps {
echo "Testing!"
}
}
stage('Deploy') {
steps {
sh "ssh docker@192.168.99.101 rm -rf /home/docker/wildfly_deployments/*"
sh "scp target/test-docker-app-1.0.war docker@192.168.99.101:/home/docker/wildfly_deployments/"
}
}
}
}当我在"Deploy“阶段运行这个作业时,它显示了这个错误消息
[test-docker-app] Running shell script
+ ssh docker@192.168.99.101 rm -rf /home/docker/wildfly_deployments/*
/var/jenkins_home/workspace/test-docker-app@tmp/durable-4cd12dd8/script.sh: line 1: ssh: not found
script returned exit code 127我确信Jenkins容器可以执行ssh和scp,因为我已经尝试在Jenkins容器中运行相同的命令。
你知道我在Jenkinsfile里哪里错了吗?请帮帮忙
谢谢。
===============================
我在我的jenkinsfile文件中发现了这个问题,应该是:
pipeline {
agent any
stages {
stage('Build') {
agent {
docker {
image 'maven:3-alpine'
args '-v m2_repos:/root/.m2'
}
}
steps {
sh 'mvn -B -DskipTests clean package'
}
}
stage('Test') {
steps {
echo "Testing!"
}
}
stage('Deploy') {
steps {
sh "ssh docker@192.168.99.101 rm -rf /home/docker/wildfly_deployments/*"
sh "scp target/test-docker-app-1.0.war docker@192.168.99.101:/home/docker/wildfly_deployments/"
/*sh 'bash ./deploy.sh'*/
}
}
}
}发布于 2019-11-18 01:00:36
对我来说,理解的关键是名为"Master“的构建执行器是来自jenkinsci/blueocean image的blueocean jenkinsci的运行时”代理“上下文
在Jenkinsfile中,agent { label ' Master‘}表示在Master上运行步骤,agent { label 'Dockerfile’}表示在项目docker容器中运行步骤。
您需要一个多代理管道,因此从agent none开始,并在每个阶段添加一个代理,目标是它的代理环境。在本例中,使用agent { label 'master' }从jenkinsci/blueocean容器运行ssh
太明显了,任何人都无法解释...!
您将需要SSH代理插件来创建凭据,并复制私有ssh密钥。它将为您提供一个在Jenkinsfile DSL脚本中使用ID
pipeline {
agent none
stages {
stage('Hello Docker') {
agent { dockerfile {filename 'Dockerfile'}}
steps {
echo 'Hello Docker'
}
}
stage('Make useful SSH connections') {
agent { label 'master' }
steps{
//Your in the in Master Container
sh 'hostname'
//In this working directory
sh 'pwd'
//You provide SSH credentails via the SSHagent
sshagent(credentials : ['<ID OF THE SSH AGENT CREDENTIAL>']) {
//Connect to hostip/s with ssh, run scripts, go wild!
sh 'ssh -o StrictHostKeyChecking=no user@hostip uptime'
//and SCP
sh 'scp ./source/filename user@hostip:/remotehost/target
}
}
}Jenkins节点由代理标签cool :)控制
https://stackoverflow.com/questions/50696978
复制相似问题