image.png

1.pipeline功能特点

1)是帮助jenkins实现持续集成CI(Continue Integration)转变为持续部署CD(Continue Deploy)的重要功能插件;
2)将多个节点的单个任务连接起来,实现单个任务难以实现的复杂发布流程;
3)Pipeline 的实现方式是一套 Groovy DSL,所有的发布流程都可以表述为一段 Groovy 脚本;
4)是jenkins上的一套工作流框架.

2.pipeline语法

1)stage:pipeline可以划分为多个stage阶段,每个是stage为执行的一个操作,每个阶段可以跨节点;
2)node:jenkins的节点,是执行操作的具体服务器;
3)step:是jenkins pipeline执行操作的最小单元.

3.查看jenkins添加的节点,node1节点同步成功并建立连接

image.png

image.png
image.png
image.png
image.png
登录node01的机器

  1. 创建jenkinsagent目录
  2. mkdir -p /opt/jenkins
  3. cd /opt/jenkins/
  4. 下载agent.jar客户端
  5. wget http://192.168.211.129/jnlpJars/agent.jar
  6. 配置jdk
  7. vi /etc/profile
  8. #jdk
  9. export JAVA_HOME=/usr/local/jdk
  10. export JRE_HOME=${JAVA_HOME}/jre
  11. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
  12. export PATH=${JAVA_HOME}/bin:$PATH
  13. source /etc/profile
  14. java -version
  15. java version "1.8.0_45"
  16. Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
  17. Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
  18. 安装客户端
  19. java -jar agent.jar -jnlpUrl http://192.168.211.129/computer/node01/slave-agent.jnlp -secret 75a03be437b13a7266ad5293bb1e7e22877ba2e341087ce64a35db4c403f207d -workDir "/ope/jenkins"
  20. 八月 08, 2020 4:43:15 下午 org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
  21. 信息: Using /ope/jenkins/remoting as a remoting work directory
  22. 八月 08, 2020 4:43:15 下午 org.jenkinsci.remoting.engine.WorkDirManager setupLogging
  23. 信息: Both error and output logs will be printed to /ope/jenkins/remoting
  24. 八月 08, 2020 4:43:15 下午 hudson.remoting.jnlp.Main createEngine
  25. 信息: Setting up agent: node01
  26. 八月 08, 2020 4:43:15 下午 hudson.remoting.jnlp.Main$CuiListener <init>
  27. 信息: Jenkins agent is running in headless mode.
  28. 八月 08, 2020 4:43:15 下午 hudson.remoting.Engine startEngine
  29. 信息: Using Remoting version: 4.3
  30. 八月 08, 2020 4:43:15 下午 org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
  31. 信息: Using /ope/jenkins/remoting as a remoting work directory
  32. 八月 08, 2020 4:43:15 下午 hudson.remoting.jnlp.Main$CuiListener status
  33. 信息: Locating server among [http://192.168.211.129/]
  34. 八月 08, 2020 4:43:16 下午 org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
  35. 信息: Remoting server accepts the following protocols: [JNLP4-connect, Ping]
  36. 八月 08, 2020 4:43:16 下午 hudson.remoting.jnlp.Main$CuiListener status
  37. 信息: Agent discovery successful
  38. Agent address: 192.168.211.129
  39. Agent port: 50000
  40. Identity: d3:ad:0c:8b:67:0d:75:9d:9f:7e:d0:27:74:f9:a4:fc
  41. 八月 08, 2020 4:43:16 下午 hudson.remoting.jnlp.Main$CuiListener status
  42. 信息: Handshaking
  43. 八月 08, 2020 4:43:16 下午 hudson.remoting.jnlp.Main$CuiListener status
  44. 信息: Connecting to 192.168.211.129:50000
  45. 八月 08, 2020 4:43:16 下午 hudson.remoting.jnlp.Main$CuiListener status
  46. 信息: Trying protocol: JNLP4-connect
  47. 八月 08, 2020 4:43:16 下午 hudson.remoting.jnlp.Main$CuiListener status
  48. 信息: Remote identity confirmed: d3:ad:0c:8b:67:0d:75:9d:9f:7e:d0:27:74:f9:a4:fc
  49. 八月 08, 2020 4:43:17 下午 hudson.remoting.jnlp.Main$CuiListener status
  50. 信息: Connected
  51. 写入脚本,后台启动agent
  52. vi /opt/jenkins/anget_start.sh
  53. #!/bin/bash
  54. nohup java -jar agent.jar -jnlpUrl http://192.168.211.129/computer/node01/slave-agent.jnlp -secret 75a03be437b13a7266ad5293bb1e7e22877ba2e341087ce64a35db4c403f207d -workDir "/ope/jenkins" &
  55. sh agent_start.sh
  56. cat nohup.out
  57. 八月 08, 2020 4:45:34 下午 org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
  58. 信息: Using /ope/jenkins/remoting as a remoting work directory
  59. 八月 08, 2020 4:45:34 下午 org.jenkinsci.remoting.engine.WorkDirManager setupLogging
  60. 信息: Both error and output logs will be printed to /ope/jenkins/remoting
  61. 八月 08, 2020 4:45:35 下午 hudson.remoting.jnlp.Main createEngine
  62. 信息: Setting up agent: node01
  63. 八月 08, 2020 4:45:35 下午 hudson.remoting.jnlp.Main$CuiListener <init>
  64. 信息: Jenkins agent is running in headless mode.
  65. 八月 08, 2020 4:45:35 下午 hudson.remoting.Engine startEngine
  66. 信息: Using Remoting version: 4.3
  67. 八月 08, 2020 4:45:35 下午 org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
  68. 信息: Using /ope/jenkins/remoting as a remoting work directory
  69. 八月 08, 2020 4:45:35 下午 hudson.remoting.jnlp.Main$CuiListener status
  70. 信息: Locating server among [http://192.168.211.129/]
  71. 八月 08, 2020 4:45:35 下午 org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
  72. 信息: Remoting server accepts the following protocols: [JNLP4-connect, Ping]
  73. 八月 08, 2020 4:45:35 下午 hudson.remoting.jnlp.Main$CuiListener status
  74. 信息: Agent discovery successful
  75. Agent address: 192.168.211.129
  76. Agent port: 50000
  77. Identity: d3:ad:0c:8b:67:0d:75:9d:9f:7e:d0:27:74:f9:a4:fc
  78. 八月 08, 2020 4:45:35 下午 hudson.remoting.jnlp.Main$CuiListener status
  79. 信息: Handshaking
  80. 八月 08, 2020 4:45:35 下午 hudson.remoting.jnlp.Main$CuiListener status
  81. 信息: Connecting to 192.168.211.129:50000
  82. 八月 08, 2020 4:45:35 下午 hudson.remoting.jnlp.Main$CuiListener status
  83. 信息: Trying protocol: JNLP4-connect
  84. 八月 08, 2020 4:45:36 下午 hudson.remoting.jnlp.Main$CuiListener status
  85. 信息: Remote identity confirmed: d3:ad:0c:8b:67:0d:75:9d:9f:7e:d0:27:74:f9:a4:fc
  86. 八月 08, 2020 4:45:36 下午 hudson.remoting.jnlp.Main$CuiListener status
  87. 信息: Connected
  88. ps -ef|grep java
  89. root 9182 1 61 16:46 pts/0 00:00:04 java -jar agent.jar -jnlpUrl http://192.168.211.129/computer/node01/slave-agent.jnlp -secret 75a03be437b13a7266ad5293bb1e7e22877ba2e341087ce64a35db4c403f207d -workDir /ope/jenkins

node节点添加成功
image.png

extended choice parameter插件安装
参数化构建过程,构建的时候可以多选框来选择要构建的项目模块
系统管理—->管理插件—->可选插件—->搜索extended choice parameter——>点击直接安装
image.png

4.pineline项目的创建、代码部署

1)创建一个pipeline-job项目,选择流水线

image.png

2)pipeline-job修改配置文件、设置丢弃旧的构建之间保存的最小和最大时间,此项根据需要可设置可不设置

