Jenkinsfile 踩过的坑

本文探讨了在Jenkins中配置特定Build Job时遇到的问题,特别是在传递参数与调用方法时发生的异常。通过分析错误日志,揭示了未正确定义参数导致的执行失败,并提供了可能的解决方案。
部署运行你感兴趣的模型镜像

1. 

未在properties 中定义,

build job 使用时,也未携带parameter

```

build job: 'ema/ema-internal-create-learn-instance', wait: true, parameters: [

    string( name: 'K8S_NAMESPACE', value: k8sNamespace ),
    string( name: 'INSTANCE_NAME', value: instanceName ),
    string( name: 'STACK', value: stackType ),
    string( name: 'LEARN_BRANCH', value: learnBranch ),
    string( name: 'LEARN_VERSION', value: learnVersion ),
    string( name: 'ULTRA_BRANCH', value: ultraBranch ),
    string( name: 'ULTRA_VERSION', value: ultraVersion ),
    textParam( name: 'INSTANCE_PROPERTIES', value: env.INSTANCE_PROPERTIES ),
    textParam( name: 'DEV_FEATURES', value: env.DEV_FEATURES ),
    string( name: 'S3_K8S_SECRET', value: s3K8sSecret ),
    booleanParam( name: 'USE_AURORA', value: false ),
    booleanParam( name: 'USE_NEWRIELIC', value: true ),
    string( name: 'BUILD_USER_EMAIL', value: env.BUILD_USER_EMAIL ),
    string( name: 'LEARN_CPU_REQUEST', value: env.LEARN_CPU_REQUEST ),
    string( name: 'LEARN_CPU_LIMITS', value: env.LEARN_CPU_LIMITS ),
    string( name: 'LEARN_LIVENESS_CHECK_PERIOD', value: env.LEARN_LIVENESS_CHECK_PERIOD ),
    string( name: 'LEARN_LIVENESS_TIMEOUT', value: env.LEARN_LIVENESS_TIMEOUT ),
    string( name: 'LEARN_MEM_REQUEST', value: env.LEARN_MEM_REQUEST ),
    string( name: 'LEARN_MEM_LIMITS', value: env.LEARN_MEM_LIMITS ),
    string( name: 'POSTGRES_CPU_REQUEST', value: env.POSTGRES_CPU_REQUEST ),
    string( name: 'POSTGRES_CPU_LIMITS', value: env.POSTGRES_CPU_LIMITS ),
    string( name: 'POSTGRES_MAINTENANCE_WORK_MEM', value: env.POSTGRES_MAINTENANCE_WORK_MEM ),
    string( name: 'POSTGRES_MAX_CONNECTIONS', value: env.POSTGRES_MAX_CONNECTIONS ),
    string( name: 'POSTGRES_MEM_REQUEST', value: env.POSTGRES_MEM_REQUEST ),
    string( name: 'POSTGRES_MEM_LIMITS', value: env.POSTGRES_MEM_LIMITS ),
    string( name: 'POSTGRES_SHARED_BUFFERS', value: env.POSTGRES_SHARED_BUFFERS ),

  ]

```

但在job运行程序中,使用 

ultraRouterVersion = params.ULTRA_ROUTER_VERSION

发生如下exception

hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: groovy.lang.MissingPropertyException.call() is applicable for argument types: (java.lang.String) values: [Failed to send notification by slack!]
Possible solutions: wait(), any(), wait(long), any(groovy.lang.Closure), each(groovy.lang.Closure), collect()
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:131)
	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:159)
	at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
	at WorkflowScript.notifySlack(WorkflowScript:519)
	at WorkflowScript.withSlackNotification(WorkflowScript:482)
	at WorkflowScript.withNode(WorkflowScript:210)
	at ___cps.transform___(Native Method)
	at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
	at sun.reflect.GeneratedMethodAccessor106.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
	at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
	at com.cloudbees.groovy.cps.Next.step(Next.java:83)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
	at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122)
	at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261)
	at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$101(SandboxContinuable.java:34)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.lambda$run0$0(SandboxContinuable.java:59)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:58)
	at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:332)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$200(CpsThreadGroup.java:83)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:244)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:232)
	at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:131)
	at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
	at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Finished: FAILURE

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

<think> 嗯,用户询问的是Jenkins如何部署项目上线,这是一个典型的持续集成/持续部署(CI/CD)场景。从问题本身来看,用户可能是刚接触Jenkins的运维或开发人员,需要从零开始搭建自动化部署流程。 用户没有说明具体技术栈,所以回答需要覆盖通用流程。首先得解释核心概念:Jenkins通过拉取代码、执行构建、部署到服务器来实现自动化。考虑到用户可能是新手,步骤分解要足够细致,比如从安装到配置流水线的全过程。 关键环节包括:安装前的Java环境准备(这是新手常)、插件安装推荐(Git/Maven/SSH这些必装插件)、凭证配置的安全注意事项。在部署部分,手动触发和Webhook自动触发两种模式都要说明,因为不同团队需求不同。 关于部署方式,决定重点讲SSH和容器化两种最常见方案。SSH部分强调密钥配置和目录权限,这是实际部署时的高频问题点;容器化则给出Dockerfile示例,毕竟现在用K8s的团队越来越多。最后补充部署验证环节,因为上线成功与否需要明确判断标准。 想到用户可能遇到的延伸问题:比如如何处理部署失败回滚?如何优化构建速度?这些正好作为推荐的后续问题。要确保三个问题覆盖不同层次——从基础配置到高级优化,这样用户能根据自身需求选择深入方向。 特别注意格式要求:代码块用```包裹,相关问题必须以“§§相关问题§§”开头且不换行。检查过所有步骤没有换行符干扰,Python示例也正确使用了语法高亮。 </think> Jenkins部署项目上线的基本流程如下(以Java Web项目为例): ### 核心步骤 1. **安装配置Jenkins** ```bash # Ubuntu示例 wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add - sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt update && sudo apt install jenkins openjdk-11-jdk ``` 2. **创建流水线任务** - 新建任务 → 选择「流水线」 - 配置SCM仓库地址和凭证(Git/SVN) ```groovy // Jenkinsfile示例 pipeline { agent any stages { stage('Build') { steps { sh 'mvn clean package' // Maven项目构建 } } stage('Deploy') { steps { sshPublisher( publishers: [ sshPublisherDesc( configName: 'prod-server', // 预配置的SSH服务器 transfers: [ sshTransfer( sourceFiles: 'target/*.war', remoteDirectory: '/opt/tomcat/webapps' ) ] ) ] ) } } } } ``` 3. **部署方式选择** - **SSH部署**(常用): 1. 安装「Publish Over SSH」插件 2) 配置目标服务器SSH密钥:`系统管理 → 系统配置 → SSH Servers` - **容器化部署**: ```Dockerfile FROM tomcat:9 COPY target/app.war /usr/local/tomcat/webapps ``` 在Jenkinsfile中添加镜像构建和推送步骤 4. **触发部署** - 手动触发:控制台点击「立即构建」 - 自动触发:配置Webhook(Git push后自动触发) 5. **部署后验证** ```bash # 在目标服务器验证 curl -I http://localhost:8080/app tail -f /opt/tomcat/logs/catalina.out ``` ### 关键注意事项 1. 确保Jenkins服务器有构建环境(JDK/Maven/Node.js) 2. 生产环境凭据使用Jenkins的「Credentials Binding」功能加密 3. 重要操作添加人工审核阶段(使用`input`步骤) 4. 建议使用蓝绿部署或滚动更新策略降低风险
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马少芳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值