首页 > 其他分享 >六、流水线简单使用

六、流水线简单使用

时间:2023-05-23 20:34:08浏览次数:38  
标签:URL 简单 echo BUILD env 使用 Jenkins 流水线 Jenkinsfile

一、简单例子

Jenkins流水线是通过Jenkinsfile配置文件配置的。Jenkinsfile文遵循Groovy风格的规范。项目从开发到部署一般都经历,构建,测试,部署三个阶段。现在用流水线模拟这个过程(使用上个例子的my_pipeline项目):
 

 

 

将Jenkinsfile改成:

pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                echo 'Building..'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing..'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying....'
            }
        }
    }
}

 

 

构建成功后,查看控制台输出。stages是一系列阶段,steps是每个阶段要执行的步骤。

二、如何创建Jenkins流水线

  1. 通过Blue Ocean -在Blue Ocean 中建立管道项目后,Blue Ocean UI可以帮助您编写管道的Jenkinsfile并将其提交给源代码管理。
  2. 通过经典UI,您可以通过经典UI直接在Jenkins中输入基本的Pipeline。
  3. 在SCM中,您可以手动编写Jenkinsfile,并将其提交到项目的源代码管理存储库中。

Blue Ocean是Jenkins 插件,后面再谈。上个例子就是通过经典UI创建的流水线。

三、使用环境变量

Jenkins Pipeline通过全局变量env公开环境变量,该变量可从Jenkinsfile中的任何位置获得。Jenkins Pipeline中可访问的环境变量的完整列表记录在{YOUR_Jenkins_URL}/pipeline-syntax/globals#env中,其中包括:

BUILD_ID

当前构建ID,与Jenkins版本1.597+中创建的构建的build_NUMBER相同

BUILD_NUMBER

当前内部版本号,例如“153”

BUILD_TAG

字符串jenkins-${JOB_NAME}-${BUILD_NUMBER}。方便地放入资源文件、jar文件等中,以便于识别。

BUILD_URL

