Jenkins: 创建第一个 Pipeline_weixin_33872566的博客-程序员信息网

技术标签: git  shell  运维  

clipboard.png

流水线视图可以很直观地看到每一步执行的时间和进度,方便追踪部署过程中的每一个环节。

搭建 jenkins 参考 上一篇文章

工作流

本文目的是搭建一个简单的 pipeline,当 git 仓库有提交时,builder server 进行构建和测试,完成之后 deploy server 进行部署。

本地 -> SCM: 提交代码
SCM -> Build Server: 触发 jenkins 任务
Build Server: 启动 pipeline
Build Server -> Deploy Server: 部署服务
  • SCM Source Code Management,如 github
  • Build Server jenkins 所在机器,负责构建
  • Deploy Server 线上服务所在机器

新建 Task

首先创建一个 Task,然后选择流水线模板

clipboard.png

clipboard.png

配置

Pipeline

clipboard.png

在这里可以配置 pipeline 的脚本,definition 可以选择 Pipeline scriptPipeline script from SCM

选择前者后,jenkins 脚本需要在下方填写,当任务启动后,jenkins 会执行这里配好的命令;选择后者后,任务启动后,jenkins 会去执行 SCM 仓库下配置的 script path 下的脚本。

一句话说,两者区别在于脚本是写在 jenkins 配置里,还是写在你的代码仓库里。所以修改脚本的时候在 jenkins 里配就行,方便调试,没问题之后使用 SCM 管理更好。

编写 pipeline script

以 node 服务举例,部署过程分为四步:

  1. Build: 在 build server 上 npm install
  2. Test: 在 build server 上进行测试
  3. Deploy: 在 deploy server 上部署

这个脚本如下,需要将 [user] 和 [ip] 替换成 deploy server 的登录用户和 ip:

pipeline {
        agent any
        stages {
                stage('Build') {
                        steps {
                                sh "npm install"
                        }
                }
                stage('Test') {
                        steps {
                                sh "npm test"
                        }
                }
                stage('Deploy') {
                        steps {
                                sh """
                                ssh -o stricthostkeychecking=no [user]@[ip] "
                                   source /etc/profile
                                   cd /root/projects/my-api-server
                                   git pull
                                   npm install
                                   pm2 reload wool-digger-api
                                "
                                """
                        }
                }
        }
}

当然这是一个很粗糙的构建方式,可以稍后查看 使用 docker 进行改造

主要概念有

  • agent 指示 Jenkins 分配一个执行器和工作空间来执行下面的Pipeline
  • stage 表示这个 Pipeline 的一个执行阶段,对应流水线中各个环节
  • steps 表示在这个 stage 中每一个步骤

sh 命令用来执行一条 shell 语句。 这个配置文件被执行后:

首先 jenkins 会在工作区(一般来说在 ~/.jenkins/workspace/)下拉取配置仓库指定分支的代码

pull 成功后进行 npm install(Build)

build 成功之后进行 npm test(Test)

test 成功后远程执行一段脚本,即登录 deploy server 并 cd 到服务目录,然后进行服务的更新重启操作。

npm/pm2 not found 的问题

注意上面 Deploy 中有一行 source /etc/profile,这是 login shellno-login shell 的不同。

如果使用 ssh 登录再执行命令和脚本,用户会获得 login shell,shell 首先会加载 /etc/profile 文件,然后依次尝试 ~/.bash_profile~/.bash_login~/.profile

而如果直接使用 ssh 远程执行命令和脚本,如上面的 ssh -o,它不会去执行 /etc/profile 文件,而会去用户的 HOME 目录检查 .bashrc 并加载。所以在 /etc/profile 中设置的 path 不会生效。如果 nvm 在此文件中,那么 node、npm、pm2 等等就找不到了。

解决方法可以在 shell 脚本中先手动加载配置文件。

Build Triggers

clipboard.png

在这里可以配置 pipeline 触发的类型

Github hook trigger fro GITScm polling

启动该项后可以通过 GitHub 的 webhook 来触发,参考 Github Plugin 文档

这里说一下最简单的配置,即手动配置。

在 Jenkins -> 系统管理 -> 系统设置中,可以找到 Git 配置,点击右边的问号按钮,可以看到默认的 jenkins hook 地址。

clipboard.png

clipboard.png

一般来说默认都是 $JENKINS_BASE_URL/github-webhook/。拿到这个地址后,添加到 github 的 webhook 中。

clipboard.png

注意 这个地址是没有项目信息的,因为 github 调用这个 hook 地址时,会把仓库信息传过去,所以就只剩在 jenkins 中把 pipeline 和这个 git 仓库关联起来。这需要在 pipeline 中选择 Pipeline script from SCM 并填写 git 地址。

轮询 SCM

启动该项后,jenkins 将定时对 SCM 仓库进行轮询,当仓库有新提交时,会自动触发 pipeline。

Schedule 填写规则与 crond 类似,如 H/5 * * * * 代表每 5 分钟查询一次。详细规则可以点击右边的问号。

启动

点击 立即构建,或去仓库提交一个 commit(如果配置了 github hook),或提交一个 commit 并等待(如果配置了轮询 SCM),然后就能看到我们的第一个 pipeline 启动了!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33872566/article/details/88677827

智能推荐

sqlite 可视化_BI技术调研——工具对比及Surperset 之 docker安装与可视化_weixin_39778214的博客-程序员信息网

