gpt4 book ai didi

Docker Jenkins Blue Ocean 无法在 Pipeline 中运行 ssh scp

转载 作者:行者123 更新时间:2023-12-04 16:04:48 24 4
gpt4 key购买 nike

我已经根据 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

它按我的预期工作。

然后我设置了一个新的流水线作业,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/"
}

}
}
}

当我运行此作业时,在“部署”阶段,它向我显示此错误消息
[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'*/
}

}
}
}

最佳答案

对我来说,理解的关键是名为“Master”的 Build-Executor 是 blueocean jenkinsci FROM jenkinsci/blueocean 镜像的运行时“代理”上下文

在 Jenkinsfile 中说 agent { label 'master' } 表示在 Master 上运行步骤,agent { label 'Dockerfile' } 表示在项目 docker 容器中运行步骤。

您需要一个多代理管道,所以从 agent none 开始并在每个阶段添加一个针对其代理环境的代理。在这种情况下 agent { label 'master' }jenkinsci/blueocean 运行 ssh容器

太明显了,任何人都无法解释……!

您将需要 SSH 代理插件来创建凭据,并复制私有(private) ssh key 。它会给你一个 ID 用于你的 Jenkinsfile DSL 脚本

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 节点由代理标签控制,酷 :)

关于Docker Jenkins Blue Ocean 无法在 Pipeline 中运行 ssh scp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50696978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com