基于GitLab+Jenkins的DevOps

第一章:DevOps与CI/CD

DevOps起源

随着互联网给人们的生活带来的极大的便利,提升了生产力,提供了众多娱乐的项目,改善了人们的生活,目前计算机软件变成了非常赚钱的产品之一,一款产品从零开始到最终交付大概包括如下几个阶段:

规划(Plan):开发团队根据需求制定软件开发计划;

代码(Code):根据规划开始编写功能代码;

构建(Build):让代码可以在系统中运行的一个过程;

测试(Test):运行后,需要测试代码是否存在BUG或错误;

发布(Release):代码经过测试后交给运维团队;

部署(Deploy):运维团队将代码部署到生产服务器中;

维护(Operate):对项目后续的一系列维护工作;

当软件上线后,平常我们在公司难免会遇见一周两次或多次的软件升级或代码发布等工作,如果每次都通过手工的方式进行的话,已经无法满足公司敏捷开发的步伐,这时就需要引入一种自动化的可重复的工作流程来开展工作,这个流程就是DevOps。

DevOps概念

DevOps近年来作为一个热门的概念,频频出现在各大技术社区以及大牛的文章中,备受行业大咖的追捧,有人说它是一种工具,还有人说他是一种思想,更有甚者说他是一种哲学,DevOps是Development Operations两个组合词的缩写,Dev(开发)和Ops(运维)。

维基百科是这样定义的:DevOps是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

这个定位稍微有些抽象,反正它不是一个特定的软件、工具、或平台,我们可以把它理解成一种思想,或者是一个目标,这个目标最终就是让开发和运维部门之间更好的沟通合作,通过自动化的流程使得软件整体的交付过程更加的敏捷和可靠。

在DevOps的流程下,运维人员会在项目开发期间介入到开发过程中,了解开发人员使用的系统架构和技术路线,从而定制合适的运维方案。

开发人员在运维环境部署的初期需要参与到系统部署中,提供系统部署的策略和优化的建议。

持续集成CI

持续集成(Continuous Integration,简称CI)指的是频繁地(多次)提交新代码(为软件增加新功能来满足用户的需求)。

持续交付CD

持续交付CD(Continuous Delivery)持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」中再次进行测试,如果代码没有问题,可以继续手动部署到生产环境中。

持续部署CD

持续部署CD(Continuous Deployment)持续部署则是在持续交付的基础上,把部署到生产环境的过程自动化。
美其名曰:持续(Continuous)其实就是"加速——反复——加速——反复…" 这样子,可以把他理解成是一个自动化的工作流程。

第二章:GitHub与GitLab

持续集成第一步就是开发人员将代码提交到代码仓库,而GitHub与GitLab就是目前主流的代码托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub/GitLab。

地址:https://github.com/

Github使用流程
  • 注册用户
  • 创建GitHub仓库
  • 配置ssh-key(访问仓库方式)
  • 推送新代码到Github
注册账号
创建仓库

仓库通常用于组织单个项目,可以包含文件夹和文件、图像、视频、电子表格和数据集 - 项目所需的任何内容。

在页面的左上角点击 Create repository(创建仓库)

安装GitLab
主机名 IP地址 操作系统 硬件环境
gitlab 192.168.0.14 CentOS 7.6 2 Core/4G Mem/50G disk

GitLab对比于GitHub更适合在团队内部使用。

  • 官网:https://about.gitlab.com/
  • 参考文档:https://docs.gitlab.com/ee/ci/
  • 清华大学软件包下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
  • 版本介绍: CE(社区版)、EE(企业版)
[root@gitlab ~]# yum -y install gitlab-ce-14.1.0-ce.0.el7.x86_64.rpm 

       *.                  *.
      ***                 ***
     *****               *****
    .******             *******
    ********            ********
   ,,,,,,,,,***********,,,,,,,,,
  ,,,,,,,,,,,*********,,,,,,,,,,,
  .,,,,,,,,,,,*******,,,,,,,,,,,,
      ,,,,,,,,,*****,,,,,,,,,.
         ,,,,,,,****,,,,,,
            .,,,***,,,,
                ,*,.
  


     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/

Thank you for installing GitLab!
配置GitLab URL

修改主配置文件:/etc/gitlab/gitlab.rb,修改external_url 的地址为本机IP

