0
点赞
收藏
分享

微信扫一扫

Jenkins自动化部署之流水线模式部署

双井暮色 03-04 17:30 阅读 2
java

文章目录

任务类型

在Jenkins中,有不同类型的任务(项目)适用于不同的构建需求。以下是一些常见的Jenkins任务类型:

自由风格项目(FreeStyle Project):

  • 自由风格项目是Jenkins中最灵活的项目类型。
  • 允许通过简单的构建步骤配置来构建软件项目,支持Shell脚本、Windows批处理脚本等。
  • 适用于简单的构建需求,例如编译、打包、测试和部署

Maven项目:

  • Maven项目是专为使用Maven构建工具的项目设计的。
  • 允许配置Maven构建步骤,自动下载依赖、执行生命周期阶段等。
  • 适用于Java项目,特别是使用Maven构建工具的项目

Pipeline流水线项目:

  • Pipeline项目使用Jenkins Pipeline语法,允许以代码形式定义整个CI/CD流水线。
  • 支持复杂的构建、测试、部署和其他自动化流程,有更强大的灵活性。
  • 可以在Jenkinsfile中定义Pipeline,并将Pipeline存储在源代码仓库中。
  • 支持从版本控制系统中读取Jenkinsfile,以代码的方式定义整个流水线
  • 适用于复杂的CI/CD流程,需要定义多个阶段和任务的项目

Pipeline流水线项目

Pipeline(流水线)是Jenkins中的一种工作流插件,允许你以代码的形式定义整个CI/CD过程

实现单个任务难以完成的复杂流程编排和可视化的工作

可编程性: 使用Groovy脚本语言编写Pipeline脚本,这意味着你可以通过代码控制流水线的每个步骤。

可视化: 提供了可视化的流水线编辑器,帮助你直观地了解和修改整个流程。

可重用性: Pipeline的脚本可以存储在版本控制系统中(如Git),从而提供了可重用的、版本化的构建配置。

持久化: 支持将Pipeline的定义保存为代码(Jenkinsfile),从而可以将流水线的配置与代码一起存储。

Pipeline支持两种语法声明式(Declarative)和脚本式(Scripted Pipeline)语法。

声明式的Pipeline

stages:代表整个流水线的所有执行阶段,通常stages只有1个,里面包含多个stage。

stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码、编译构建、部署等阶段。

steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码、ssh远程发布等任意内容。

pipeline {
 agent any
 stages {
   stage('拉取代码') {
    steps {
      echo '拉取代码'
    }
   }
   stage('编译构建') {
    steps {
      echo '编译构建'
    }
   }
   stage('项目部署') {
    steps {
      echo '项目部署'
    }
   }
 }
}

运行完阶段视图如下

日志如下

Started by user laker
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /root/.jenkins/workspace/ppp
[Pipeline] {
[Pipeline] stage
[Pipeline] { (拉取代码)
[Pipeline] echo
拉取代码
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (编译构建)
[Pipeline] echo
编译构建
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (项目部署)
[Pipeline] echo
项目部署
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

脚本式Pipeline

Node :节点,一个 Node 就是一个 Jenkins 节点,Master 或者 Agent,是执行 Step 的具体运行环境。

Stage :阶段,一个 Pipeline 可以划分为若干个 Stage,每个 Stage 代表一组操作,比如:Build、Test、Deploy,Stage 是一个逻辑分组的概念。

Step :步骤,Step 是最基本的操作单元,可以是打印一句话,也可以是构建一个 Docker 镜像,由各类 Jenkins 插件提供,比如命令:sh ‘make’,就相当于我们平时 shell 终端中执行 make 命令一样。

node {
   def mvnHome
   stage('Preparation') {
       echo '拉取代码'
   }
   stage('Build') {
       echo '编译构建'
   }
   stage('Results') {
       echo '项目部署'
   }
}

示例脚本

可以参考看图中的示例代码在线可视化的流水线语法

生成Tools配置示例

示例脚本

pipeline {
    // 在任何代理节点运行
    agent any

    tools {
        // maven3.6.0 要在 jenkins全局工具配置中提前配置好
        maven 'maven3.6.0'
    }

    stages {
        stage('构建') {
            steps {
                // 从Gitee仓库获取代码
                git 'https://gitee.com/lakernote/easy-admin.git'

                // 运行Maven
                sh "mvn -Dmaven.test.failure.ignore=true clean package"
            }

            post {
                // 如果Maven能够运行测试,即使有一些测试失败,也记录测试结果并归档jar文件。
                success {
                    junit '**/target/surefire-reports/TEST-*.xml'
                    // 会把target/*.jar文件归档到Jenkins的工作目录中的 archive 目录下
                    archiveArtifacts 'target/*.jar'
                }
            }
        }

        stage('部署') {
            steps {
                // TODO: 在这里添加部署步骤,将构建生成的文件部署到服务器或其他目标。
                // 示例:可以使用SCP、SSH或其他部署工具
                sh "echo 'Add your deployment steps here'"
            }
        }
    }

    post {
        // 构建后的操作
        always {
            // TODO: 在这里添加任何构建后操作,例如清理、通知等。
            sh "echo 'Add your post-build steps here'"
        }
    }
}

高级

Pipeline Script from SCM

上面是直接在Jenkins的UI界面编写Pipeline代码,这样不方便脚本维护,建议把Pipeline脚本放在项目中(一起进行版本控制)。

第一步 在项目根目录建立Jenkinsfile文件,把内容复制到该文件中,然后提交到Git。

第二步 配置流水线

执行结果

Downloaded from aliyun-public: https://maven.aliyun.com/repository/public/org/codehaus/plexus/plexus-io/3.0.0/plexus-io-3.0.0.jar (74 kB at 191 kB/s)
[[1;34mINFO[m] Reading assembly descriptor: assembly/assembly.xml
[[1;34mINFO[m] Building zip: /root/.jenkins/workspace/ppp/target/easyAdmin-local-1.0.0.zip
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;34mINFO[m] [1;32mBUILD SUCCESS[m
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;34mINFO[m] Total time:  01:50 min
[[1;34mINFO[m] Finished at: 2024-02-29T15:21:24+08:00
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
Post stage
[Pipeline] junit
Recording test results
No test report files were found. Configuration error?
Error when executing success post condition:
Also:   org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: 92192139-d4ce-4bf3-8572-6c7c73bf5d32
hudson.AbortException: No test report files were found. Configuration error?
	at hudson.tasks.junit.JUnitParser$ParseResultCallable.invoke(JUnitParser.java:193)
	at hudson.FilePath.act(FilePath.java:1232)
	at hudson.FilePath.act(FilePath.java:1215)
	at hudson.tasks.junit.JUnitParser.parseResult(JUnitParser.java:125)
	at hudson.tasks.junit.JUnitResultArchiver.parse(JUnitResultArchiver.java:160)
	at hudson.tasks.junit.JUnitResultArchiver.parseAndSummarize(JUnitResultArchiver.java:254)
	at hudson.tasks.junit.pipeline.JUnitResultsStepExecution.run(JUnitResultsStepExecution.java:63)
	at hudson.tasks.junit.pipeline.JUnitResultsStepExecution.run(JUnitResultsStepExecution.java:29)
	at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)

[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (部署)
Stage "部署" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] sh
+ echo Add your post-build steps here
Add your post-build steps here
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: No test report files were found. Configuration error?
Finished: FAILURE

阶段视图

举报

相关推荐

0 条评论