向Jenkins阵地发起猛烈冲锋!前夕~

175 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情

大家好,我是Java步兵营的二排长,首先需要申明一下组织上并未给我下发任何任务,我是自发组织进攻Jenkins阵地的。今天是发起进攻的前一日,我先行一步深入敌人内部打探敌人的虚实!

image.png

主线任务:占领Jenkins

本次需要占领的高地是Jenkins,为啥要拿下它:

  • 对于研发工程师而言,Jenkins可以帮助我们自动化化构建与持续集成
  • 对于测试工程师而言,Jenkins可以协助进行自动化测试
  • 对于运维工程师而言,Jenkins可以协助进行自动化部署

据线人可靠消息它是一款使用Java语言开发的开源的自动化服务器。据说功能十分强大,通过界面点击或Jenkinsfile就可以执行相应的任务。Shift!看来这次又有一场硬仗要打!

DevOps

据说Jenkins与DevOps有密切联系,所以我打算先从DevOps所在地溜一圈,经过实地考察了解到原来DevOps是Development和Operations两个营合并的,Dev是软件开发营,Ops是IT运维营。他们都听从DevOps的统一指挥。通过自动化软件交付和架构变更的流程,使得项目从构建、测试、发布都更加便捷和可靠。

image.png

pipeline流水线

从DevOps阵地撤出时,我独自驾车驶往Jenkins阵地的pipeline流水线道路上疾驰,不得不说敌人的这条“高速公路”修的真是好,完美的用自动化形式展现了从软件版本控制库到用户的过程。给大伙看看pipeline长啥样:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Hello World'
            }
        }
    }
    post {
        failure{
            mail to: 'xxxx@qq.com',subject:'pipeline failed :{' 
        }
    }
}

稍稍解释一下这个结构:

  • pipeline:代表整条流水线,包含执行逻辑
  • agent:指定流水线的执行位置(物理机、虚拟机或Docker)
  • stages:流水线中多个stage的容器,至少包含一个stage
  • stage:可以理解为一个阶段。每个阶段都要有一个名字(例如:Build就是名字)
  • steps:代表阶段中一个或多个步骤(例如:echo就是一个步骤)
  • post:整个pipeline或阶段完成后一些附加步骤,是可选的

根据pipeline或阶段完成状态,post部分分成多种条件块,包括:

  • always:不论当前完成状态是什么都执行
  • changed:只要当前完成状态和上次完成状态不同就执行
  • fixed:上次完成状态为失败或不稳定,本次完成成功时执行
  • regression:上一次完成状态为成功,当前完成状态为失败、不稳定或中止时执行
  • aborted:当前执行结果是中止状态时执行
  • failure:当前完成状态为失败时执行
  • success:当前完成状态为成功时执行
  • unstable:当前完成状态为不稳定时执行
  • cleanup:清理条件块。不论当前完成状态是什么,在其他所有条件块执行完成后都执行

两座狙击塔

Jenkins中编辑流水线式,有两种不同的语法样式:

  • 脚本式语法(scripted syntax):是Jenkins最开始实现的流水线,是一种在流水线脚本中定义逻辑和程序流程。对Groovy依赖颇深
//脚本式流水线
node('work_node1'){
    stage('source'){
        //从仓库获取代码
        git 'git@xxxx:/xx/xx/shop.git'
    }
    stage('Compile'){
        //运行gradle进行编译和单元测试
        sh 'gradle clean compileJava test'
    }
}
  • 声明式语法(declarative syntax):是Jenkins提供的新选择。清晰的段落描述着每块区域的逻辑,显得更加有层次
//声明式流水线
pipeline {
    agent {label 'worker_node1'}
    stages {
        stage('source') {
            steps {
                //从仓库获取代码
                git 'git@xxxx:/xx/xx/shop.git'
            }
        }
    }
    stage('Compile'){
        //运行gradle进行编译和单元测试
        sh 'gradle clean compileJava test'
    }
}

返程

今日情报收获满满,次日开始进行作战!计划第一日作战如下如下:

  • 利用Docker安装Jenkins
  • 配置Jenkins周边环境
  • 制作一个简单的构建案例