1  开发模式

瀑布模型:

敏捷开发:

 DevOps

DevOps是敏捷研发中持续构建(Continuous Build,CB)、持续集成(Continuous Integration,CI)、持续交付(Continuous Delivery,CD)的自然延伸,从研发周期向右扩展到部署、运维,不仅打通研发的“需求、开发与测试”各个环节,还打通“研发”与“运维”。

2 Pipeline

Pipeline 即流水线,是 jenkins2.X 的新特性,是 jenkins 官方推荐使用的持续集成方案。使用 jenkins DSLGroovy 语言编写程序,用户可以定义流水线并执行各种任务。

 Pipeline 有两种语法,分别是声明式和脚本式

//声明式
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                // TODO
            }
        }
        stage('Test') {
            steps {
                // TODO
            }
        }
        stage('Deploy') {
            steps {
                // TODO
            }
        }
    }
}
//脚本式
node {
    stage('Build') {
        // TODO
    }
    stage('Test') {
        // TODO
    }
    stage('Deploy') {
        // TODO
    }
}

Pipeline 语法_w3cschool

agent:指明流水线运行节点,可用参数

  • any :在任何可用的机器上执行pipeline
  • none :当在pipeline顶层使用none时,每个stage需要指定相应的agent
  • label:在指定的机器上运行pipeline或者stage,

stage:表示这个Pipeline的某一个执行阶段

steps: 包含一个或者多个在stage块中执行的step序列

environment:指定一系列键值对,作为全局环境变量或阶段局部环境变量

options:允许在Pipeline本身内配置Pipeline专用选项

  • buildDiscarder:持久化工件和控制台输出,用于最近Pipeline运行的具体数量。例如:options { buildDiscarder(logRotator(numToKeepStr: '1')) }
  • disableConcurrentBuilds:不允许并行执行Pipeline。可用于防止同时访问共享资源等。例如:options { disableConcurrentBuilds() }
  • skipDefaultCheckout:在agent指令中默认跳过来自源代码控制的代码。例如:options { skipDefaultCheckout() }
  • skipStagesAfterUnstable:一旦构建状态进入了“不稳定”状态,就跳过阶段。例如:options { skipStagesAfterUnstable() }
  • timeout:设置Pipeline运行的超时时间,之后Jenkins应该中止Pipeline。例如:options { timeout(time: 1, unit: 'HOURS') }
  • retry:失败后,重试整个Pipeline指定的次数。例如:options { retry(3) }
  • timestamps:预处理由Pipeline生成的所有控制台输出运行时间与发射线的时间。例如:options { timestamps() }

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

trigger:定义了触发pipeline的方式

tools:自动安装工具

when:允许Pipeline根据给定的条件确定是否执行该阶段

  • branch:当正在构建的分支与给出的分支模式匹配时执行stage,例如:when { branch 'master' }。请注意,这仅适用于多分支Pipeline。
  • environment:当指定的环境变量设置为给定值时执行stage,例如: when { environment name: 'DEPLOY_TO', value: 'production' }
  • expression:当指定的Groovy表达式求值为true时执行stage,例如: when { expression { return params.DEBUG_BUILD } }
  • not:当嵌套条件为false时执行stage。必须包含一个条件。例如:when { not { branch 'master' } }
  • allOf:当所有嵌套条件都为真时,执行stage。必须至少包含一个条件。例如:when { allOf { branch 'master'; environment name: 'DEPLOY_TO', value: 'production' } }
  • anyOf:当至少一个嵌套条件为真时执行stage。必须至少包含一个条件。例如:when { anyOf { branch 'master'; branch 'staging' } }

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

  • always:运行,无论Pipeline运行的完成状态如何。
  • changed:只有当前Pipeline运行的状态与先前完成的Pipeline的状态不同时,才能运行。
  • failure:仅当当前Pipeline处于“失败”状态时才运行,通常在Web UI中用红色指示表示。
  • success:仅当当前Pipeline具有“成功”状态时才运行,通常在具有蓝色或绿色指示的Web UI中表示。
  • unstable:只有当前Pipeline具有“不稳定”状态,通常由测试失败,代码违例等引起,才能运行。通常在具有黄色指示的Web UI中表示。
  • aborted:只有当前Pipeline处于“中止”状态时,才会运行,通常是由于Pipeline被手动中止。通常在具有灰色指示的Web UI中表示。

