Jenkins的流水线

什么是Jenkins的流水线

Jenkins 流水线 (或简单的带有大写"P"的"Pipeline") 是一套插件,它支持实现和集成持续交付流水线 到Jenkins。

(CD) pipeline_是你的进程的自动表达,用于从版本控制向用户和客户获取软件。 你的软件的每次的变更 (在源代码控制中提交)在它被释放的路上都经历了一个复杂的过程 on its way to being released. 这个过程包括以一种可靠并可重复的方式构建软件, 以及通过多个测试和部署阶段来开发构建好的软件 (c成为 "build") 。

流水线提供了一组可扩展的工具,通过 Pipeline domain-specific language (DSL) syntax. [1]对从简单到复杂的交付流水线 "作为代码" 进行建模。

对Jenkins 流水线的定义被写在一个文本文件中 (成为 Jenkinsfile),该文件可以被提交到项目的源代码的控制仓库。 [2] 这是"流水线即代码"的基础; 将CD 流水线作为应用程序的一部分,像其他代码一样进行版本化和审查。 创建 Jenkinsfile并提交它到源代码控制中提供了一些即时的好处:

  • 自动地为所有分支创建流水线构建过程并拉取请求。
  • 在流水线上代码复查/迭代 (以及剩余的源代码)。
  • 对流水线进行审计跟踪。
  • 该流水线的真正的源代码 [3], 可以被项目的多个成员查看和编辑。

While定义流水线的语法, 无论是在 web UI 还是在 Jenkinsfile 中都是相同的, 通常认为在Jenkinsfile 中定义并检查源代码控制是最佳实践

声明式和脚本化的流水线语法

Jenkinsfile 能使用两种语法进行编写 - 声明式和脚本化。
声明式和脚本化的流水线从根本上是不同的。 声明式流水线的是 Jenkins 流水线更近的特性:

  • 相比脚本化的流水线语法,它提供更丰富的语法特性,
  • 是为了使编写和读取流水线代码更容易而设计的

然而,写到Jenkinsfile中的许多单独的语法组件(或者 "步骤"), 通常都是声明式和脚本化相结合的流水线。 在下面的 [pipeline-concepts] 和 [pipeline-syntax-overview] 了解更多这两种语法的不同。

Why Pipeline?

本质上,Jenkins 是一个自动化引擎,它支持许多自动模式。 流水线向Jenkins中添加了一组强大的工具, 支持用例 简单的持续集成到全面的CD流水线。通过对一系列的相关任务进行建模, 用户可以利用流水线的很多特性

  • Code: 流水线是在代码中实现的,通常会检查到源代码控制, 使团队有编辑, 审查和迭代他们的交付流水线的能力。
  • Durable: 流水线可以从Jenkins的主分支的计划内和计划外的重启中存活下来。
  • Pausable: 流水线可以有选择的停止或等待人工输入或批准,然后才能继续运行流水线。
  • Versatile: 流水线支持复杂的现实世界的 CD 需求, 包括fork/join, 循环, 并行执行工作的能力。
  • Extensible:流水线插件支持扩展到它的DSL [1]的惯例和与其他插件集成的多个选项。

然而, Jenkins一直允许以将自由式工作链接到一起的初级形式来执行顺序任务, [4] 流水线使这个概念成为了Jenkins的头等公民。

构建一个的可扩展的核心Jenkins值, 流水线也可以通过 Pipeline Shared Libraries 的用户和插件开发人员来扩展。 [5]

下面的流程图是一个 CD 场景的示例,在Jenkins中很容易对该场景进行建模

image

流水线概念

下面的概念是Jenkins流水线很关键的一方面 , 它与流水线语法紧密相连 (参考 overview below).

流水线

流水线是用户定义的一个CD流水线模型 。流水线的代码定义了整个的构建过程, 他通常包括构建, 测试和交付应用程序的阶段 。

另外 , pipeline 块是 声明式流水线语法的关键部分.

节点

节点是一个机器 ,它是Jenkins环境的一部分 and is capable of执行流水线。
另外, node块是 脚本化流水线语法的关键部分

阶段

stage 块定义了在整个流水线的执行任务的概念性地不同的的子集

jenkins创建Pipeline项目

本次环境为:

主机名 IP地址 安装的应用 系统版本
jenkins 192.168.23.143 tomcat jenkins CentOS 8
客户机 192.168.23.144 tomcat jenkins CentOS 8

安装Pipeline、Publish Over SSH、Publish Over SSH、SSH Build Agents、Git、GitHub、GitLab、Gitee插件
image

  • Gitee配置公钥
