jenkins + pipeline构建自动化部署

一、引言

Jenkins 2.x的精髓是Pipeline as Code,那为什么要用Pipeline呢?jenkins1.0也能实现自动化构建,但Pipeline能够将以前project中的配置信息以steps的方式放在一个脚本里,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程,形成流水式发布,构建步骤视图化。简单来说,Pipeline适用的场景更广泛,能胜任更复杂的发布流程。举个例子,job构建工作在master节点,自动化测试脚本在slave节点,这时候jenkins1.0就无法同时运行两个节点,而Pipeline可以。

二、Pipeline的几个基本概念:

  • Stage: 阶段,一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作。注意,Stage是一个逻辑分组的概念,可以跨多个Node。
  • Node: 节点,一个Node就是一个Jenkins节点,或者是Master,或者是slave,是执行Step的具体运行期环境。
  • Step: 步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenkins Plugin提供。

三、PIpeline语法

1.Pipeline支持两种语法:Declarative Pipeline(在Pipeline 2.5中引入,结构化方式)和Scripted Pipeline,两者都支持建立连续输送的Pipeline。
共同点:
两者都是pipeline代码的持久实现,都能够使用pipeline内置的插件或者插件提供的steps,两者都可以利用共享库扩展。
区别:
两者不同之处在于语法和灵活性。Declarative pipeline对用户来说,语法更严格,有固定的组织结构,更容易生成代码段,使其成为用户更理想的选择。但是Scripted pipeline更加灵活,因为Groovy本身只能对结构和语法进行限制,对于更复杂的pipeline来说,用户可以根据自己的业务进行灵活的实现和扩展。下面举例介绍两种语法的使用。

2.Scripted Pipeline