3 搭建流水线

3.1 jenkins流水线

 

 然后编写流水线语句

pipeline {
  agent any
  
  environment{
    command = "curl"
  }
  
  stages {
    stage('执行步骤1') {
       steps{
          echo 'the number one start'
          sh "whoami"
          sh "$command www.baidu.com"
       }
    }
    stage('执行步骤2'){
       steps{
          echo 'the number two start'
          sh "javac -version"
        }
    }
  }
  
  post{
    success{
      echo 'pipeline success'
    }
  }
  
}

 3.2 GItLab流水线

在一个项目中,GitLab CI/CD 流水线通过使用名为 .gitlab-ci.yml 的 YAML 格式文件进行配置。配置参数如下:

参数作用描述
scriptscript是job所需要的唯一必须的参数。它是一个由Runner执行的shell脚本
image用于指定用于job的Docker镜像。
services用于指定服务的Docker镜像,链接到镜像中指定的基本镜像。
before_script用于定义应在所有作业(包括部署作业)之前运行但在恢复工件之后运行的命令。这可以是数组或多行字符串。
after_script用于定义将在所有作业(包括失败的作业)之后运行的命令。这必须是数组或多行字符串。
stages用于定义可由作业使用的阶段,并在全范围内定义。
stagestage是按工作定义的,依赖于全局定义的阶段。它允许将作业分组到不同的阶段,并且同一阶段的作业并行执行(受特定条件限制)。
only定义作业将运行的分支(branches)和标记(tags)的名称。
except定义作业不会运行的分支和标记的名称。
tags用于从允许运行此项目的所有运行程序列表中选择特定的运行程序。
allow_failure允许作业失败而不会影响CI套件的其余部分。除手动作业外,默认值为false。
when用于实现在发生故障或尽管发生故障时运行的作业。取值:on_success,on_failure,always ,manual
environment用于定义作业部署到特定环境。如果指定了环境且该名称下没有环境,则将自动创建一个新环境。
cache用于指定应在作业之间缓存的文件和目录列表。您只能使用项目工作区内的路径。
artifacts用于指定文件和目录的列表,这些文件和目录应在成功,失败或始终作业时附加到作业。作业完成后,工件将被发送到GitLab,并可在GitLab UI中下载。
dependencies此功能应与工件结合使用,并允许您定义要在不同作业之间传递的工件。
coverage允许您配置从作业输出中提取代码覆盖率的方式。
retry允许您配置在发生故障时重试作业的次数。
parallel允许您配置并行运行的作业实例数。该值必须大于或等于二(2)且小于或等于50。
trigger允许您定义下游流水线触发器。当GitLab启动从触发器定义创建的作业时,将创建下游流水线
include使用include关键字,您可以允许包含外部YAML文件。 include要求外部YAML文件具有扩展名.yml或.yaml,否则将不包括外部文件。
extends定义了使用extends的作业将继承的作业名称。
pages用于将静态内容上传到GitLab,可用于为您的网站提供服务。它具有特殊语法,因此必须满足以下两个要求:任何静态内容都必须放在public/目录下。必须定义具有public/目录路径的工件。
variablesGitLab CI/CD允许您在.gitlab-ci.yml中定义变量,然后在作业环境中传递。 它们可以在全局和每个作业设置。 

编写语句:

variables:        #定义变量
    cmd: "curl"

before_script:
  - echo test demo
  - res = 'hello word'

stages:          # 列出使用阶段
  - build
  - test
  - deploy

build-job:       
  stage: build
  script:
    - echo "BUILD start"
    - $cmd www.baidu.com
    - echo ${res}
unit-test-job:   
  stage: test    
  script:
    - echo "Test start."
    - sleep 5

deploy-job:      
  stage: deploy  
  script:
    - echo "Deploy start"
    - javac -version

pre-job:
  stage: .pre
  script:
    - echo ".pre start"

post-job:
  stage: .post
  script:
    - echo ".post start"

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