• CI/CD :Pipeline


    1  开发模式

    瀑布模型

    敏捷开发

     DevOps

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

    2 Pipeline

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

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

    1. //声明式
    2. pipeline {
    3. agent any
    4. stages {
    5. stage('Build') {
    6. steps {
    7. // TODO
    8. }
    9. }
    10. stage('Test') {
    11. steps {
    12. // TODO
    13. }
    14. }
    15. stage('Deploy') {
    16. steps {
    17. // TODO
    18. }
    19. }
    20. }
    21. }
    22. //脚本式
    23. node {
    24. stage('Build') {
    25. // TODO
    26. }
    27. stage('Test') {
    28. // TODO
    29. }
    30. stage('Deploy') {
    31. // TODO
    32. }
    33. }

    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流水线

     

     然后编写流水线语句

    1. pipeline {
    2. agent any
    3. environment{
    4. command = "curl"
    5. }
    6. stages {
    7. stage('执行步骤1') {
    8. steps{
    9. echo 'the number one start'
    10. sh "whoami"
    11. sh "$command www.baidu.com"
    12. }
    13. }
    14. stage('执行步骤2'){
    15. steps{
    16. echo 'the number two start'
    17. sh "javac -version"
    18. }
    19. }
    20. }
    21. post{
    22. success{
    23. echo 'pipeline success'
    24. }
    25. }
    26. }

     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中定义变量,然后在作业环境中传递。 它们可以在全局和每个作业设置。 

    编写语句:

    1. variables: #定义变量
    2. cmd: "curl"
    3. before_script:
    4. - echo test demo
    5. - res = 'hello word'
    6. stages: # 列出使用阶段
    7. - build
    8. - test
    9. - deploy
    10. build-job:
    11. stage: build
    12. script:
    13. - echo "BUILD start"
    14. - $cmd www.baidu.com
    15. - echo ${res}
    16. unit-test-job:
    17. stage: test
    18. script:
    19. - echo "Test start."
    20. - sleep 5
    21. deploy-job:
    22. stage: deploy
    23. script:
    24. - echo "Deploy start"
    25. - javac -version
    26. pre-job:
    27. stage: .pre
    28. script:
    29. - echo ".pre start"
    30. post-job:
    31. stage: .post
    32. script:
    33. - echo ".post start"

  • 相关阅读:
    几种图灵斑(Turing Patterns)的简单matlab演示(BZ反应、Gray-Scott模型、LE模型)
    Linux环境下的Java(JDBC)连接openGauss数据库实践
    ubuntu编译sqlite3并使用
    人唯有在能够感觉自己有价值时,才有勇气。
    Centos 安装MySQL 5.7.38
    net-java-php-python-俚语管理系统计算机毕业设计程序
    Java初始化顺序
    书签收集管理软件悬浮阅读和知识库与浏览器书签之间的数据迁移
    概率统计·大数定律及中心极限定理【大数定律、中心极限定律】
    SpringCloud Alibaba微服务第2章之Nacos
  • 原文地址:https://blog.csdn.net/xlsj228/article/details/126739038