[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
...
external_url 'http://192.168.0.24'    --本机IP

修改完主配置文件后,使用gitlab-ctl reconfigure重新配置gitlab使配置生效

[root@gitlab ~]# gitlab-ctl reconfigure

查看GitLab服务状态

[root@gitlab ~]# gitlab-ctl start 
[root@gitlab ~]# gitlab-ctl status
GitLab常用组件
  • nginx #静态Web服务器

  • gitlab-shell #用于处理Git命令

  • gitlab-workhorse #轻量级的反向代理服务器

  • logrotate #日志文件管理工具

  • postgresql #数据库

  • redis #缓存数据库

  • sidekiq #用于在后台执行队列任务(异步执行)

  • unicorn #GitLab Rails应用是托管在这个服务器上面的

GitLab服务参数

常用参数如下:

  • /opt/gitlab #应用代码和相应的依赖程序

  • /etc/gitlab #配置文件目录

  • /etc/gitlab/gitlab.rb #gitlab配置文件

  • /var/log/gitlab #gitlab各个组件产生的日志

  • /var/opt/gitlab/git-data/repositories #库默认存储目录

  • /var/opt/gitlab/backups/ #备份文件生成的目录

  • /var/opt/gitlab/gitlab-rails/etc/unicorn.rb #unicorn配置文件

  • /var/opt/gitlab/nginx/conf/gitlab-http.conf #nginx配置文件

GitLab常用命令
  • gitlab-ctl start #启动全部服务(也可指定单个服务)

  • gitlab-ctl restart #重启全部服务(也可指定单个服务)

  • gitlab-ctl stop #停止全部服务(也可指定单个服务)

  • gitlab-ctl reconfigure #使配置文件生效(修改主配置文件后使用)

  • gitlab-ctl show-config #验证配置文件

  • gitlab-ctl uninstall #卸载gitlab(保留数据)

  • gitlab-ctl cleanse #删除所有数据,从新开始

  • gitlab-ctl tail #查看服务的日志

关闭GitLab组件

由于GitLab核心功能是代码托管,避免资源浪费,有些额外的组件是不需要的,可以考虑关闭掉

#修改gitlab配置文件,关闭不需要的组件
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb

#...该配置所在行数仅供参考,不同版本,有所差异,可搜索关键字查询

1801  prometheus['enable'] = false
1802  prometheus['monitor_kubernetes'] = false
1879  alertmanager['enable'] = false
1902  node_exporter['enable'] = false
1921  redis_exporter['enable'] = false
1939  postgres_exporter['enable'] = false
1970  gitlab_exporter['enable'] = false
1984  prometheus_monitoring['enable'] = false
1991  grafana['enable'] = false

重新配置GitLab

[root@gitlab ~]# gitlab-ctl reconfigure
[root@gitlab ~]# gitlab-ctl status
登录GitLab

浏览器访问GitLab服务器地址:http://server_ip

默认用户名:root

root初始密码所在文件:/etc/gitlab/initial_root_password

修改root密码

通过个人资料中心修改root密码:

密码不验证复杂度,长度需满足8位:

设置密码后会跳转到登录页面重新登录

修改页面语言

在个人资料页面,也可以修改页面语言:

保存后刷新页面(提示:部分内容还没有支持中文)

定制Logo

点击左上角的 菜单(Menu)→Admin→设置→外观 处可以进行一些个性化设置:

配置完成后点击最下方的更改外观设置,退出账号重新登录时可看到更改后的外观。

关闭注册功能

由于我们Gitlab系统是私有仓库,一般用户都是由管理员创建和分派的,所以我们可以关闭注册功能,左上角 菜单(Menu)→管理(Admin)→通用 找到注册限制取消掉注册功能

下拉点击 保存更改(Save changes)

创建群组

群组就是把相关的项目和用户放在一起,进行统一的权限管理,点击 **菜单(Menu)→管理(Admin)**点击 新建群组

在可见性级别处我们选择私有,这样只有经过授权的用户才可以看到该组内的项目,其他用户无法查看,配置完相关信息点击最下方的创建群组

创建项目

回到Admin页面点击 新建项目创建空白项目

此时我们会看到跟GitHub类型的一个指引页面,指引我们如何创建仓库或推送本地仓库到GitLab

设置SSH Key

在页面上方会出现添加SSH密钥的提示,此时可以按照提示添加:

|

粘贴完成后其他默认即可,点击添加密钥 后再次回到项目中。

安装Git工具

Git 是一款开源的分布式版本控制系统,Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发 而开发的一个开放源代码的版本控制软件。

#安装Git工具
yum -y install git
Git命令 功能
git 获取git命令信息
git init 初始化代码仓库
git config --global user.name 创建git用户
git config --global user.email 创建git用户邮箱
git add . 将文件提交至暂存区
git status 查看仓库当前状态,显示有变更的文件
git commit -m 提交暂存区到本地仓库
git remote 查看本机的远程仓库
git remote remove 仓库名称 删除远程仓库
git push 上传本地代码到远程仓库

配置git用户以及邮箱,因为每次Git提交都会使用该用户信息

#格式:git config --global user.name '用户名' 
git config --global user.name "yesir"

#格式:git config –global user.email '邮箱'
git config --global user.email "[email protected]"

配置高亮颜色显示(增加体验感) 如果这个信息不配置,那么你与Git交互时,所有字体的颜色都将是默认系统的一个颜色

git config --global color.ui true
Git工作流程

自己创建编写的文件是工作区,在此编写代码,这个文件会上传到暂存区,紧接着会上传到本地仓库,也是可以随时取消。最后是可以把代码上传到远程仓库,分享供大家访问且使用。

推送项目到GitLab

按照仓库中的指引,将本地的项目推送到test仓库中,具体流程如下:

#先将前边添加的GitHub远程仓库删除掉
[root@gitlab data]# git remote remove origin

#添加远程仓库到本地
[root@gitlab data]# git remote add origin [email protected]:test/choujiang.git

#推送本地项目到远程仓库
[root@gitlab data]# git push -u origin --all
仓库验证

刷新仓库页面,查看项目是否推送成功:

此时该仓库只有管理员可以使用,接下来我们需要授权该项目的其他人员也可以使用该仓库。

创建用户

点击 菜单(Menu)→管理(Admin)→新建用户

其他默认即可,点击最下方创建用户

创建后,通过右上角编辑按钮为用户设置密码

|

点击最下方保存修改

接下来可以使用zhangsan用户登录(用户首次登录系统要求更改密码)

|

提示:此时zhangsan用户的身份是普通用户,就类似于我们在GitHub的身份一样。

提示:zhangsan用户也可以设置页面语言

保存后,刷新页面。

授权用户

我们需要将用户添加到对应的项目组内,他才能对组内项目进行管理,将zhangsan添加至test组。

点击 菜单(Menu)→管理(Admin)在右下角找到test组:

将张三加入到test组,并赋予开发者(Developer)权限,此时zhangsan用户在GitLab可查看到自己所在组项目。

以下是对GitLab上几种用户身份及权限的介绍:

Guest:可以创建提问、发表评论,不能读写版本库。
Reporter:可以克隆代码,不能提交,QA(测试)、PM(产品经理)可以赋予这个权限。
Developer:可以克隆代码、提交代码、修改代码,普通开发可以赋予这个权限。
Maintainer:可以创建项目、添加标签、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限。
Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限。

下表列出了每个角色可用的详细项目权限:

行动 客人 记者 开发商 维护者 所有者
下载项目 ✓ (1)
留言
查看允许和拒绝的许可证**(ULTIMATE)** ✓ (1)
查看许可证合规性报告**(终极)** ✓ (1)
查看安全报告**(终极)** ✓ (3)
查看依赖关系列表**(ULTIMATE)**
查看许可证列表**(终极)**
查看威胁列表 (终极)
创建并运行按需 DAST 扫描
在依赖项列表中查看许可证**(ULTIMATE)** ✓ (1)
查看设计管理页面
查看项目代码 ✓ (1)
拉取项目代码 ✓ (1)
查看受访问控制保护的 GitLab 页面
查看维基页面
查看工作列表 ✓ (3)
查看工作日志 ✓ (3)
查看带有调试日志记录的作业
下载和浏览作业工件 ✓ (3)
创建机密问题
创建新问题
查看链接的问题
查看版本 ✓ (6)
查看要求**(终极)**
查看见解**(终极)**
查看问题分析**(高级)**
查看合并请求分析**(高级)**
查看价值流分析
管理用户加星标的指标仪表板 ( 7 )
查看机密问题 (2)
分配问题
分配审阅者
标签问题
设置问题权重
设置问题估计并记录花费的时间
查看时间跟踪报告 ✓ (1)
锁定问题线程
管理问题跟踪器
管理链接的问题
管理标签
创建代码片段
查看提交状态
查看容器注册表
查看环境
查看DORA 指标
查看合并请求列表
查看 CI/CD 分析
查看代码审查分析**(高级)**
查看存储库分析
查看错误跟踪列表
查看指标仪表板注释
存档/重新打开要求**(终极)**
创建/编辑需求**(终极)**
进出口要求**(终极)**
创建新的测试用例
归档测试用例
移动测试用例
重新打开测试用例
拉包
查看项目统计
发布包
创建/编辑/删除清理策略
上传设计管理文件
创建/编辑/删除版本 ✓ (13) ✓ (13) ✓ (13)
管理合并审批规则(项目设置)
创建新的合并请求
创建新分支
推送到不受保护的分支
强制推送到不受保护的分支
移除未受保护的分支
分配合并请求
标签合并请求
锁定合并请求线程
批准合并请求 ( 9 )
管理/接受合并请求
创建新环境
停止环境
启用评论应用
查看 Pod 日志
读取 Terraform 状态
添加标签
取消并重试作业
创建或更新提交状态 ✓ (5)
更新容器注册表
删除容器注册表映像
创建/编辑/删除项目里程碑
使用安全仪表板**(ULTIMATE)**
查看依赖项列表中的漏洞发现**(ULTIMATE)**
从漏洞发现中创建问题**(ULTIMATE)**
忽略漏洞发现**(ULTIMATE)**
查看漏洞**(终极)**
从漏洞发现中创建漏洞**(ULTIMATE)**
解决漏洞**(终极)**
消除漏洞**(终极)**
将漏洞恢复到检测到的状态**(ULTIMATE)**
应用代码更改建议
创建和编辑 wiki 页面
重写/删除 Git 标签
管理功能标志**(高级)**
创建/编辑/删除指标仪表板注释
针对受保护的分支运行 CI/CD 管道 ✓ (5)
删除包
请求 CVE ID (免费 SAAS)
使用环境终端
运行 Web IDE 的交互式 Web 终端**(ULTIMATE SELF)**
添加新的团队成员
启用/禁用分支保护
推送到受保护的分支
为开发人员打开/关闭受保护的分支推送
启用/禁用标签保护
编辑项目设置
编辑项目徽章
出口项目
与群组共享(邀请)项目 ✓ (8) ✓ (8)
将部署密钥添加到项目
配置项目挂钩
管理跑步者
管理作业触发器
管理 CI/CD 变量
管理 GitLab 页面
管理 GitLab 页面域和证书
删除 GitLab 页面
管理集群
管理项目运营
管理 Terraform 状态
管理许可政策**(终极)**
管理安全策略**(终极)**
创建或分配安全策略项目**(ULTIMATE)**
编辑评论(由任何用户发布)
重新定位图像上的评论(由任何用户发布) ✓ (10) ✓ (10) ✓ (10)
管理错误跟踪
删除 wiki 页面
查看项目审计事件 ✓ (11)
管理推送规则
管理项目访问令牌 (FREE SELF) (PREMIUM SAAS) ( 12 )
查看成员的 2FA 状态
切换可见性级别
将项目转移到另一个命名空间
重命名项目
删除分叉关系
删除项目
存档项目
删除问题
删除管道
删除合并请求
禁用通知电子邮件
管理项目合规框架
强制推送到受保护的分支 ( 4 )
移除受保护的分支 ( 4 )

下表列出了每个角色可用的组权限:

行动 客人 记者 开发商 维护者 所有者
浏览组
编辑 SAML SSO 计费**(高级 SAAS)** ✓ (4)
查看贡献分析
查看组史诗**(PREMIUM)**
查看小组 wiki 页面**(高级)** ✓ (6)
查看见解**(终极)**
查看洞察图表**(终极)**
查看问题分析**(高级)**
查看价值流分析
创建/编辑组史诗**(PREMIUM)**
创建/编辑/删除史诗板**(高级)**
管理组标签
拉包
查看容器注册表
查看集团 DevOps 采用率**(终极)**
查看指标仪表板注释
查看生产力分析**(高级)**
创建和编辑组 wiki 页面**(高级)**
在组中创建项目 ✓ (3)(5) ✓ (3) ✓ (3)
创建/编辑/删除组里程碑
创建/编辑/删除迭代
创建/编辑/删除指标仪表板注释
启用/禁用依赖代理
发布包
使用安全仪表板**(ULTIMATE)**
查看组审核事件 ✓ (7) ✓ (7)
创建子组 ✓ (1)
删除组 wiki 页面**(高级)**
编辑史诗评论(由任何用户发布)(终极) ✓ (2) ✓ (2)
列出组部署令牌
管理群组推送规则 (PREMIUM)
查看/管理组级 Kubernetes 集群
管理项目合规框架
创建/删除组部署令牌
删除组
删除组史诗**(PREMIUM)**
禁用通知电子邮件
编辑组设置
按 2FA 状态过滤成员
管理组级 CI/CD 变量
管理群组成员
与群组共享(邀请)群组
查看成员的 2FA 状态
查看帐单**(免费 SAAS)** ✓ (4)
查看使用配额**(免费 SAAS)** ✓ (4)

第三章:GitLab+Jenkins的CI/CD

Jenkins概述

Jenkins是Java语言开发的一款开源 CI/CD 软件,用于自动化各种任务,包括项目的拉取、项目构建、以及项目部署等功能。

中文官网地址:https://www.jenkins.io/zh/

持续集成的流程说明:

  • 首先开发人员代码提交到仓库;
  • 然后Jenkins 作为持续集成工具,使用 Git 工具到仓库拉取代码到集成服务器,再配合 JDK,Maven 等完成代码编译、测试、审查、打包等工作;
  • 最后Jenkins把生成的 jar 或 war 包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用;
安装Jenkins
主机名 IP地址 操作系统 硬件环境
jenkins 192.168.0.21 CentOS 7.6 2Core/4G Mem/50G disk

Jenkins版本介绍:

  • jenkins LTS(长期支持):每3个月更新一次,适合在企业生产环境使用

  • jenkins普通版:每周更新一次,适合开发人员测试使用

  • 清华大学下载Jenkins稳定版地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/

#Jenkins需要依赖JDK,安装jdk环境(fontconfig是Jenkins web界面字体包)
[root@jenkins ~]# yum install fontconfig java-11-openjdk -y

#安装Jenkins
[root@jenkins ~]# yum localinstall jenkins-2.332.3-1.1.noarch.rpm 

#启动Jenkins
[root@jenkins ~]# systemctl start jenkins && systemctl enable jenkins

提示:如果新版本在启动服务时,服务无法启动,请使用较低版本,因为有可能出现Jenkins和Java的版本不兼容的情况。

通过docker方式部署不会出现版本不兼容的问题:

yum install -y yum-utils && yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum -y install docker-ce-20.10.9-3.el7

mkdir /home/jenkins && chmod 777 /home/jenkins

docker run -id -p 8088:8080  --name jenkins --restart=always -v /home/jenkins:/var/jenkins_home jenkins/jenkins:2.332.3
Jenkins服务相关参数
  • 程序名:jenkins
  • 默认端口:8080(可修改)
  • /etc/sysconfig/jenkins #主配置文件,主要配置Jenkins的工作目录、启动用户、启动端口。
  • /var/lib/jenkins/plugins/ #插件存放目录
  • /var/lib/jenkins/users/ #用户信息存放目录
  • /var/lib/jenkins #默认的Jenkins家目录(存放项目及插件)
  • /var/log/jenkins #日志文件目录
登录Jenkins

浏览器访问jenkins:http://server_ip:8080/

Jenkins是一个引擎,他本身的功能很简单,是通过各种不同的插件实现编译部署项目, 例如从 Gitlab 拉取代码,使用 Maven 构建项目等功能需要依靠插件完成 。

如果选择安装推荐的插件,这样大部分常用的插件将会被安装

如果是通过右侧的选择插件来安装自定义安装插件不适合新手。

如果不知道自己会用到哪些插件,可以选择建议

提示:插件是从国外的Jenkins官方仓库下载,速度比较慢。

插件安装目录:/var/lib/jenkins/plugins/

创建任务

Jenkins的任务可以让我们实现很多工作流程的自动化,例如 打包、持续集成、部署、定时运行等工作,点击左侧栏 新建Item(新建任务)

提示:输入名称之后我们还要点击下面的模板选择其一,否则也无法创建项目,紧接着下面是一些复选框。

General(常规):复选框中 Discard old builds(丢弃旧版本)每次构建都会生成很多构建产物,如果频繁构建会占用很多的空间,可以通过这几个选项控制构建产物的保留,一般建议选择保留最近5-10天的构建历史记录为宜。

源码管理:用于指定版本控制系统进行拉取项目,如果没有安装对应插件则不显示(暂时先不用选择)

构建触发器: 可以指定达到什么条件,就会去执行一些操作

构建环境:可以指定在构建之前执行的一些操作

构建:接下来就是最常用构建复选框,在构建框中的Execute shell可以让Jenkins去执行系统中的shell命令实现项目的自动发布。

配置集成GitLab

接下来就可以使用Jenkin从Gitlab拉取代码到jenkins本机进行后续的发布工作:

具体流程:

  • 创建Jenkins与GitLab认证凭据

  • Jenkins拉取项目到Jenkins本地

  • 通过脚本自动发布项目到Nginx服务器

Jenkins安装Git工具

[root@jenkins ~]# yum -y install git

Jenkins创建凭据用于从GitLab拉取项目时的一种认证方式,点击右上角的Admin后在左侧栏可以看到凭据选项,点击凭据后如下图:

本次构建流程是Jenkins将GitLab上的choujiang项目拉取到了Jenkins本地:/var/lib/jenkins/workspace/choujiang

[root@jenkins ~]# ls /var/lib/jenkins/workspace/choujiang
awardrotate.js  images  index.html  jquery-1.10.2.js  jquery-2.2.4.js  README.md

小结:上述操作已经让Jenkins与GitLab协同,接下来通过脚本让Jenkins将代码发布到Nginx服务器(代码放在jenkins服务器没有任何意义)。

部署Nginx Web服务
主机名 IP地址 系统环境 硬件配置
nginx 自定义 CentOS7.6 2Core/4G Mem/50G disk
[root@nginx ~]# yum -y install nginx
[root@nginx ~]# systemctl start nginx && systemctl enable nginx
Jenkisn通过Shell脚本发布项目

提示:在Jenkins主机操作

#创建一个目录,用于存放项目的发布脚本
[root@jenkins ~]# mkdir /var/lib/jenkins/script && cd /var/lib/jenkins/script

#以下是项目发布的脚本内容
cat deploy-nginx.sh

#!/bin/bash
#发布项目到Nginx

#定义Nginx网页根目录
WEB_DIR=/usr/share/nginx

#定义Jenkins项目所在路径
CODE_DIR=/var/lib/jenkins/workspace/choujiang

#项目发布时间
TIME=`date +%F-%H-%M-%S`

#打包项目
cd $CODE_DIR && tar -zcf /tmp/web-$TIME.tar.gz ./*

#发布项目
for IP in `cat /var/lib/jenkins/script/nginx`
do
        scp /tmp/web-$TIME.tar.gz root@$IP:$WEB_DIR
        ssh root@$IP "cd $WEB_DIR && mkdir web-$TIME"
        ssh root@$IP "cd $WEB_DIR && tar -xf web-$TIME.tar.gz -C web-$TIME && rm -rf web-$TIME.tar.gz"
        ssh root@$IP "cd $WEB_DIR && rm -rf html && ln -s web-$TIME html"
done

#把nginx主机的IP地址写到这个文件里
vim nginx
server_ip

#添加执行权限
chmod +x deploy-nginx.sh

配置Jenkins用户免密发布项目到Nginx的服务器

#切换到Jenkins用户
usermod -s /bin/sh jenkins && su - jenkins 

#生成密钥文件
-sh-4.2$ ssh-keygen

#将公钥传给Nginx
-sh-4.2$ ssh-copy-id  root@server_ip

#切换到脚本路径执行脚本(主要是首次连接需要确认yes,否则Jenkins直接构建会失败)
-sh-4.2$ cd script/
-sh-4.2$ ./jenkins-nginx.sh

回到 Jenkins的choujiang任务点击 设置→构建→增加构建步骤Execute shell(shell命令)

小结:通过上述配置后,只要GitLab仓库中有需要发布的项目,只需要在Jenkins上点击Build New(立即构建)即可实现代码的一键发布。

Jenkins+GitLab自动发布项目

本实验实现只要GitLab的master分支有新代码提交,Jenkins 自动触发Build New(立即构建)功能,实现代码自动发布。

1)安装GitLab构建触发器插件

左侧栏 Manage Jenkins(管理Jenkins)→ Manage Plugins(管理插件)

)

提示:安装成功后不用重启Jenkins。

2)构建webhook触发器

插件安装完毕后,进到任务中,在构建触发器会新增一个触发器选项,选择它并设置对应触发事件,具体配置如下图:

3)GitLab设置webhook

回到GitLab的choujiang项目中点击左侧 设置→webhooks 粘贴Jenkins的令牌到Secret token处:

提示:Webhooks的网址为Jenkins任务中构建触发器指定的地址,复制地址到GitLab的网址处。

上述操作表示当GitLab的choujiang项目中有新代码上传或合并到master分支后,GitLab通过令牌通知Jenkins触发构建操作。

配置完成后点击最下方的Add webhook会出现如下报错:

原因:gitlab 10.6 版本以后为了安全,不允许向本地网络发送webhook请求。

解决方法:通过 Menu→Admin→设置→网络→外发请求 配置如下图:

点击保存更改

再次回到项目中重新添加并验证结果:

点击 **Add webhook **

在页面最下方验证项目钩子,展开测试栏后点击Push events(推送事件)选项进行钩子测试:

测试结果在页面上方显示HTTP 200表示推送成功:

回到Jenkins验证构建操作:

小结:经测试webhook 已经生效,接下来可以试试本地push 代码检测是否生效了,具体流程请参考前边讲解的Git工作流程阶段:

此时Jenkins可以验证是否自动构建:

小结:通过上述操作已经实现GitLab 利用 webhook 实现push 代码后 Jenkins 自动构建。

jenkins返回构建状态到GitLab

Jenkins每次自动构建完成后可以把构建的结果反馈给Gitlab,这样在Gitlab上就可以查看每一次构建的结果。

1)首先在Jenkins上配置,打开 Manage jenkins(管理Jenkins)→configure System(系统设置)下拉找到GitLab部分

他需要一个API token,通过GitLab地址在结合GitLab生成的token就可以把结果反馈到GitLab,接下来还要去GitLab 生成一个token。

2)GitLab 生成一个token,具体流程如下:

创建后会在页面上方生成token:

回到Jenkins粘贴令牌创建凭据:

凭据添加成功后选择它,并Test Connection(测试访问):

测试成功后保存退出系统设置。

3)Jenkins增加构建后操作步骤

构建后操作就是你构建完以后,可以做些什么事情,我们希望某个项目构建后,就将结果返回到GitLab时,我们需要在具体任务中配置构建后操作步骤,进到任务中点击 配置→构建后操作→步骤,具体配置如下图:

点击保存

回到任务主页面,执行Build Now:

构建成功后,回到GitLab首页验证:

|
小结:当Jenkins构建以后,直接在GitLab查看结果即可。

丢弃旧的构建

Jenkins在构建任务时,默认保留了所有的构建历史记录,而每次构建的任务历史都存储在Jenkins主机中,如果保留历史记录过多,会占用大量的磁盘空间,可以通过在具体的任务中设置历史记录的保留时长。

随便创建一个任务,设置好丢弃旧的构建天数和次数测试,如下图:

|

Jenkins插件管理

Jenkins所有的工作全部由插件来完成,但是Jenkins插件默认是从国外下载,我们可以将插件地址改为国内的下载地址;

清华大学Jenkins插件下载地址:https://mirror.tuna.tsinghua.edu.cn/jenkins/plugins/

#为了避免Google地址无法访问,将Jenkins测试的地址改为baidu地址,否则Jenkisn页面无法访问
sed -i 's#https://www.google.com/#https://www.baidu.com/#g' /var/lib/jenkins/updates/default.json

#将Jenkins插件下载地址改为清华大学地址
sed -i 's#updates.jenkins.io/download#mirror.tuna.tsinghua.edu.cn/jenkins#g' /var/lib/jenkins/updates/default.json

修改Jenkins插件升级的地址,选择 Manage Jenkins --> Manage Plugins --> 高级 --> 升级站点 替换为如下地址:

https://mirror.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

联网下载Jenkins插件的方式,选择 Manage Jenkins --> Manage Plugins --> 可选插件 搜索maven并安装

点击下方的**安装 **

离线安装Jenkins插件,将之前Jenkins服务器的插件保存下来,然后导入到服务器中,这种方式也是企业常见的安装方式

#查看Jenkins插件存储路径
[root@jenkins ~]# ls /var/lib/jenkins/plugins/

#打包该路径所有插件文件
[root@jenkins ~]# cd /var/lib/jenkins/plugins/
[root@jenkins plugins]# tar -zcf /tmp/jenkins-plugins.tar.gz ./*

#删除/var/lib/jenkins/plugins/路径下所有插件
[root@jenkins plugins]# rm -rf *

#重启Jenkins服务后登录到Jenkins web查看插件是否还存在
[root@jenkins ~]# systemctl restart jenkins

#导入Jenkins插件
[root@jenkins plugins]# tar -xf /tmp/jenkins-plugins.tar.gz -C ./

#重启Jenkins服务后登录到Jenkins web查看插件是否存在
[root@jenkins plugins]# systemctl restart jenkins

Jenkins服务默认以jenkins用户运行,使用8080端口对外提供访问,这些配置都可以在配置文件中定义

[root@jenkins ~]# vim /etc/sysconfig/jenkins
#...
JENKINS_USER="jenkins"
JENKINS_PORT="8080"

第四章:Maven构建Java项目发布

上面我讲述的项目都是非编译项目,也就是代码从仓库中拉下来,不经过任何操作就可以发布,这对于像Java源码需要编译的项目是不可用的,下面我们讲解如何发布Java项目。

简单理解:Java源码项目就像一堆零散的汽车部件,必须经过组装才能变成一辆完整的汽车,而这个组装的过程,就可以理解是Maven编译打包的过程

Maven介绍

Maven是属于apache软件基金会下一个开源免费的项目,是跨平台的项目管理工具 ,主要服务于Java项目的构建、依赖管理等工作。

官网:http://maven.apache.org/

Maven安装

软件包下载地址:

  • 官网:http://maven.apache.org/download.cgi
  • 清华大学仓库:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/

Jenkins安装Maven(Maven是Java开发,运行需要配置JDK环境)

[root@jenkins ~]# tar -xf apache-maven-3.8.1-bin.tar.gz
[root@jenkins ~]# mv apache-maven-3.8.1 /usr/local/maven
[root@jenkins ~]# ls /usr/local/maven

将 Maven 的 bin 目录添加到 PATH 环境变量以便后续使用mvn命令

#编辑/etc/profile文件
[root@jenkins ~]# vim /etc/profile
export PATH=/usr/local/maven/bin/:$PATH   --在末尾添加

#使用source使配置生效
[root@jenkins ~]# source /etc/profile

#命令验证
[root@jenkins ~]# mvn -v
Maven目录结构

bin:该目录包含了 mvn 运行的脚本,在命令行输入任何一条 mvn 命令时,实际上就是在调用这些脚本。

  • bin/mvn:基于Linux平台的shell脚本。
  • bin/mvnDebug:基于Linux平台的shell脚本,mvn和mvnDebug两者基本是一样的,只是 mvnDebug便于程序员调试。
  • bin/mvn.cmd:基于Windows平台的命令脚本。
  • bin/mvnDebug.cmd:基于Windows平台的调试命令脚本,便于程序员调试。
  • bin/m2.conf:这是 classworlds 的配置文件,后面会介绍 classworlds。

boot:该目录只包含一个文件plexus-classworlds-2.5.2.jar是一个类加载器框架,Maven使用该框架加载自己的类库,对于一般的 Maven 用户来说,不必关心该文件。

conf:该目录包含了一个非常重要的settings.xml文件,是Maven的全局配置文件。

lib:该目录包含了所有 Maven 运行时需要的 Java 类库。

LICENSE:记录了 Maven 使用的软件许可证 。

NOTICE:记录了 Maven 包含的第三方软件。

README.txt:包含了 Maven 的简要介绍,包括安装需求及如何安装的简要指令等。

Maven入门
命令 功能
mvn package 生成jar/war包
mvn clean 清空生成的文件

首先上传一个Java源码项目

[root@jenkins ~]# unzip spring-source-mvc-ano-v1.0.zip
[root@jenkins ~]# cd spring-source-mvc-ano-v1.0

mvn clean 命令用于清理项目产生的临时文件(在打包之前先执行清理工作)

[root@jenkins spring-source-mvc-ano-v1.0]# mvn clean

mvn package 命令用于打包项目

所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 包含了项目的基本信息,用于描述项目如何构建,声明项目依赖等等,Maven会在当前目录中查找POM,读取POM,获取所需的配置信息,然后执行目标。

[root@jenkins spring-source-mvc-ano-v1.0]# mvn package
...
[INFO] BUILD SUCCESS    --出现该提示表示构建成功

查看构建后结果,构建后会生成target目录,存放构建后的数据

[root@jenkins spring-source-mvc-ano-v1.0]# ls target/
Maven仓库

Maven 仓库是用于构建项目过程中下载项目依赖的第三方库,该库中存放项目所需的依赖。

Maven 仓库分为两大类:

  • 本地仓库: 顾名思义,存放在本地磁盘的maven仓库。
  • 远程仓库:远程仓库又可以大致分为以下三类:
    • 私服:一般是为了节省带宽和打包时间,在企业局域网内架设的一个私有仓库服务器(如 nexus)
    • 公开仓库:公开的远程仓库,常见的有阿里Maven仓库、网易Maven仓库、腾讯Maven仓库等
    • 中央仓库:这是 Maven 自带的远程仓库,它包含了绝大部分开源的构件

默认配置下,Maven 根据坐标寻找构件的时候,首先他会查看本地仓库,如果本地仓库存在,则直接使用,如果本地仓库不存在,则 Maven 就会去远程仓库查找,远程仓库存在则先下载到本地仓库使用,不存在 Maven 就会报错。

Maven仓库配置

本地仓库:本地仓库在安装 maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建,maven 本地仓库的位置无论是 Windows 还是 Linux,在用户的家目录下都有一个.m2/repository/的仓库目录。

[root@jenkins ~]# ls -a /root/.m2
.  ..  repository

远程仓库:由于默认的官方maven仓库在国内下载速度太慢, 我们往往不会使用默认的中央仓库, 不仅是速度慢,可能项目的某些依赖中央仓库是没有的,而其他远程仓库中有,如最常用的是阿里Maven仓库。

修改配置文件重新指定仓库位置(提示:修改之前做个备份)

[root@jenkins ~]# vim /usr/local/maven/conf/settings.xml
...
  
        
           alimaven
           central
           aliyun maven
           http://maven.aliyun.com/nexus/content/repositories/central/
        

保存后回到项目中打包并观察依赖的下载地址:

#先执行清理在打包
[root@jenkins spring-source-mvc-ano-v1.0]# mvn clean
[root@jenkins spring-source-mvc-ano-v1.0]# mvn package
推送项目到GitLab

在Gitlab创建一个仓库,然后把Java项目push 到仓库中,新建项目→创建空白项目

推送项目到仓库(提示:在GitLab主机操作)

unzip spring-source-mvc-ano-v1.0.zip
cd spring-source-mvc-ano-v1.0
git init
git add .
git commit -m '第一次提交'
git remote add origin [email protected]:test/maven.git
git push -u origin --all
构建Maven项目

安装完成后回到主页面点击新建Itme,即可看到 构建一个maven项目,输入任务名称后点击**构建一个maven项目 **点击确定。

保存后我们解决Maven安装路径问题,回到主页面点击 Manage Jenkins(管理Jenkins)→
Global Tool Configuration(全局工具配置)下拉找到 maven 配置项,点击 新增 Maven,把Install automatically(自动安装maven)的勾选取消掉,应为我们是手动安装的maven,所以Jenkins不知道具体安装路径

再次回到任务中检查 Build(构建)发现提示消失。

[root@jenkins ~]# ls /var/lib/jenkins/workspace/maven-job/target/   
spring-source-mvc-ano-1.0-SNAPSHOT.war  --这个war包就是构建出来的web项目

JAR包:就是Java项目的依赖工具
WAR包:Java项目都是打成war包进行发布,将war包放在tomcat的webapps下,并且tomcat服务器能够自动识别,能够对war包进行自动解压
部署Tomcat

准备一台机器安装Tomcat服务(实验环境可以跟前边的Nginx部署在同一台机器,不冲突)

[root@tomcat ~]# yum -y install java-1.8.0-openjdk
[root@tomcat ~]# tar -xf apache-tomcat-8.0.30.tar -C /usr/local/
[root@tomcat ~]# mv /usr/local/apache-tomcat-8.0.30/ /usr/local/tomcat 
[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh

设置tomcat随机自启

[root@tomcat ~]# vim /etc/rc.local
...
/usr/local/tomcat/bin/startup.sh

[root@tomcat ~]# chmod +x /etc/rc.d/rc.local
Jenkins发布Java项目

准备脚本

cat /var/lib/jenkins/script/jenkins-tomcat.sh

#!/bin/bash
#发布项目到tomcat

#定义tomcat网页根目录
WEB_DIR=/usr/local/tomcat/webapps/

#定义Jenkins项目所在路径
CODE_DIR=/var/lib/jenkins/workspace/maven-job/target

#项目发布时间
TIME=`date +%F-%H-%M-%S`

#打包项目
cd $CODE_DIR && tar -zcf /tmp/web-$TIME.tar.gz ./*.war

#发布项目
for IP in `cat /var/lib/jenkins/script/tomcat.txt`
do
        scp /tmp/web-$TIME.tar.gz root@$IP:$WEB_DIR
        ssh root@$IP "cd $WEB_DIR && mkdir web-$TIME"
        ssh root@$IP "cd $WEB_DIR && tar -xf web-$TIME.tar.gz -C web-$TIME && rm -rf web-$TIME.tar.gz"
        ssh root@$IP "cd $WEB_DIR && rm -rf ROOT* && \cp web-$TIME/*.war ROOT.war"
done
#准备for循环的主机地址
cat /var/lib/jenkins/script/tomcat.txt
192.168.0.26
chmod +x jenkins-tomcat.sh

回到Jenkins任务中增加构建步骤

了解内容:tomcat如何部署Java Zrlog论坛项目,

#清空webapps目录内容,上传zrlog.war包到webapps目录,默认会自动解压出一个zrlog目录
rm -rf /usr/local/tomcat/webapps/*

#将zrlog目录改名为ROOT作为tomcat的默认一级访问目录
mv zrlog ROOT

#zrlog需要数据库存储数据
yum -y install mariadb-server
systemctl start mariadb
mysql
create database zrlog;
grant all on zrlog.* to zrlog@"localhost" identified by '123456';

访问:http://server_ip:8080

第五章:Maven Nexus私服

私服是一种特殊的远程仓库,是架设在局域网内的仓库服务,用于代理广域网上的远程仓库,供局域网内的 maven 用户使用。

当 maven 需要下载构件的时候,会从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上后,再为 maven 的下载请求提供服务。

Nexus安装
主机名 IP地址 操作系统 硬件环境
nexus 自定义 CentOS 7.6 2Core/4G Mem/50G disk

Nexus下载地址:https://www.sonatype.com/download-oss-sonatype

实验环境在Jenkins主机安装即可(Nexus 需要 Java JDK 1.8环境支持)

[root@nexus ~]# yum -y install java-1.8.0-openjdk.x86_64
[root@nexus ~]# tar -xf nexus-3.13.0-01-unix.tar.gz -C /usr/local
[root@nexus ~]# cd /usr/local && mv nexus-3.13.0-01/ nexus && cd nexus/
Nexus目录结构介绍

这里选择一些主要的文件或者目录来介绍下:

  • bin #程序文件目录,nexus主程序文件用于启动程序、关闭程序

  • etc #配置文件(管理仓库列表、日志配置、安全设置)

  • lib #存放Nexus的库文件(Nexus运行时需要的jar包所在的目录)

  • **public ** #公共资源目录

  • system #此目录包含构成nexus的所有组件和插件

  • NOTICE.txt、OSS-LICENSE.txt、PRO-LICENSE.txt #许可证和版权相关文件

nexus程序文件支持的指令:

  • ./nexus start #启动后台Neuxs服务;
  • ./nexus stop #停止后台Neuxs服务;
  • ./nexus status #查看后台Nexus服务的状态;
  • ./nexus restart #重新启动后台Nexus服务;
配置Nexus

修改nexus.rc 文件指定启动用户

#修改文件指定用户
[root@nexus nexus]# vim bin/nexus.rc
run_as_user="root"


#启动Nexus
[root@nexus nexus]# bin/nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Starting nexus
警告含义:不建议使用 root 启动服务,为了避免权限不足,忽略此警告即可。


#查看Nexus端口(端口:8081)
[root@nexus nexus]# netstat -ntlp
tcp     0   0 0.0.0.0:8081   0.0.0.0:*      LISTEN      7398/java

提示:如需重新定义端口可以修改etc/nexus-default.properties文件。

设置服务随机自启

[root@nexus ~]# vim /etc/rc.local
...
/usr/local/nexus/bin/nexus start

[root@nexus ~]# chmod +x /etc/rc.d/rc.local
访问Nexus

浏览器访问:http://server_ip:8081/

点击右上角的 Sign out(登录)

  • 用户名:admin

  • 默认密码:admin123

这里可以查看当前有多少仓库,搭建好的Nexus,默认会带有一些maven仓库,一般使用这些仓库就足够了。

Nexus仓库

nexus仓库类型有3种: hosted、proxy、group

  • hosted(宿主仓库):用于内部项目的发布仓库,专门用来存储我们自己生成的构建。
  • proxy(代理仓库):用来代理远程公共仓库(如:代理Maven中央仓库、阿里远程仓库)
  • group(仓库组):用来聚合代理仓库和宿主仓库,并提供统一的服务地址。

maven-central仓库:用来代理Maven中央仓库,其仓库类型为proxy,只会下载和缓存中央仓库中的发布版本的构件。

maven-releases仓库:用来部署公司内部发布的版本构件,以及一些无法从公共仓库获取的第三方构件。

maven-snapshots仓库:用来部署公司内部的快照版本构件。

配置Nexus代理

阿里云Maven仓库地址:http://maven.aliyun.com/nexus/content/repositories/central

点击下方Save保存即可。

配置Maven连接Nexus

修改Maven的settings.xml文件,指定Nexus仓库地址

[root@jenkins ~]# vim /usr/local/maven/conf/settings.xml
...

#在servers标签内配置访问Nexus私服的认证信息
  <servers>
    <!--Nexus snapshots仓库-->
    <server>
      <id>nexus-snapshots</id>
      <username>admin</username>
      <password>admin123</password>
    </server>

    <!--Nexus Release仓库-->
    <server>
      <id>nexus-release</id>
      <username>admin</username>
      <password>admin123</password>
    </server>

    <!--Nexus central中央仓库-->
    <server>
      <id>nexus-central</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
  </servers>


#在mirrors标签内指定Nexus仓库地址(把阿里云地址删除)
  <mirrors>
  <!-- 指定Nexus 中央仓库地址,URL地址可以从Nexus对应的仓库中查看 -->
        <mirror>
           <id>maven-central</id>
           <mirrorOf>*</mirrorOf>
           <url>http://192.168.0.33:8081/repository/maven-central/</url>
        </mirror>

  <!-- 指定Nexus 快照仓库地址,URL地址可以从Nexus对应的仓库中查看 -->
        <mirror>
           <id>maven-snapshots</id>
           <mirrorOf>*</mirrorOf>
           <url>http://192.168.0.33:8081/repository/maven-snapshots/</url>
        </mirror>

  <!-- 指定Nexus Release仓库地址,URL地址可以从Nexus对应的仓库中查看 -->
        <mirror>
           <id>maven-releases</id>
           <mirrorOf>*</mirrorOf>
           <url>http://192.168.0.33:8081/repository/maven-releases/</url>
        </mirror>
  </mirrors>

验证Maven仓库,通过mvn package编译项目查看依赖的下载地址。

[root@jenkins spring-source-mvc-ano-v1.0]# mvn package

这些构件保存到本地的 /usr/local/sonatype-work/nexus3/blobs/default/content/ 路径最终是一个个的.bytes 类型的文件。

第六章:Jenkins Pipeline流水线

Jenkins Pipeline(流水线) 简单来说就是将多个任务连接起来的一套工作流程。

Jenkinsfile介绍

Jenkinsfile是用来编写 Pipeline 的脚本语法,在一个Pipeline中有如下几个基础概念:

  • pipeline:声明此语法是声明式(Declarative)式语法(还有一种脚本式的语法)

  • agent:是指定执行Step的具体节点,any表示所有(在Jenkins分布式环境下可以指定具体节点去执行任务)。

  • stages:代表构建项目的阶段开头,里边包含多个stage。

  • Stage(阶段):一个Pipeline由多个Stage组成,每个Stage(阶段)可包含多个Step(步骤)。

  • Steps(步骤):可以是拉取代码、构建项目、发布项目等。

示例:

pipeline{
    agent any   
    stages{     
        stage("下载源码"){    
           steps{
               echo "get code from scm"
           }
        }
        stage("构建源码"){
            steps{
                echo "packge code"
            }
        }
        stage("发布项目"){
            steps{
                echo "deploy"
            }
        }
    }
}
Pipeline Job 示例

创建一个Pipeline(流水线)项目,点击 新建Item

构建完成后,在页面以图形的形式显示 pipeline 的结构,点击对应的位置可以查看构建执行的情况。

案例:通过Pipeline发布项目

pipeline{
    agent any   
    stages{
        stage("下载源码"){    
           steps{
           	   //通过git拉取源码(通过流水线语法自动生成)
               git credentialsId: 'cf334a67-eee1-49e2-9a7b-5c2452b1398a', url: 'http://web.gitlab.com/test/spring-source.git'
           }
        }
        stage("构建源码"){
            steps{
                //进入到源码路径,通过mvn构建源码
                sh "cd /var/lib/jenkins/workspace/spring-source/ && /usr/local/maven/bin/mvn package"
            }
        }
        stage("发布项目"){
            steps{
                //通过脚本发布项目
                sh "/var/lib/jenkins/script/deploy-tomcat.sh"
            }
        }
    }
}
ne由多个Stage组成,每个Stage(阶段)可包含多个Step(步骤)。
- Steps(步骤):可以是拉取代码、构建项目、发布项目等。



示例:

```shell
pipeline{
    agent any   
    stages{     
        stage("下载源码"){    
           steps{
               echo "get code from scm"
           }
        }
        stage("构建源码"){
            steps{
                echo "packge code"
            }
        }
        stage("发布项目"){
            steps{
                echo "deploy"
            }
        }
    }
}
Pipeline Job 示例

创建一个Pipeline(流水线)项目,点击 新建Item

构建完成后,在页面以图形的形式显示 pipeline 的结构,点击对应的位置可以查看构建执行的情况。

案例:通过Pipeline发布项目

pipeline{
    agent any   
    stages{
        stage("下载源码"){    
           steps{
           	   //通过git拉取源码(通过流水线语法自动生成)
               git credentialsId: 'cf334a67-eee1-49e2-9a7b-5c2452b1398a', url: 'http://web.gitlab.com/test/spring-source.git'
           }
        }
        stage("构建源码"){
            steps{
                //进入到源码路径,通过mvn构建源码
                sh "cd /var/lib/jenkins/workspace/spring-source/ && /usr/local/maven/bin/mvn package"
            }
        }
        stage("发布项目"){
            steps{
                //通过脚本发布项目
                sh "/var/lib/jenkins/script/deploy-tomcat.sh"
            }
        }
    }
}

你可能感兴趣的:(Linux,gitlab,jenkins,devops,linux,运维,服务器)