1  开发模式

瀑布模型:

敏捷开发:

 DevOps

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

2 Pipeline

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

 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 :在任何可用的机器上执行pipelinenone :当在pipeline顶层使用none时,每个stage需要指定相应的agentlabel:在指定的机器上运行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 ,manualenvironment用于定义作业部署到特定环境。如果指定了环境且该名称下没有环境,则将自动创建一个新环境。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"

文章链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。