jenkins流水线操作

Published on with 0 views and 0 comments

一、定义

1.1 简介

Jenkins 流水线(Pipeline)是一种用于实现持续集成(CI)和持续交付(CD)的工具,它允许用户以代码的形式定义整个软件构建、测试和部署的过程。流水线使用一种特定的脚本语言(Groovy)来编写,这种脚本直接在 Jenkins 服务器上运行,允许高度的定制化和灵活性。

Jenkins 流水线有两种类型:

  1. 声明式流水线(Declarative Pipeline)
    这是最常用的流水线类型,它以 YAML 样式的语法来编写,使得流水线的结构和配置更加清晰易读。在声明式流水线中,你主要描述你想要什么结果,而 Jenkins 负责如何达到那个结果。声明式流水线的语法较为简洁,易于理解。
  2. 脚本式流水线(Scripted Pipeline)
    这种类型的流水线使用 Groovy 语言编写,提供了更高的灵活性和控制力,因为你可以访问完整的 Groovy 语言功能。脚本式流水线适用于需要更复杂逻辑的情况,但同时也可能更难维护和理解。

流水线可以存储在源代码仓库中(如 Git、SVN 等),这样就实现了流水线的版本控制,这也是持续交付实践中的一个重要组成部分。这种方式被称为“流水线即代码”(Pipelines as Code)。

流水线的典型结构包括以下几个阶段:

  • 构建(Build) :编译代码,构建可执行的二进制文件或包。
  • 测试(Test) :运行自动化测试,确保代码质量。
  • 部署(Deploy) :将构建好的产物部署到测试或生产环境。
  • 批准(Approval) :等待人工批准或输入,例如在部署到生产环境前。

1.2 freestyle project和pipeline区别

在Jenkins中,"自由风格的软件项目"(Freestyle Project)和"流水线"(Pipeline)代表了两种不同的构建和自动化策略,每种都有其独特的应用场景和优势。

自由风格的软件项目

自由风格的项目是Jenkins中最传统和基础的项目类型,它提供了大量的灵活性,允许用户自定义构建步骤,包括执行shell命令、调用Maven或Ant目标、执行脚本等。自由风格项目的构建过程通常由一系列独立的步骤组成,这些步骤可以按顺序执行,也可以并行执行,具体取决于项目的配置。

自由风格项目的构建触发器也十分灵活,可以手动启动构建,或者根据源代码仓库的更新、定时计划(cron表达式)、其他项目的构建状态等自动触发。

流水线项目

相比之下,Jenkins流水线(Pipeline)提供了一种更现代化的方法来定义和执行持续集成和持续交付(CI/CD)流程。流水线项目的核心理念是将构建、测试和部署等流程作为代码(Code as a Pipeline)来编写和管理,这通常使用Groovy语言在Jenkinsfile中完成。

流水线项目允许你以声明式或脚本式的方式定义构建流程,这使得流程不仅可读性强,而且可以轻松地进行版本控制和重用。流水线还支持高级功能,如并行执行阶段、条件执行、参数化构建、错误处理等。

流水线项目可以被设计成非常复杂,包括多个阶段,每个阶段可能包含多个并行或顺序执行的任务。流水线还可以利用Jenkins的插件生态系统,实现与各种工具和服务的集成,如源代码管理系统、构建工具、测试框架和部署平台。

选择适合的项目类型

选择使用自由风格的项目还是流水线项目,主要取决于你的具体需求和场景:

  • 如果你的构建和测试流程相对简单,不需要复杂的自动化逻辑,自由风格的项目可能就足够了。
  • 对于需要高度自动化、可重复和可维护的CI/CD流程,或者需要与多个工具和服务紧密集成的场景,流水线项目则是更好的选择。

总的来说,自由风格的项目适合那些构建流程较为固定和简单的项目,而流水线项目则更适合那些构建流程复杂、需要频繁变化和高度自动化管理的大型项目。随着DevOps实践的普及,流水线项目因其强大的功能和灵活性,正逐渐成为Jenkins中更受欢迎的项目类型。

二、操作

2.1 创建

创建一个流水线

image.png

选择一个hello world脚本

image.png

保存后执行

image.png

2.2 自定义流水线

自定义流水线内容如下