[root@jenkins ~]# ssh-keygen -t rsa -b 2048 -C "yanchuanglol@163.com" -N "" -f /root/.ssh/id_rsa
Generating public/private rsa key pair.
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:MtYf5/dFCJuwZ37E4sO3as6b5r0i3xbdoArF1ABiQv8 qinghao_yu@163.com
The key's randomart image is:
+---[RSA 2048]----+
|   .o o ...o     |
|     + .  . .    |
|      .  o. .    |
|       o  oo =.. |
|      + E.o B.+oo|
|     . o.. X.o..o|
|         ...* +..|
|          o.+O.o.|
|           BO==..|
+----[SHA256]-----+
  • 登录Gitee然后将公钥复制进去
    image

  • 添加私钥

[root@jenkins ~]# cat /root/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
······
DVnODEbPs8q/FQM09wp8Cjk5ephdqdkyiUIyQPAAAAAwEAAQAAAQEAttAv7CgVzBpdYyyN
O0Lkzo0W/vmEtkI+O7kThleV9OBao8usZShckZyprJp0S376JG9W/ipG2FvF583ipR+Ulf
sEFD14o8OhoGa2E82WIr+sVjKM0tlJh0ncJGqd9aFAk23LEDcAAACBAN+sdj81xrcRXWob
EfqJGeXHHtiHgrtFBIzGnduthLCUJn97IrnSV0Tj+0AE6o1CKrko4ZuOFjMuGpFfN62sjC
yw8w1MVMG7xAfkvJiRDbetPeRa8mfMXTKiBPi5Bx8NDW9ctXSDomv8ChP25b7CEh71imLk
......
-----END OPENSSH PRIVATE KEY-----

创建一个项目

image

image

image

image

image

image

image

image

image

//在本地查看拉取下来的代码
[root@jenkins ~]# cd .jenkins/
[root@jenkins .jenkins]# ls
com.dabsquared.gitlabjenkins.connection.GitLabConnectionConfig.xml
com.dabsquared.gitlabjenkins.GitLabPushTrigger.xml
com.gitee.jenkins.connection.GiteeConnectionConfig.xml
com.gitee.jenkins.trigger.GiteePushTrigger.xml
config.xml
hudson.model.UpdateCenter.xml
hudson.plugins.git.GitTool.xml
identity.key.enc
jenkins.install.InstallUtil.lastExecVersion
jenkins.install.UpgradeWizard.state
jenkins.model.JenkinsLocationConfiguration.xml
jenkins.security.apitoken.ApiTokenPropertyConfiguration.xml
jenkins.security.QueueItemAuthenticatorConfiguration.xml
jenkins.security.UpdateSiteWarningsConfiguration.xml
jenkins.telemetry.Correlator.xml
jobs
logs
nodeMonitors.xml
nodes
org.jenkinsci.plugins.workflow.flow.FlowExecutionList.xml
plugins
queue.xml
queue.xml.bak
secret.key
secret.key.not-so-secret
secrets
updates
userContent
users
workflow-libs
workspace
[root@jenkins .jenkins]# cd workspace/
[root@jenkins workspace]# ls
tomcat_demo
[root@jenkins workspace]# ls tomcat_demo/
db  Dockerfile  LICENSE  pom.xml  README.md  src
  • 开始打包
    image

image

pipeline {
    agent any
    
    stages {
        stage('pull code') {
            steps {
                git 'http://github.com/lizhenliang/tomcat-java-demo.git'
            }
        }

        stage('package') {
            steps {
                sh """
                mvn clean
                mvn package
                """
            }
        }
        
        
    }
}
  • 看到下面内容表示拉取完成
    image

  • 给客户机做免密认证

[root@Jenkins ~]# ssh-keygen -t rsa
[root@Jenkins ~]# ssh-copy-id root@192.168.23.144
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.23.144's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.23.144'"
and check to make sure that only the key(s) you wanted were added.
yc
//关闭防火墙与selinux0
setenforce 0
systemctl disable  --now firewalld

image

//图中完整代码为
pipeline {
    agent any
    
    stages {
        stage('pull code') {
            steps {
                git 'http://github.com/lizhenliang/tomcat-java-demo.git'
            }
        }
        stage('package') {
            steps {
                sh """
                mvn clean
                mvn package
                """
            }
        }
        stage('deploy') {
            steps {
                sh """
                scp target/ly-simple-tomcat-0.0.1-SNAPSHOT.war root@192.168.23.144:/usr/src/tomcat/webapps/
                ssh root@192.168.23.144 '/usr/src/tomcat/bin/catalina.sh stop && /usr/src/tomcat/bin/catalina.sh start'
                """
            }
        }
    }
}
  • 看到与下图内容相同则成功
    image

  • 浏览器访问yc的ip看到下图内容则成功
    image

原文地址:https://www.cnblogs.com/Ycqifei/p/14778981.html