node(‘master‘) {     //master节点运行,以下stage也可指定node
    stage ‘Prepare‘  //清空发布目录
        bat ‘‘‘if exist D:\\publish\\LoginServiceCore (rd/s/q D:\\publish\\LoginServiceCore)
               if exist C:\\Users\\Administrator\\.nuget (rd/s/q C:\\Users\\Administrator\\.nuget)
               exit‘‘‘

    //拉取git代码仓库
    stage ‘Checkout‘
        checkout([$class: ‘GitSCM‘, branches: [[name: ‘*/master‘]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],
            userRemoteConfigs: [[credentialsId: ‘c6d98bbd-5cfb-4e26-aa56-f70b054b350d‘,
            url: ‘http://xxx/xxx/xxx‘]]])

    //构建
    stage ‘Build‘
        bat ‘‘‘cd "D:\\Program Files (x86)\\Jenkins\\workspace\\LoginServiceCore\\LoginApi.Hosting.Web"
            dotnet restore
            dotnet build
            dotnet publish --configuration Release --output D:\\publish\\LoginServiceCore‘‘‘

    //部署
    stage ‘Deploy‘
        bat ‘‘‘
        cd D:\\PipelineScript\\LoginServiceCore
        python LoginServiceCore.py
        ‘‘‘

//自动化测试(python代码实现)
    stage ‘Test‘
        bat‘‘‘
        cd D:\\PipelineScript\\LoginServiceCore
        python LoginServiceCoreApitest.py
        ‘‘‘
}

3.Declarative Pipeline

pipeline {
    agent any                 //在可用的节点运行,我这里只配了master
    stages{

stage (‘Prepare‘){
            steps{          //清空发布目录
                bat ‘‘‘if exist D:\\publish\\LoginServiceCore (rd/s/q D:\\publish\\LoginServiceCore)
                       if exist C:\\Users\\Administrator\\.nuget (rd/s/q C:\\Users\\Administrator\\.nuget) exit‘‘‘ } } 
      //拉取git代码仓库
      stage (‘Checkout‘){
            steps{
                checkout([$class: ‘GitSCM‘, branches: [[name: ‘*/master‘]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],
                    userRemoteConfigs: [[credentialsId: ‘c6d98bbd-5cfb-4e26-aa56-f70b054b350d‘,
                    url: ‘http://xxx/xxx/xxx‘]]])
            }
        }

    //构建
    stage (‘Build‘){
        steps{
        bat ‘‘‘cd "D:\\Program Files (x86)\\Jenkins\\workspace\\LoginServiceCore\\LoginApi.Hosting.Web"
            dotnet restore
            dotnet build
            dotnet publish --configuration Release --output D:\\publish\\LoginServiceCore‘‘‘
            }
        }

    //部署
    stage (‘Deploy‘){
        steps{
            bat ‘‘‘
            cd D:\\PipelineScript\\LoginServiceCore
            python LoginServiceCore.py
            ‘‘‘
            }
        }

    //自动化测试(python代码实现)
    stage (‘Test‘){
        steps{
            bat‘‘‘
            cd D:\\PipelineScript\\LoginServiceCore
            python LoginServiceCoreApitest.py
            ‘‘‘
            }
        }
    }
    }

四、Pipeline配置

1.新建一个“流水线”的job

2.配置Pipeline脚本。

3.Pipeline也支持Poll SCM

4.保存->立即构建

五、总结

Pipeline可以很方便实现流水式的持续交付,执行阶段通过视图一目了然。更过详细的资料可以访问官方文档 https://jenkins.io/doc/book/pipeline/

原文地址:https://www.cnblogs.com/shenh/p/8963688.html

时间: 2024-10-08 17:04:04

jenkins + pipeline构建自动化部署的相关文章

Jenkins+Gitlab+Ansible自动化部署(六)

Pipeline Job实现Nginix+MySQL+PHP+Wordpress实现自动化部署交付(Jenkins+Gitlab+Ansible自动化部署(五)https://www.cnblogs.com/zd520pyx1314/p/10249094.html) 环境准备 编写ansible playbook脚本实现Wordpress远程部署 将wordpress源码与playbook部署脚本提交到gitlab仓库 编写pipeline job脚本实现Jenkins流水线持续交付流程 Jen

Linux-GitLab+Jenkins持续集成+自动化部署

GitLab+Jenkins持续集成+自动化部署 什么是持续集成? (1)Continuous integration (CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过自动化的构建(包括编译.发布.自动化测试)来验证,从而尽快地发现集成错误.许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件. (2)没有持续集成 项目做模块集成的时候,发现很多接口都不通==>浪费大量时间 需

centos7+docker+Jenkins+svn搭建自动化部署平台

centos7+docker+Jenkins+svn搭建自动化部署平台 1. centos7 参考链接:http://www.macrozheng.com/#/reference/linux_install tips 公司服务器配置(1T机械+256固态+i7的u) 需要我们把系统,环境(java,mysql,redis,docker等)装到固态上(速度快),我们的代码放到机械上.分区情况如下图 2. centos7中安装docker1.31.1 自行百度,此处无坑 3. centos7安装配置

基于Jenkins+Gitlab的自动化部署实战

故事背景 一个中小型企业,是典型的互联网公司,当初期的时候可能运维只能标配到2~3人,此时随着公司的发展,项目会逐渐增多.前期部署项目可能都是手动的, 俗称"人肉部署",这简直是无比的痛苦,不能忍受的.这样开发的时间也会耽误,运维的时间也会耽误,全都浪费在这些重复性的工作上面,毫无价值可言, 这时候运维终于忍受不了,上了脚本.但是慢慢的发现项目依旧在增长,脚本每次还要更改给开发,效率低下,后来测试环境以及开发环境直接上了jeknins, 每台开发机器是jeknins agent端,自此

Jenkins+Ansible+Gitlab自动化部署三剑客

最近一直在学习Ansible的一些playbook的写法, 所以一直没有怎么更新, 想到目前大家对诸如saltstack, docker, Ansible等自动化部署相关的工具很感兴趣, 但又苦于没有可学习的中文实例, 这里我就把我这几个月所接触到目前国外比较流行的部署经验给大家分享一下. 首先给大家介绍的是Ansible, 恩, 重要的问题说三遍, 不是Saltstack, Ansible作为一个python写的自动化部署工具, 确实较之前我所接触的Chef, saltstack, puppe

Docker+Jenkins+Go完成自动化部署

安装docker 安装所需的包.yum-utils提供了yum-config-manager 效用,并device-mapper-persistent-data和lvm2由需要 devicemapper存储驱动程序. yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 使用以下命令设置稳定存储库. yum-config-manager \ --add-repo \ https://download.docker.com/

Jenkins+Ansible+Gitlab自动化部署三剑客(五)--Jenkins 参数集成

Jenkins 参数集成 1.新建项目 2.添加选项 #!/bin/sh echo "Current deploy environment is $deploy_env" echo "The build is $version" echo "The paasword is $pass" if $bool then echo "Request is approved" else echo "Request is rej

Jenkins+Ansible+Gitlab自动化部署三剑客(二)--ansible

Ansible简介 Ansible是一个开源部署工具 开发语言:python 特点:SSH协议通讯,全平台,无需编译,模块化部署管理 作用:推送Playbook进行远程节点快速部署 Ansible与Chef,Saltstack的区别 Chef Ruby语言编写,C/S架构,配置需要Git依赖,Recipe脚本编写规范,需要编程经验 Saltstack Python语言编写,C/S架构,模块化配置管理,YAML脚本编写规范,适合大规模集群部署 Ansible Python语言编写,无Client,

Jenkins+Ansible+Gitlab自动化部署三剑客(八)--Jenkins ansible集成

Jenkins Ansible集成 准备工作 参考https://www.cnblogs.com/bk770466199/p/12259007.html完成以下准备工作 需要在jenkins服务器上,配置ansible2.5+python 3.6虚拟环境 配置jenkins.example.com主机到test.example.com主机的ssh免秘钥认证 配置ansible,创建testservers文件 1.新建项目 2.添加shell #!/bin/sh set +x source /ho