草庐IT

Jenkins Pipeline 流水线 - 声明式 Demo

VipSoft 2023-03-28 原文

Jenkins Pipeline 流水线
流水线既能作为任务的本身,也能作为 Jenkinsfile
使用流水线可以让我们的任务从UI手动操作,转换为代码化,像dockerfile 一样。从shell 命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来,

完整语法

tools:添加工具,如maven、JDK
triggers:基于hook模式触发流水线任务;
environment:声明全局通用的环境变量;
stages:定义任务步骤,即流程分段处理;
post.always:最终执行的动作;

pipeline {
    agent any
    tools {}  
    triggers {}
    environment {}
    stages {
        stage('步骤说明') {
            steps {
                echo ''
            }
        }
    }
    post { always {}}  //执行完任务后,处理
}

5个必备的组成部分

pipeline: 整条流水线
agent: 指定执行器
stages: 所有阶段
stage:某一阶段,可有多个
steps: 阶段内的每一步,可执行命令

  • agent:该部分指定整个Pipeline或特定阶段将在Jenkins环境中执行的位置,具体取决于该agent 部分的放置位置。该部分必须在pipeline块内的顶层定义 ,也可以使用在stage级。

  • stage:表示这个Pipeline的某一个执行阶段(使用stage使得逻辑变得更加简单明了)

  • steps: 包含一个或者多个在stage块中执行的step序列(在这里执行操作:运行maven或者部署等等)

  • environment:指定键值对,可用于step中,主要是为常量或者变量赋值,根据所在的位置来决定其作用范围(类似于java中全局和局部的概念)

  • options:允许执行pipeline内置的专用选项,也可以使用由插件提供的

  • parameters:提供触发pipeline时的参数列表

  • trigger:定义了触发pipeline的方式(jenkins1.x中的pollscm定时构建)

  • tools:自动安装工具,注意这里使用的一定是在jenkins全局配置中已经定义好了的

  • when:可以用来执行一些代码逻辑

  • post:可以根据pipeline的状态来执行一些操作

安装插件

  • Pipeline
  • Pipeline: Stage ViewVersion #不安装的话不会出来阶段视图

添加项目

添加项目,选择 Pipeline (流水线)

流水线

  1. 从SCM 获取(SVN或GIT)


2. 内嵌代码(学习用,这边先用内嵌方式)

pipeline {#整体定义
    agent any #任务交给某个节点执行(any 任意)

    stages {
        stage('拉取代码') { #每一步的操作
            steps { #具体执行内容
                echo '拉取成功'
            }
        }

        stage('执行构建') {
            steps {
                echo '构建完成'
            }
        }
    }
}



支持单独执行某个阶段

Jenkins 阶段视图不见了?安装:Pipeline: Stage ViewVersion,就可以出来了

有关Jenkins Pipeline 流水线 - 声明式 Demo的更多相关文章

  1. ruby-on-rails - active_admin 目录中的常量警告重新声明 - 2

    我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA

  2. ruby - 如何使用 method_missing 动态声明方法? - 2

    我有一个ruby​​程序,我想接受用户创建的方法,并使用该名称创建一个新方法。我试过这个:defmethod_missing(meth,*args,&block)name=meth.to_sclass我收到以下错误:`define_method':interningemptystring(ArgumentError)in'method_missing'有什么想法吗?谢谢。编辑:我以不同的方式让它工作,但我仍然很好奇如何以这种方式做到这一点。这是我的代码:defmethod_missing(meth,*args,&block)Adder.class_evaldodefine_method

  3. iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里 - 2

    当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在

  4. ruby - 在 Ruby 中声明 "private"/"protected"时实际发生了什么? - 2

    在Ruby类定义中声明private/protected时实际发生了什么?他们不是keywords,这意味着它们必须是方法调用,但我找不到它们的定义位置。它们似乎没有记录在案。声明private/protected方法(如下所示)的两种不同实现方式是否不同?(第二种方式显然是方法调用,但在第一种方式中并不那么明显。)classFooprivatedefi_am_private;enddefso_am_i;endendclassFoodefi_am_private;enddefso_am_i;endprivate:i_am_private,:so_am_iend

  5. Ruby 模块声明 - 2

    这个问题在这里已经有了答案:Ruby(andRails)nestedmodulesyntax(4个答案)关闭2年前。做和做有什么区别吗classBus::Driverend和moduleBusclassDriverendend如果不是,首选哪种语法?

  6. ruby - 访问在另一个 rb 文件中声明的变量 - 2

    这是一个关于包含.rb文件的初级问题。我想访问在另一个rb文件中声明的数组。我的主程序是这样的:#!/usr/bin/envrubyload'price.rb'[...]max_price=price[az][type]*2[...]这是price.rb:price={'us-east-1'=>{'t1.micro'=>0.02,'m1.small'=>0.08,'c1.medium'=>0.165,'m1.large'=>0.320},'us-west-1'=>{'t1.micro'=>0.02,'m1.small'=>0.08,'c1.medium'=>0.165,'m1.larg

  7. ruby-on-rails - 如何在 Rails 中使用 acts_as_taggable_on 声明标签别名? - 2

    acts_as_taggable_on实现效果很好,但我还需要声明标签别名。我找到了一个声称这样做的插件,acts_as_taggable_with_aliases,但最后一次提交是在2009年并且不在gem存储库中,所以我认为该项目现在已经死了。有什么办法可以实现吗? 最佳答案 也许你可以创建自己的模型来支持这个(以及你想要的任何其他东西)......我认为您可以通过执行以下操作来实现:classTagtrueendclassModelIWantToBeTagged:taggableendmoduleModelTaggingdef

  8. Ruby 在没有显式包含声明的情况下在子类上执行 self.included(base) 方法? - 2

    我有许多继承自一个父类(superclass)的类。作为模块定义的父类(superclass)。模块内部是一个设置一些实例变量的self.included(base)方法。所以像这样:moduleMyModuledefself.included(base)base.instance_variable_set("@my_instance_variable",{})endendclassMySuperClassincludeMyModuleendclassClassA除非我明确地将MyModule包含在ClassA和ClassB中,否则我的实例变量将不会在这两个类中设置。有没有办法确保在每

  9. ruby - 需要在 Ruby 中进行前向声明 - 2

    我正在尝试在一个文件中编写一个Ruby脚本。我想知道是否可以在开头编写“main”函数,然后定义main使用的其他函数。换句话说,我想调用一个尚未定义的函数,使它们不依赖于定义顺序。仅仅改变顺序是不可能的,因为它会给出一个“未定义的方法”错误。在C/C++中,我们使用前向声明...在Ruby中是否有类似的东西或其他解决方案? 最佳答案 您只需要在main函数运行时定义您调用的函数,而不是在定义时定义。因此,最简单的解决方案是在脚本的开头编写main函数,但在结尾调用它。defmainfoo(42)bar(24)end#definit

  10. ruby - 是否可以在 Ruby 中声明类型? - 2

    我想澄清一下,在Ruby中声明类型是不可能的还是没有必要?如果有人想声明数据类型是可能的。更新:我想问的是了解为不会改变类型的变量提供静态类型是否会在理论上提高性能。 最佳答案 C或Java等一些语言使用“强”或“静态”变量类型。Ruby是一种“动态类型”语言,也称为“鸭子类型”,这意味着当分配的数据类型发生变化时,变量会动态改变其自身的类型。因此,您不能将变量声明为某种严格类型,它始终是动态的。 关于ruby-是否可以在Ruby中声明类型?,我们在StackOverflow上找到一个类

随机推荐