pipeline {
    agent any
    stages {
        stage('拉取Git代码') {
            steps {
                echo '拉取Git代码 --success'
            }
        }
        stage('检测代码质量') {
            steps {
                echo '检测代码质量 --success'
            }
        }
        stage('构建代码') {
            steps {
                echo '构建代码 --success'
            }
        }
        stage('制作自定义镜像并发布Harbor') {
            steps {
                echo '制作自定义镜像并发布Harbor --success'
            }
        }
        stage('通知服务器拉取镜像部署') {
            steps {
                echo '通知服务器拉取镜像部署 --success'
            }
        }
    }
 }

然后进行构建

image.png

2.3 jenkinsfile维护脚本

我们可以通过版本控制来维护我们的脚本文件

image.png

填写脚本文件所在的git项目地址和认证信息

image.png

image.png

在项目中新增Jenkinsfile文件,写好脚本,提交到git

pipeline {
    agent any
    // 存放所有任务的合集
    stages {
        stage('拉取Git代码') {
            steps {
                echo '拉取Git代码--success'
            }
        }
        stage('检测代码质量') {
            steps {
                echo '检测代码质量--success'
            }
        }
        stage('构建代码') {
            steps {
                echo '构建代码--success'
            }
        }
        stage('制作自定义镜像并发布Harbor') {
            steps {
                echo '制作自定义镜像并发布Harbor--success'
            }
        }
        stage('基于Harbor部署工程') {
            steps {
                echo '基于Harbor部署工程--success'
            }
        }
    }
 }

提交后去jenkins执行构建,发现比之前多了一个checkout scm的步骤,就是从git获取脚本

image.png

2.4 流水线语法

jenkins中可以使用流水线语法,通过一系列配置,jenkins会生成脚本

image.png

2.4.1 拉取git代码

我们还是在配置项增加tag标签配置,后续通过标签拉取代码

image.png

image.png

保存后进入流水线语法,生成拉取git代码的脚本

image.png

填写项目地址信息

image.png

image.png

将脚本内容复制到Jenkinsfile的拉取Git代码步骤

image.png

然后注意这里他是默认从master分支拉取代码,我们需要从指定标签拉取代码,更改一下这里的master为指定标签

image.png

保存后提交代码到git,然后jenkins执行构建,查看日志

image.png

image.png

2.4.2 maven构建项目

回到语法流水线生成构建脚本

命令内容如下,这里的maven路径换成自己jenkins容器中的maven路径

/opt/apache-maven-3.6.3/bin/mvn clean package -DskipTests

image.png

把生成的内容放到jenkinsfile文件的构建代码步骤

image.png

提交到git后,再去执行构建,点击查看日志

image.png

操作成功

image.png

2.4.3 SonarQube代码质量检测

这里还是要执行shell脚本去调用sonar scanner扫描代码

Shell Script内容如下,这里的sonar.login的token换成自己的

/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=squ_aa85b8b5d377365e795102e555498d70a0e7f9e6

image.png

将生成的脚本复制到Jenkinsfile文件的SonarQube检测代码质量节点下

提交git后jenkins执行构建,查看质量检测阶段日志

image.png

sonarqube中也可以看到分析结果

image.png

2.4.4 Docker镜像制作

Jenkinsfile中配置环境变量

    environment {
        harborUser="admin"
        harborPwd="Harbor12345"
        harborAddress="192.168.56.6:80"
        harborRepo="repo"
    }

进入流水线语法继续编辑脚本

命令内容

mv ./target/*.jar ./docker/
docker build -t ${harborAddress}/${harborRepo}/${JOB_NAME}:$tag -f docker/DockerFile docker/

image.png

将生成脚本复制到jenkinsfile文件的构建Docker镜像步骤

提交代码后,jenkins执行构建日志如下

image.png

docker image也可以查看到刚刚构建的镜像

image.png

2.4.5 镜像推送到仓库

进入流水线语法继续编辑脚本,内如如下

docker login -u ${harborUser} -p ${harborPwd} ${harborAddress}
docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:$tag

image.png

生成的脚本复制到Jenkinsfile的推送镜像到Harbor步骤

image.png

提交代码后,jenkins执行构建

image.png

去仓库查看镜像

image.png

2.4.6 目标服务器部署服务

声明两个端口参数

image.png

image.png

image.png

回到流水线语法

image.png

填写命令,生成脚本

image.png

将脚本复制到Jenkinsfile的目标服务器部署服务步骤

image.png

这里要注意,execCommand执行的命令要改成用双引号括起来,提交到git后去jenkins执行构建命令

操作成功

image.png

访问目标服务路径

image.png


标题:jenkins流水线操作
作者:wenyl
地址:http://www.wenyoulong.com/articles/2024/06/24/1719225221104.html