可以在其中找到此生成结果的URL(例如http://buildserver/jenkins/job/MyJobName/17/ )

EXECUTOR_NUMBER

唯一编号,用于标识执行此生成的当前执行器(在同一机器的执行器中)。这是在“生成执行器状态”中看到的数字,只是数字从0开始,而不是1

JAVA_HOME

如果作业被配置为使用特定的JDK,则此变量被设置为指定JDK的JAVA_HOME。设置此变量后,PATH也会更新为包括JAVA_HOME的bin子目录

JENKINS_URL

Jenkins的完整URL,例如https://example.com:port/jenkins/(注意:只有在“系统配置”中设置了Jenkins URL时才可用)

JOB_NAME

此生成的项目的名称,例如“foo”或“foo/bar”。

NODE_NAME

当前生成正在运行的节点的名称。

WORKSPACE

工作空间的绝对路径

例子:修改my_pipeline的Jenkinsfile为:
 

 

pipeline {
    agent any

    stages {
        stage('Example') {
            steps {
                echo "BUILD_ID is  ${env.BUILD_ID}"
                echo "BUILD_NUMBER is  ${env.BUILD_NUMBER}"
                echo "BUILD_TAG is  ${env.BUILD_TAG}"
                echo "BUILD_URL is  ${env.BUILD_URL}"
                echo "EXECUTOR_NUMBER is  ${env.EXECUTOR_NUMBER}"
                echo "JAVA_HOME is  ${env.JAVA_HOME}"
                echo "JENKINS_URL is  ${env.JENKINS_URL}"
                echo "JOB_NAME is  ${env.JOB_NAME}"
                echo "NODE_NAME is  ${env.NODE_NAME}"
                echo "WORKSPACE is  ${env.WORKSPACE}"
            }
        }
    }
}

构建完成后查看控制台输出:
 

 

上面的是内置的环境变量,现在来自定义环境变量,修改Jenkinsfile为:

pipeline {
    agent any
    environment { 
        CC = 'clang'
    }
    stages {
        stage('Example') {
            steps {
                echo "CC is ${env.CC}"
            }
        }
    }
}

构建成功后查看控制台输出:
 

 

环境变量可以在运行时设置,并且可以由shell脚本(sh)、Windows批处理脚本(bat)和PowerShell脚本(PowerShell)使用。每个脚本都可以是returnStatus或returnStdout。修改Jenkinsfile为:

pipeline {
    agent any
    environment { 
         CC = """${sh(
            returnStdout: true,
            script: 'echo "clang"'
        )}""" 
   
     EXIT_STATUS = """${sh(
            returnStatus: true,
            script: 'exit 1'
        )}"""
    }
    stages {
        stage('Example') {
            steps {
                echo "CC is ${env.CC}"
                echo "EXIT_STATUS is ${env.EXIT_STATUS}"
            }
        }
    }
}

构建成功后查看控制台输出:
 

 

字符串插值

Jenkins Pipeline使用与Groovy相同的规则进行字符串插值。Groovy支持用单引号或双引号声明字符串,例如:

def singlyQuoted = 'Hello'
def doublyQuoted = "World"

只有后一个字符串将支持基于美元符号($)的字符串插值,例如:

def username = 'Jenkins'
echo 'Hello Mr. ${username}'
echo "I said, Hello Mr. ${username}"

输出:

Hello Mr. ${username}
I said, Hello Mr. Jenkins
敏感环境变量的插值

Groovy字符串插值可能会泄露敏感的环境变量(即凭据)。这是因为敏感的环境变量将在Groovy评估期间进行插值,并且环境变量的值可能比预期的更早可用,从而导致敏感数据在各种上下文中泄漏。要避免字符串可以使用单引号。

通过插值注入

另一个注意事项。对用户控制的变量使用Groovy字符串插值,步骤将参数传递给命令解释器,如sh、bat、powershell或pwsh步骤,可能会导致类似于SQL注入的问题。当使用Groovy插值将包含特殊字符(例如/$&%^><|;)的用户控制变量(通常是环境变量,通常是传递给构建的参数)传递给sh、bat、powershell或pwsh步骤时,就会发生这种情况。举个简单的例子:

pipeline {
  agent any
  parameters {
    string(name: 'STATEMENT', defaultValue: 'hello; ls /', description: 'What should I say?')
  }
  stages {
    stage('Example') {
      steps {
        sh("echo ${params.STATEMENT}")
      }
    }
  }
}

执行sh时会执行echo hello; ls /。会输出hello,同时会将根目录列举出来。修改Jenkinsfile,构建项目查看控制台输出:
 

 

使用参数

声明性管道支持开箱即用的参数,允许管道在运行时通过parameters指令接受用户指定的参数。修改Jenkinsfile为:

pipeline {
    agent any
    parameters {
        string(name: 'Greeting', defaultValue: 'Hello', description: 'How should I greet the world?')
    }
    stages {
        stage('Example') {
            steps {
                echo "${params.Greeting} World!"
            }
        }
    }
}

构建成功后查看控制台输出:
 

标签:URL,简单,echo,BUILD,env,使用,Jenkins,流水线,Jenkinsfile
From: https://www.cnblogs.com/shigongp/p/17426175.html

相关文章

  • 在Express中使用Swagger
    Swagger是什么?Swagger是一种规范,用于描述API的结构,功能和参数。它是一种开源工具,可通过该工具生成API文档,用于开发和测试。使用Swagger可以提供清晰的可视化API文档,可用于API交互的文档驱动开发,以及API的自动化测试和集成。Swagger已经成为API设计和开发中的必备工具。如何在Exp......
  • NLog使用
    Nlog日志组件的使用这个博文关注.netframework下的NLog日志组件的使用.在项目中需要将日志写到日志文件中,另外一些重要信息要显示在界面上.使用NLog可以轻松做到这点.NLogwiki页面nuget安装两个主要组件NLogNLog.Windows.Forms使用总结日志文件layout按......
  • C# 读取网络上下行(不要使用性能计数器的方式)
    C#读取网络上下行有多种方式,其中有一种是使用System.Net.NetworkInformation命名空间中的NetworkInterface类和PerformanceCounter类,该方式其实读的是windows系统的性能计数器中的NetworkInterface类别的数据。方式如下:NetworkInterfacenetworkInterface=NetworkInterface......
  • 记录--使用率比较低的10个Web API
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助avaScript中有些API可能使用率比较低,下面我们逐一介绍它们的用法和使用场景。至于标题,主要是想让你进来看看,兄弟们别打我!BlobAPIBlobAPI用于处理二进制数据,可以方便地将数据转换为Blob对象或从Blob对象读取数......
  • mac docker compose简单使用说明
    1dockercompose简介Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用Compose通过一个配置文件来管理多个-Docker容器,非常适合组合使用多个容器进行开发的场景。docker-compose是编排容器的。例如,你有一个php镜像,一个mysql镜像,一个nginx镜像。如果没......
  • mac的截图及sips使用心得
    1-mac推荐截图工具从ubuntu切换到Mac,最放不下手的其实是一个叫flameshot的截图工具,确实是ubuntu系统的神器,但是渐渐熟悉mac后发现mac才是各种大杀器的集合地,今天想谈到的就是截图工具,初接触mac的时候,几乎接触了mac大多数别人推荐的截图工具,如下所示:系统截图工具;微信截图工具;浏览器......
  • docker学习笔记:harbor私有仓库的搭建以及简单应用
    harbor私有仓库简介Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的DockerRegistry管理项目,它包括权限管理(RBAC)、LDAP、日志审......
  • Day01-Typora工具使用
    Markdown学习二级标题三级标题四级标题 字体helloworldhelloworldhelloworldhelloworld 引用学习java第一天 分割线 图片 超链接点击跳转到小兔子的博客 列表ABCABC 表格快捷键⌘+⌥+T姓名性别年纪张......
  • .Net使用HttpClient以multipart/form-data形式post上传文件及其相关参数
    httpClient模仿Postman的form-data格式 api接口[HttpPost(Name="/Test/FileTest")]publicJGResponse<PutFileByNameResponse>FileTest([FromForm]PutFileByNameRequestrequestDto){varcapthch=GetCaptcha();......
  • APlayer & MetingJS 音乐播放器使用指南
    1.介绍APlayer是一个简洁漂亮、功能强大的Html5音乐播放器,GitHub地址:https://github.com/DIYgod/APlayerMetingJS是为APlayer添加网易云、QQ音乐等支持的插件,GitHub地址: https://github.com/metowolf/MetingJS2.安装引用三个文件APlayer.min.js  APlayer.min.css ......