JEKINS基础

pipeline

Jenkinsfile (Declarative Pipeline)
  pipeline {
      agent any 

      stages {
          stage('Build') { 
              steps { 
                  sh 'make' 
              }
          }
          stage('Test'){
              steps {
                  sh 'make check'
                  junit 'reports/**/*.xml' 
              }
          }
          stage('Deploy') {
              steps {
                  sh 'make publish'
              }
          }
      }
  }

  agent 表示Jenkins应该为Pipeline的这一部分分配一个执行者和工作区。
  stage 描述了这条Pipeline的一个阶段。
  steps 描述了要在其中运行的步骤 stage
  sh 执行给定的shell命令
  junit是由JUnit插件提供的 用于聚合测试报告的Pipeline步骤

可以通过以下任一方式创建基本Pipeline:

  • 直接在Jenkins网页界面中输入脚本。
  • 通过创建一个Jenkinsfile可以检入项目的源代码管理库。

直接在Jenkins网页界面中输入脚本

复杂的Pipeline难以在Pipeline配置页面的文本区域内进行写入和维护。为了使这更容易,Pipeline也可以写在文本编辑器中,并检查源控件,
作为Jenkinsfile,Jenkins可以通过Pipeline脚本从SCM选项加载的控件。
为此,在定义Pipeline时,从SCM中选择Pipeline脚本。

选择SCM选项中的Pipeline脚本后,不要在Jenkins UI中输入任何Groovy代码; 您只需指定要从其中检索Pipeline的源代码中的路径。
更新指定的存储库时,只要Pipeline配置了SCM轮询触发器,就会触发一个新构建。
第一行Jenkinsfile应该是#!/usr/bin/env groovy Jenkinsfile。

在SCM中定义管道

Jenkinsfile (Scripted Pipeline)
  node { 
      echo 'Hello World' 
  }

  node 在Jenkins环境中分配一个执行器和工作空间。
  echo 在控制台输出中写入简单的字符串

全局变量引用

除了代码片段生成器之外,Pipeline还提供了一个内置的“ 全局变量引用”。
像Snippet Generator一样,它也是由插件动态填充的。
与代码段生成器不同的是,全局变量引用仅包含Pipeline提供的变量的文档,这些变量可用于Pipeline。
在Pipeline中默认提供的变量是:

ENV
脚本化Pipeline可访问的环境变量,例如: env.PATH或env.BUILD_ID。

PARAMS
将为Pipeline定义的所有参数公开为只读 地图,例如:params.MY_PARAM_NAME。

currentBuild
可用于发现有关当前正在执行的Pipeline信息,与如属性currentBuild.result,
currentBuild.displayName等等请教内置的全局变量引用 了一个完整的,
而且是最新的,可用的属性列表currentBuild。

Pipeline 语法

agent
该agent部分指定整个Pipeline或特定阶段将在Jenkins环境中执行的位置,具体取决于该agent 部分的放置位置。
该部分必须在pipeline块内的顶层定义 ,但阶段级使用是可选的
any
在任何可用的代理上执行Pipeline或舞台。例如:agent any

none
当在pipeline块的顶层应用时,将不会为整个Pipeline运行分配全局代理,
并且每个stage部分将需要包含其自己的agent部分。例如:agent none

label
使用提供的标签在Jenkins环境中可用的代理上执行Pipeline或阶段性执行。例如:agent { label 'my-defined-label' }

node
agent { node { label 'labelName' } }行为相同 agent { label 'labelName' },但node允许其他选项(如customWorkspace)。

docker
执行Pipeline,或阶段执行,用给定的容器将被动态地供应一个节点预先配置成接受基于Docker-based Pipelines,
或匹配的任选定义的节点上 label的参数。 docker还可以接受一个args可能包含直接传递给docker run调用的参数的参数。
例如:agent { docker 'maven:3-alpine' }或
agent {
    docker {
        image 'maven:3-alpine'
        label 'my-defined-label'
        args  '-v /tmp:/tmp'
    }
}

dockerfile
使用从Dockerfile源存储库中包含的容器构建容器来执行Pipeline或阶段性执行 。
为了使用此选项,Jenkinsfile必须从多分支Pipeline或“Pipeline从SCM”加载。通常这是Dockerfile源库的根源:
agent { dockerfile true }。如果Dockerfile在另一个目录中建立,请使用以下dir选项:agent { dockerfile { dir 'someSubDir' } }。
您可以docker build ...使用该additionalBuildArgs选项将其他参数传递给命令,
如agent { dockerfile { additionalBuildArgs '--build-arg foo=bar' } }。

post
该post部分定义将在Pipeline运行或阶段结束时运行的操作。
一些条件后 的块的内支持post:部分 always,changed,failure,success,unstable,和aborted。
这些块允许在Pipeline运行或阶段结束时执行步骤,具体取决于Pipeline的状态。

条件
always
运行,无论Pipeline运行的完成状态如何。

changed
只有当前Pipeline运行的状态与先前完成的Pipeline的状态不同时,才能运行。

failure
仅当当前Pipeline处于“失败”状态时才运行,通常在Web UI中用红色指示表示。

success
仅当当前Pipeline具有“成功”状态时才运行,通常在具有蓝色或绿色指示的Web UI中表示。

unstable
只有当前Pipeline具有“不稳定”状态,通常由测试失败,代码违例等引起,才能运行。通常在具有黄色指示的Web UI中表示。

aborted
只有当前Pipeline处于“中止”状态时,才会运行,通常是由于Pipeline被手动中止。通常在具有灰色指示的Web UI中表示。

Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
    post { 
        always { 
            echo 'I will always say Hello again!'
        }
    }
}