作者:流川疯同步发表于:https://season.blog.csdn.net/article/details/880714691. BI 技术选型对比假如客户有一堆数据要分析,没有太多行业知识的你需要在一周之内给出基本的可视化展现怎么办?别担心,有BI软件来帮你1.1 总体对比除了上述提到的一些产品外,我们还有国产的一家厂商:FineBIhttp://www.finebi.com/Google...

Windows下OpenCV+QT开发环境配置_Chogori-Ma的博客-程序员信息网

今天开始使用QT进行OpenCV方面的开发,但是不知道该如何配置环境,幸好找到了一篇博客,于是转载作为备份,省的以后再找,也分享给大家,希望对各位有所帮助。文章转载地址:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E7%9A%84/8556.shtml一、qt安装        qt project官网:http

oracle 标识符无效_MavenTalk的博客-程序员信息网

 drop table CM_CREDIT_SORT cascade constraints;/*==============================================================*//* Table: CM_CREDIT_SORT *//*========...

windows环境下tensorflow2.0安装(避坑指南)_PolarisFTL的博客-程序员信息网_tensorflow2.0.0安装

在安装tensorflow2.0过程中遇到了很多坑,因此需要记录一下关于安装过程中遇到的问题以及解决方案。一、安装Anaconda清华镜像源:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror1.这里下载的是Anaconda3-5.3.1版本2.安装过程中需要注意​在该页面时如果点击Next之后出现...

web文档基础(.html文件编写)_小凡不秃的博客-程序员信息网_web项目文档怎么写

1.web文档的基本结构<!doctype html> # 声明类型 # 文档开始 # 网页开头 # 标题 # 编码方式网页主体</html> # 文档结束2.常用标签标题标签 h1 - h6段落标签 p加粗 b 斜体 i 下划线 u 删除线 s 上标 sup 下标 sub换行 br 水平线 hr块分区 dib 行内分区 spa...

ACPI相关(7)- ACPI对ata的管理_云潇c的博客-程序员信息网

一、SATA在acpi规范中的描述ATA控制器有两种类型:IDE控制器(也称为ATA控制器)和串行ATA (SATA)控制器。IDE控制器是那些使用传统IDE编程接口的控制器,可以支持并行ATA (P-ATA)或SATA连接。SATA控制器可以设计为仅在仿真模式、本机模式下运行,也可以设计为同时支持本机和非本机SATA模式。不管支持何种模式,SATA控制器都被设计为仅与支持串行ATA物理接口的驱动器一起工作。如下所述,SATA控制器的处理方法与传统的IDE控制器类似,但不是完全相同。包含支持本机和非

随便推点

多元高斯分布的边缘概率和条件概率_放错位的天才的博客-程序员信息网

0. 多元高斯分布假定一个 n 维的随机变量 x=[x1x2]∼N(μ,Σ),其中 x1,x2 的维度分别是 p 和 q(也即 p+q=n),μ=[μ1μ2],Σ=[Σ11Σ21Σ12Σ22](Σ=ΣT,Σ21=ΣT21),1. 边缘分布x1,x2 各自依然服从 μi,写反差矩阵 Σii 的多元高斯分布;2. 条件概率分布给定 xj 求...

第一场网络赛_Such Devotion的博客-程序员信息网

记人生第一次网络初入acm,感触颇多,近几日身陷字符类问题处理的囹圄,无法自拔。过几日就要去齐工大做星号队参赛,2018 年十一月三日就来了场网络赛。算是迎新赛(虽然榜首几乎全是学长),第一次网络赛也算是开开眼界。。。。话不多说,直接上感悟:还是菜太真实啦。。。+++++++++++++++++++++++++++++++++++++++++++++++++++++++++第一道题目...

【异常】——JAVA之全局国际化异常处理_土豆是我的最爱的博客-程序员信息网_java异常信息国际化

前言在项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。 那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的。一、自定义异常...

运行时数据区——Java虚拟机栈_煎丶包的博客-程序员信息网

一、Java虚拟机栈每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧,每一个栈帧对于一个方法Java虚拟机栈是线程私有的Java虚拟机栈的生命周期和线程一致虚拟机栈主要管理程序的运行,保存方法的局部变量、部分结果,并参与方法的调用和返回二、栈的优势栈是一种快速有效的分配存储方式,访问速度仅次于程序计数器JVM操作栈,当方法执行时,执行入栈操作,当方法结束时,执行出栈操作栈不存在垃圾回收问题,但是存在栈溢出问题三、栈的存储单位每个线程都有自己的栈,栈中的数据都是以栈

2021牛客暑期多校训练营3 B Black and white prim 思维+最小生成树_Bi08的博客-程序员信息网

题意给你一个n∗mn*mn∗m的矩阵,每个矩阵有一个权值,当一个正方形中三个点均已涂黑后,第四个点可免费涂黑,问将所有点涂黑所需的最小花费。分析所有点涂黑相当于将每行和每列均相连,c[i][j]=wc[i][j]=wc[i][j]=w相当于从iii行走到jjj列所花费权值为www,建图跑primprimprim最小生成树即可。代码#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef pai

LTE SIB1时频资源_wowRicky的博客-程序员信息网_lte sib1

1.时域资源参考3GPP 36.331 – 5.2.1.2SchedulingThe SystemInformationBlockType1 uses a fixed schedule with a periodicity of 80 msand repetitions made within80 ms. Thefirst transmission of SystemInformati

推荐文章

热门文章

相关标签