我想使用 Jenkins 声明式管道通过 docker 代理安装 maven 和 npm。但是当我想使用以下脚本时,詹金斯会抛出如下错误。它可能使用代理无,但我如何通过声明式管道 jenkins 将节点与 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} "
}
}
}
}
我认为您的意思是添加agent any
而不是agentnone
,因为每个阶段至少需要一个代理(要么在管道的顶部声明,要么在每个阶段声明)。
此外,我还看到了一些问题。Test
阶段为同一阶段指定两个图像agent{docker{image‘maven:3-alpine‘image‘node:8.12.0‘}}
尽管,您的阶段只执行npm命令。我相信只有一张图片会被下载。
为了进一步澄清 mkemmerz 答案,您的晋升
阶段设计正确。如果计划在管道中包含输入步骤,请不要为管道添加代理,因为输入步骤会阻止执行程序上下文。请参阅此链接 https://jenkins.io/blog/2018/04/09/whats-in-declarative/
基本上,您的错误消息会告诉您您需要知道的一切:
错误:在指定“代理无”时尝试执行需要节点上下文的步骤。使用“代理无”时,请务必指定您自己的“节点{…}”块。
那么这里的问题是什么?您对管道使用代理 none
,这意味着您不会为所有阶段
指定特定的代理。代理执行特定阶段
。如果一个阶段
没有代理
,则无法执行,这是您的问题。
下面的2个阶段
没有agent
,这意味着没有docker容器/服务器或任何可以执行它的地方。
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} "
}
}
因此,您必须将代理 { ... }
单独添加到两个阶段,或者使用全局代理,如下所示并从阶段
中删除代理
:
pipeline {
agent {
docker { image 'maven:3-alpine'}
} ...
有关更多信息,请参见设置主计算机和代理计算机或分布式jenkins版本的指南或官方文档。
问题内容: 我正在尝试获得一个如下所示的声明性管道: 问题是,我希望能够基于任意条件覆盖ENV1或ENV2的值。我目前的需求只是将其作为分支机构的基础,但我可以想象更复杂的情况。 有没有理智的方法来实现这一目标?我在网上看到了一些类似的示例: 但是我相信这并没有设置实际的环境变量,而是设置了一个局部变量,该局部变量将覆盖以后对ENV1的调用。问题是,我需要由nodejs脚本读取这些环境变量,而这些
问题内容: 我正在尝试这样做 结果: null / build / 如何使用全局环境创建环境? 问题答案: 我认为您应该使用: 就像在“环境”步骤中一样,您正在定义环境变量,以后可以通过 env.your-variable-name访问
问题内容: 我正在使用声明性管道语法在Docker容器中执行一些CI工作。 我注意到,用于Jenkins的Docker插件使用主机中jenkins用户的用户ID和组ID运行一个容器(即,如果jenkins用户具有用户ID 100和组ID 111,它将运行管道以创建带有命令)。 我遇到了一些问题,因为该容器将以不存在的用户运行(特别是我遇到了用户没有主目录的问题)。所以我想到了创建一个Dockerf
我对Bitbucket管道(Beta版)和Docker很陌生,以前没有配置项集成的经验 我遵循了这个问题,但是对于初学者没有明确的描述 我正在尝试使用docker容器为Android项目在Bitbucket管道中设置持续集成(CI) 我遵循的步骤 步骤1.已安装Docker软件工具。已成功安装。 第二步。已成功创建虚拟机 错误出现: Docker-机器详细信息 码头机环境
我刚开始使用Jenkins声明性管道。在我支持一些类似的项目时,我考虑将类似的管道步骤(甚至阶段)放入可重用的构建块中。这些区块应保持在一个中心点,然后由单独的管道包括在内(例如:干燥)。 我将共享库视为脚本化管道的一个选项,但我不确定它是否也适用于声明性管道。 你知道在Jenkins声明性管道中使用像构建块这样的东西的方法吗? 举例说明: 如果您有一个用于Maven项目的标准管道(例如Sprin
问题内容: 我 又 通过詹金斯声明管道运行的泊坞权限问题。我想通过Docker容器中的Jenkins作业构建和发布Python包: 但是,由于以下原因,我不被允许: + python -m pip install -r requirements.txt –user –no- cache要求已经满足:/usr/local/lib/python3.7/site-packages中的setuptools
问题内容: 我有一个在Jenkins主服务器上运行过的Jenkins声明式管道,并且运行良好。但是,既然我已经尝试在从属节点上执行此操作,则在管道中调用的常规脚本无法访问工作空间中的文件。 我的jenkinsfile看起来像这样… 我可以在从站上看到它正在创建工作区,从git进行检出并正确执行脚本。但是,如果脚本中的某些内容尝试与工作空间中的文件进行交互,它将失败。 如果我有这样简单的事情… …它
我有一个Jenkins声明性管道,我一直在Jenkins master上运行,它工作得很好。但是,现在我已经开始尝试在从属节点上执行此操作,管道中调用的groovy脚本无法访问工作区中的文件。 我的文件看起来像这样。。。 我可以在从机上看到它正在创建工作区,从git执行签出,并正确执行脚本。但是,如果脚本中的某些内容尝试与工作区中的文件交互,则会失败。 如果我有像这样简单的东西... ...它说找