我有一个需要通过Jenkins部署的BookStore Spring项目。安装在本地计算机(macOS)和Jenkinsfile中的Docker,如下所示
pipeline
{
agent
{
docker
{
image 'maven:3-alpine'
//This exposes application through port 8081 to outside world
args '-u root -p 8081:8081 -v /var/run/docker.sock:/var/run/docker.sock '
}
}
stages
{
stage('Build')
{
steps
{
sh 'mvn -B -DskipTests clean package'
}
}
stage('Test')
{
steps {
//sh 'mvn test'
sh 'echo "test"'
}
post {
always {
//junit 'target/surefire-reports/*.xml'
sh 'echo "test"'
}
}
}
stage('Deliver for development')
{
when {
branch 'development'
}
steps {
sh './jenkins/scripts/deliver-for-development.sh'
input message: 'Finished using the web site? (Click "Proceed" to continue)'
}
}
stage('Deploy for production')
{
when {
branch 'production'
}
steps {
sh './jenkins/scripts/deploy-for-production.sh'
input message: 'Finished using the web site? (Click "Proceed" to continue)'
}
}
stage('Deliver') {
when {
branch 'production'
}
steps {
sh 'bash ./jenkins/deliver.sh'
}
}
}
}我在Jenkins中创建了多分支管道,当我尝试运行它时,我得到了以下错误:
/Users/Shared/Jenkins/Home/workspace/BookStore_master-VPWQ32ZZPV7CVOXNI4XOB3VSGH56MTF3W34KXKZFJKOBMSGLRZQQ@tmp/durable-70dd5a81/script.sh: line 2: docker: command not found
script returned exit code 127这在我看来很奇怪,因为在本地机器中可以获得对接器,而且还配置了Global Tool Configuration部分,并提供了如下所示的适当详细信息。我查看了几个帖子,但到目前为止,这些解决方案都没有奏效。

发布于 2018-09-13 15:33:07
由于这个线程https://stackoverflow.com/a/50029962/6943587,我也遇到了同样的问题并得以解决。
您需要指定码头标签,也就是哪个代理拥有码头。据我所知,有两种方法可以做到这一点。
(选项1-首选)在Jenkinsfile中设置码头标签
将代理设置为带有码头代理标签的码头映像。
// Jenkinsfile
pipeline {
// Assign to docker agent(s) label, could also be 'any'
agent {
label 'docker'
}
stages {
stage('Docker node test') {
agent {
docker {
// Set both label and image
label 'docker'
image 'node:7-alpine'
args '--name docker-node' // list any args
}
}
steps {
// Steps run in node:7-alpine docker container on docker agent
sh 'node --version'
}
}
stage('Docker maven test') {
agent {
docker {
// Set both label and image
label 'docker'
image 'maven:3-alpine'
}
}
steps {
// Steps run in maven:3-alpine docker container on docker agent
sh 'mvn --version'
}
}
}
} (选项2)在配置中设置坞标
根据Jenkins文档这里,在Jenkins配置中的“管道模型定义”下设置“码头标签”。这将只在带有此标签的代理上运行管道构建。然后你可以像这样创建你的管道..。
// Jenkinsfile
pipeline {
// "Top-level" agent is assigned to docker agents via Jenkins pipeline configuration
agent none
stages {
stage('Docker node test') {
agent {
docker {
image 'node:7-alpine'
args '--name docker-node' // list any args
}
}
steps {
// Steps run in node:7-alpine docker container on docker agent
sh 'node --version'
}
}
stage('Docker maven test') {
agent {
docker {
image 'maven:3-alpine'
}
}
steps {
// Steps run in maven:3-alpine docker container on docker agent
sh 'mvn --version'
}
}
}
}希望这能有所帮助
选项1比选项2更可取,因为Jenkins文件配置在哪台机器上运行码头代理,而不依赖将来可以删除或编辑的Jenkins管道配置。
https://stackoverflow.com/questions/50916740
复制相似问题