image.png

3)再点击Pipeline Syntax(流水线语法),填写gitlab仓库源地址、选择认证方式、点击Generate生成拉取代码的pipeline脚本

image.png
image.png

4)在复制上面生成的拉取代码的pipeline脚本,编写pipeline构建脚本,保存配置

image.png

#以上构建的pipeline脚本:
node("node1"){
            stage("clone code"){
                 sh 'rm -rf /var/lib/jenkins/workspace/pipeline-job/*'
                 git branch: 'develop', credentialsId: '1f60339e-fbb3-41e6-88a7-ae80834823b4', url: 'git@192.168.1.30:jie/web-page.git'
            }
             stage("compress code"){
                 sh 'cd /var/lib/jenkins/workspace/pipeline-job/ && tar cvf index_code.tar.gz *'
             }
             stage("send code"){
                 sh 'ssh 192.168.1.23 "/usr/sbin/nginx -s stop"'
                 sh 'ssh 192.168.1.23 "rm -rf /apps/nginx/html/*"'
                 sh 'scp /var/lib/jenkins/workspace/pipeline-job/index_code.tar.gz 192.168.1.23:/apps/nginx/html'  
             }
             stage("deploy code"){
                 sh 'ssh 192.168.1.23 "cd /apps/nginx/html/ && tar xvf index_code.tar.gz"'
                 sh 'ssh 192.168.1.23 "/usr/sbin/nginx"'
             }
        }

5)在node1节点生成秘钥对

[root@node1 workspace]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
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:YHTsZqXXSRMoV2ZG3gEgGYEzxdHEF4kNYlIc75Qy6JI root@node1
The key's randomart image is:
+---[RSA 2048]----+
|      oB%X+OX=.  |
|     .+=*+B**. . |
|      ++o=++.o.  |
|     + .==. o    |
|    E .oS..      |
|     .           |
|                 |
|                 |
|                 |
+----[SHA256]-----+

6)再将node1的公钥认证authorized_keys复制到nginx后端服务.ssh目录下,实现免秘钥登录nginx后端服务

[root@node1 ~]# ssh-copy-id 192.168.1.23

7)点击立即构建

image.png

8)查看控制台信息构建成功

image.png

9)验证node1节点的工作目录是否构建

root@node1 ~]# ll /var/lib/jenkins/workspace/pipeline-job
total 16
-rw-r--r-- 1 root root 10240 Jul 26 16:42 index_code.tar.gz
-rw-r--r-- 1 root root 42 Jul 26 16:42 index.html

10)浏览器访问nginx服务,实现pipeline脚本代码部署

image.png