我想使用Jenkins声明式管道通过docker agent安装maven和npm。但是,当我想在下面的脚本中使用时,詹金斯会抛出如下错误。可能没有使用代理,而是如何通过声明性管道詹金斯将节点与docker代理一起使用。
错误:尝试执行一个需要节点上下文的步骤,同时 指定了“无代理人”。确保指定自己的“节点{...}” 使用“无代理”时阻止。
我尝试设置任何座席,但这次我收到错误消息“仍在等待计划任务 等待下一个可用的执行程序”
pipeline {
agent none
// environment{
proxy = https://
// stable_revision = sh(script: 'curl -H "Authorization: Basic $base64encoded"
// }
stages {
stage('Build') {
agent {
docker { image 'maven:3-alpine'}
}
steps {
sh 'mvn --version'
echo "$apigeeUsername"
echo "Stable Revision: ${env.stable_revision}"
}
}
stage('Test') {
agent { docker { image 'maven:3-alpine' image 'node:8.12.0' } }
environment {
HOME = '.'
}
steps {
script{
try{
sh 'npm install'
sh 'node --version'
//sh 'npm test/unit/*.js'
}catch(e){
throw e
}
}
}
}
// stage('Policy-Code Analysis') {
// steps{
// sh "npm install -g apigeelint"
// sh "apigelint -s wiservice_api_v1/apiproxy/ -f codeframe.js"
// }
// }
stage('Promotion'){
steps{
timeout(time: 2, unit: 'DAYS') {
input 'Do you want to Approve?'
}
}
}
stage('Deployment'){
steps{
sh "mvn -f wiservice_api_v1/pom.xml install -Ptest -Dusername=${apigeeUsername} -Dpassword=${apigeePassword} -Dapigee.config.options=update"
//sh "mvn apigee-enterprise:install -Ptest -Dusername=${apigeeUsername} -Dpassword=${apigeePassword} "
}
}
}
}
答案 0 :(得分:1)
基本上,您的错误消息会告诉您所有您需要了解的内容:
错误:尝试执行一个需要节点上下文的步骤,同时 指定了“无代理人”。确保指定自己的“节点{...}” 使用“无代理”时阻止。
那么这里的问题是什么?您将agent none
用于管道,这意味着您没有为所有stages
指定特定的代理。代理执行特定的stage
。如果stage
没有agent
,则无法执行,这是您的问题。
以下2个stage
没有agent
,这意味着没有docker-container /服务器或任何可以执行的地方。
stage('Promotion'){
steps{
timeout(time: 2, unit: 'DAYS') {
input 'Do you want to Approve?'
}
}
}
stage('Deployment'){
steps{
sh "mvn -f wiservice_api_v1/pom.xml install -Ptest -Dusername=${apigeeUsername} -Dpassword=${apigeePassword} -Dapigee.config.options=update"
//sh "mvn apigee-enterprise:install -Ptest -Dusername=${apigeeUsername} -Dpassword=${apigeePassword} "
}
}
因此您必须分别向两个agent { ... }
中添加stage
或像下面这样使用global agent
并从agent
中删除stages
:
pipeline {
agent {
docker { image 'maven:3-alpine'}
} ...
有关更多信息,请参见guide to set up master and agent machines或distributed jenkins builds或official documentation。
答案 1 :(得分:0)
我认为您打算添加agent any
而不是agent none
,因为每个阶段至少需要一个代理(在管道的顶部或每个阶段都声明)。
此外,我还看到了其他一些问题。
您的Test
阶段为同一阶段指定了两个图像。
尽管agent { docker { image 'maven:3-alpine' image 'node:8.12.0' } }
,您的阶段仅执行npm命令。我相信只会下载其中一张图片。
要进一步阐明mkemmerz答案,请正确设计您的Promotion
阶段。如果您打算在管道中包含输入步骤,请不要为管道添加代理,因为输入步骤会阻塞执行程序上下文。看到此链接https://jenkins.io/blog/2018/04/09/whats-in-declarative/