Jenkins详解(三)

Jenkins详解(三)

目录
  • Jenkins详解(三)
    • 1、Jenkins介绍
    • 2、Jenkins CI/CD 流程
    • 3、部署环境
      • 3.1 环境准备
      • 3.2 安装GitLab
      • 3.3 初始化GitLab
      • 3.4 GitLab中文社区版补丁包安装
      • 3.5 修改GitLab配置文件/etc/gitlab/gitlab.rb
      • 3.6 在宿主机输入 http://192.168.200.26:88 地址就可以访问了
      • 3.7 创建一个项目
      • 3.8 配置GitLab的SSH密钥连接方式
      • 3.9 尝试将本地仓库代码推送到私有GitLab
    • 4、Jenkins 安装配置
      • 4.1 安装 java 环境
      • 4.2 安装和配置maven环境
      • 4.3 安装 jenkins
      • 4.4 配置文件
        • 4.4.1 查询 yum 下载 Jenkins 安装的文件
        • 4.4.2 修改配置文件
        • 4.4.3 启动 jenkins
        • 4.4.4 验证安装
      • 4.5 jenkins配置(web页面)
        • 4.5.1 登录 jenkins web界面
        • 4.5.2 管理员密码获取
        • 4.5.3 初始化安装插件
        • 4.5.4 创建第一个管理员用户
        • 4.5.5 url 配置
        • 4.5.6 安装完成
        • 4.5.7 配置 jdk、git、maven
    • 5、使用Jenkins
      • 5.1 修改默认源,改成国内源
      • 5.2 Jenkins 用户权限管理
        • 5.2.1 用户管理背景
        • 5.2.2 安装用户管理插件
        • 5.2.3 开启该插件功能
        • 5.2.4 验证用户管理
          • 5.2.4.1 匿名用户不可读写(全局安全配置)
          • 5.2.4.2 开启允许用户注册(全局安全配置)
          • 5.2.4.3 注册一个新用户
          • 5.2.4.4 重新登录新创建的 xiaozhao 用户,但是显示没有任何权限
        • 5.2.5 权限划分
          • 5.2.5.1 添加用户
          • 5.2.5.2 添加项目
          • 5.2.5.3 给予 xiaozhao 用户分配 user 角色
          • 5.2.5.4 针对指定用户分配项目角色
          • 5.2.5.5 创建两个项目分别以A-和B-开头的项目
          • 5.2.5.6 新建视图
          • 5.2.5.7 检测项目
      • 5.3 Jenkins 参数化构建
        • 5.3.1 Extended 插件
          • 5.3.1.1 安装插件
          • 5.3.1.2 项目配置
          • 5.3.1.3 选择安装过的插件
          • 5.3.1.4 进行配置
          • 5.3.1.5 构建选择执行shell进行测试
          • 5.3.1.6 参数化配置已经生效
          • 5.3.1.7 构建 test02
          • 5.3.1.8 数据来源选择文件
        • 5.3.2 Git 插件
          • 5.3.2.1 安装插件 Git Parameter
          • 5.3.2.2 进行相关配置
          • 5.3.2.3 配置 git 仓库
          • 5.3.2.4 进行构建
      • 5.4 Jenkins Master-Slave 架构
        • 5.4.1 安装
        • 5.4.2 配置
        • 5.4.3 构建
        • 5.4.4 扩展
      • 5.5 Jenkins pipeline
        • 5.5.1 概览
        • 5.5.2 实操
          • 5.5.2.1 新建任务
          • 5.5.2.2 添加项目Git参数化构建
          • 5.5.2.3 编写 pipeline 脚本
          • 5.5.2.4 构建测试
      • 5.6 Jenkins 构建邮件状态通知
        • 5.6.1 前提
        • 5.6.2 基础配置
        • 5.6.3 配置到项目中
      • 5.7 Jenkins 流水线自动化发布PHP项目
        • 5.7.1 前提
        • 5.7.2 配置
          • 5.7.2.1 创建job
          • 5.7.2.2 参数化构建
          • 5.7.2.3 配置pipeline脚本 (直接配置或者git获取)
          • 5.7.2.4 编写 jenkinsfile
        • 5.7.3 需要提前配置 wordpress 环境
          • 5.7.3.1 需要 java 环境支持
          • 5.7.3.2 安装LNMP环境
          • 5.7.3.3 配置 nginx 文件
          • 5.7.3.4 启动
        • 5.7.4 构建
      • 5.8 Jenkins流水线自动化发布Java项目
        • 5.8.1 前提
          • 5.8.1.1 安装插件:Maven Integration
          • 5.8.1.2 环境:maven、git、java、tomcat
          • 5.8.1.3 远程拉取配置
        • 5.8.2 配置
          • 5.8.2.1 新建job
          • 5.8.2.2 参数化构建
          • 5.8.2.3 配置git仓库(针对jenkinsfile)
          • 5.8.2.4 编写Jenkinsfile
        • 5.8.3 构建
        • 5.8.4 访问

1、Jenkins介绍

  • Jenkins 功能
    • 持续的软件版本发布/测试项目。
    • 监控外部调用执行的工作。
  • Jenkins 概念
    • Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的开源项目,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允许持续集成。
  • Jenkins 目的
    • 持续、自动地构建/测试软件项目。
    • 监控软件开放流程,快速问题定位及处理,提提高开发效率。
  • Jenkins 特性
    • 开源的java语言开发持续集成工具,支持CI,CD。
    • 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
    • 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
    • 分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
    • 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
    • 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。
  • 产品发布流程
    产品设计成型 -> 开发人员开发代码 -> 测试人员测试功能 -> 运维人员发布上线
    • 持续集成(Continuous integration,简称CI)
    • 持续交付(Continuous delivery)
    • 持续部署(continuous deployment)

2、Jenkins CI/CD 流程

说明:这张图稍微更形象一点,上线之前先把代码git到版本仓库,然后通过Jenkins将Java项目通过maven去构建,这是在非容器之前,典型的自动化的一个版本上线流程。那它有哪些问题呢?
如:它的测试环境,预生产环境,测试环境。会存在一定的兼容性问题 (环境之间会有一定的差异)

说明:它这里有一个docker harbor 的镜像仓库,通常会把你的环境打包为一个镜像,通过镜像的方式来部署。

3、部署环境

3.1 环境准备

主机名物理IP
jenkins192.168.200.24
web192.168.200.25
git192.168.200.26

3.2 安装GitLab

官方安装文档:https://about.gitlab.com/installation/#centos-7
GitLab国内源下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

#根据需要下载GitLab安装包
[root@git ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm[root@git ~]# yum -y localinstall gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm 重要说明:
yum localinstall 利用yum安装本地指定的rpm包,好处是自动解决依赖问题

3.3 初始化GitLab

[root@git ~]# gitlab-ctl reconfigure
#以下省略若干。。。#查看gitlab启动状态
[root@git ~]# gitlab-ctl status
run: alertmanager: (pid 3953) 8s; run: log: (pid 3665) 43s
run: gitaly: (pid 3787) 11s; run: log: (pid 3093) 121s
run: gitlab-exporter: (pid 3840) 9s; run: log: (pid 3575) 59s
run: gitlab-workhorse: (pid 3813) 10s; run: log: (pid 3405) 76s
run: grafana: (pid 3978) 7s; run: log: (pid 3764) 20s
run: logrotate: (pid 3434) 70s; run: log: (pid 3460) 69s
run: nginx: (pid 3398) 76s; run: log: (pid 3424) 75s
run: node-exporter: (pid 3831) 10s; run: log: (pid 3520) 65s
run: postgres-exporter: (pid 3968) 7s; run: log: (pid 3695) 39s
run: postgresql: (pid 3176) 116s; run: log: (pid 3188) 113s
run: prometheus: (pid 3932) 8s; run: log: (pid 3633) 49s
run: redis: (pid 3015) 128s; run: log: (pid 3027) 125s
run: redis-exporter: (pid 3886) 9s; run: log: (pid 3607) 53s
run: sidekiq: (pid 3362) 83s; run: log: (pid 3376) 82s
run: unicorn: (pid 3332) 89s; run: log: (pid 3359) 87s

3.4 GitLab中文社区版补丁包安装

GitLab中文社区:https://gitlab.com/xhang/gitlab/tree/11-2-stable-zh

#解压GitLab中文版补丁包
[root@git ~]# tar xf gitlab-12-3-stable-zh.tar.gz#查看系统已经安装的GitLab版本号
[root@git ~]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
12.3.5#查看解压后的补丁包版本号
[root@git ~]# cat gitlab-12-3-stable-zh/VERSION 
12.3.5说明:
补丁包版本号和安装的GitLab版本号需要一致
#备份英文版GitLab
[root@git ~]# cp -r /opt/gitlab/embedded/service/gitlab-rails{,.bak}#将中文补丁包的内容覆盖英文版
[root@git ~]# /bin/cp -rf gitlab-12-3-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/

3.5 修改GitLab配置文件/etc/gitlab/gitlab.rb

我们需要修改GitLab的默认访问域名(因为我们是在内网搭建的GitLab)
GitLab默认的监听端口为80,但是在企业中,这个端口经常被别的服务占用,所以我们还需要更换端口号

[root@git ~]# cp /etc/gitlab/gitlab.rb{,.bak}[root@git ~]# vim /etc/gitlab/gitlab.rb
[root@git ~]# sed -n "13p;1105p" /etc/gitlab/gitlab.rb
external_url 'http://192.168.200.26:88'
nginx['listen_port'] = 88
#重新配置GitLab
[root@git ~]# gitlab-ctl reconfigure
#以下省略若干。。。#重启动GitLab
[root@git ~]# gitlab-ctl restart
ok: run: alertmanager: (pid 5823) 1s
ok: run: gitaly: (pid 5835) 0s
ok: run: gitlab-exporter: (pid 5856) 1s
ok: run: gitlab-workhorse: (pid 5871) 0s
ok: run: grafana: (pid 5885) 0s
ok: run: logrotate: (pid 5901) 1s
ok: run: nginx: (pid 5983) 0s
ok: run: node-exporter: (pid 5992) 1s
ok: run: postgres-exporter: (pid 5999) 0s
ok: run: postgresql: (pid 6010) 1s
ok: run: prometheus: (pid 6019) 0s
ok: run: redis: (pid 6033) 0s
ok: run: redis-exporter: (pid 6037) 1s
ok: run: sidekiq: (pid 6046) 0s
ok: run: unicorn: (pid 6057) 0s

3.6 在宿主机输入 http://192.168.200.26:88 地址就可以访问了

3.7 创建一个项目

3.8 配置GitLab的SSH密钥连接方式

# 在 Web 客户端生成密钥对 
[root@web ~]# ssh-keygen -t rsa
[root@web ~]# ssh-copy-id 192.168.200.26# 公钥内容,复制到GitLab上
[root@web ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYPbhqszgW9Yv69YYtZAYgIE8zSwJEqQYVuoeLRlXDJ7uqVQxkVx2i4+rhf24w3D2BiZCveEn5tlrU2UexTmmaULGYulv25daFOC6jV/Ll7vQI0JJB5kgvUyI/k3UgYw7P1hWxMTjrzsnSDGdMisOsp0lywzaGNG1BfouNbBLOxhxa6V55LVKmpgPRyU+rc7EjrJ3uL5iYXwS+LJvht9KdJcFQz95F8JmQfe/Vi+UX2HSHXplpwVGGhFM0/Ht2I0Orw8nwsVo6pa4viwQusIuN0zHwHSIIa57E1dxOEvP6NPk2PLYgIQY5pAW6rt+78SvOm5WDmqwHjM16rqM77/hd root@web

3.9 尝试将本地仓库代码推送到私有GitLab

#创建git仓库并初始化
[root@web ~]# mkdir /mycode
[root@web ~]# cd /mycode/
[root@web mycode]# git init
初始化空的 Git 版本库于 /mycode/.git/
# 创建测试文件
[root@web mycode]# echo "web" > index.html
[root@web mycode]# cat index.html 
web# Git全局配置
[root@web mycode]# git config --global user.name "git"
[root@web mycode]# git config --global user.email "git@163.com"# 提交到本地仓库
[root@web mycode]# git add .
[root@web mycode]# git commit -m "web第一次提交测试"# 添加远程GitLab仓库管理
[root@web mycode]# git remote add origin http://192.168.200.26:88/root/app.git
[root@web mycode]# git remote -v
origin	http://192.168.200.26:88/root/app.git (fetch)
origin	http://192.168.200.26:88/root/app.git (push)# 推送本地仓库master分支到远程仓库GitLab上
[root@web mycode]# git push origin master

4、Jenkins 安装配置

jenkins官网以及插件

4.1 安装 java 环境

# 安装 java 环境(最新的Jenkins只执行Java11以上的版本)
[root@jenkins ~]# yum -y install fontconfig java-11-openjdk# 检测java版本
[root@jenkins ~]# java -version
openjdk version "11.0.20" 2023-07-18 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.20.0.8-1.el7_9) (build 11.0.20+8-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.20.0.8-1.el7_9) (build 11.0.20+8-LTS, mixed mode, sharing)

4.2 安装和配置maven环境

# 解压安装maven
[root@jenkins ~]# tar xf apache-maven-3.5.0-bin.tar.gz -C /usr/local/
[root@jenkins ~]# mv /usr/local/apache-maven-3.5.0 /usr/local/maven# 配置maven环境变量
[root@jenkins ~]# cat >> /etc/profile << EOF
MAVEN_HOME=/usr/local/maven
export PATH=${MAVEN_HOME}/bin:$PATH
EOF[root@jenkins ~]# source /etc/profile[root@jenkins ~]# mvn -v
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: /usr/local/maven
Java version: 11.0.20, vendor: Red Hat, Inc.
Java home: /usr/lib/jvm/java-11-openjdk-11.0.20.0.8-1.el7_9.x86_64
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.83.1.el7.x86_64", arch: "amd64", family: "unix"

4.3 安装 jenkins

# 导入jenkins源
[root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo# 导入jenkins官方证书
[root@jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key# 安装jenkins(安装的是最新的LTS版本)
[root@jenkins ~]# yum install -y jenkins

4.4 配置文件

4.4.1 查询 yum 下载 Jenkins 安装的文件

# 查看yum都安装了哪些东西
[root@jenkins ~]# rpm -ql jenkins
/etc/init.d/jenkins           # 启动文件
/etc/logrotate.d/jenkins      # 日志分割配置文件
/etc/sysconfig/jenkins        # jenkins主配置文件
/usr/bin/jenkins              # 存放war包目录
/usr/lib/systemd/system/jenkins.service    # jenkins启动脚本文件
/usr/sbin/rcjenkins           # 命令
/usr/share/java/jenkins.war   # war 包
/usr/share/jenkins
/usr/share/jenkins/migrate
/var/cache/jenkins            # war包解压目录 jenkins网页代码目录
/var/lib/jenkins              # jenkins 工作目录
/var/log/jenkins              # 日志

4.4.2 修改配置文件

# 复制文件
[root@jenkins ~]# cp /etc/sysconfig/jenkins{,.bak}# 配置文件说明
[root@jenkins ~]# vim /etc/sysconfig/jenkins
[root@jenkins ~]# grep "^[a-Z]" /etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins"      # jenkins工作目录
JENKINS_JAVA_CMD=""
JENKINS_USER="root"                  # jenkinx启动用户
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
JENKINS_PORT="8080"                  # 端口
JENKINS_LISTEN_ADDRESS=""
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="no"
JENKINS_HANDLER_MAX="100"            # 最大连接
JENKINS_HANDLER_IDLE="20"
JENKINS_ARGS=""

4.4.3 启动 jenkins

# 启动 jenkins
[root@jenkins ~]# systemctl start jenkins# 设置开机自启动
[root@jenkins ~]# systemctl enable jenkins

4.4.4 验证安装

[root@jenkins ~]# ps -ef|grep jenkins|grep -v grep
jenkins    2046      1 58 16:32 ?        00:00:55 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=%C/jenkins/war --httpPort=8080[root@jenkins ~]# netstat -lnutp|grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      2046/java

4.5 jenkins配置(web页面)

4.5.1 登录 jenkins web界面

4.5.2 管理员密码获取

[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
b2f802c1d39d4cb28e1340dcc46e3c44

4.5.3 初始化安装插件

选择默认安装即可

4.5.4 创建第一个管理员用户

4.5.5 url 配置

4.5.6 安装完成

出现如下页面时,表示安装完成

4.5.7 配置 jdk、git、maven

系统管理->全局工具配置

jdk:可以自动安装,但是我们已经安装了,这里写入我们jdk的路径即可

git:

maven:

5、使用Jenkins

5.1 修改默认源,改成国内源

jenkins->系统管理->管理插件->高级 选择升级站点
把:http://updates.jenkins-ci.org/update-center.json
换成:http://mirror.esuni.jp/jenkins/updates/update-center.json

5.2 Jenkins 用户权限管理

5.2.1 用户管理背景

针对开发、运维、测试针对不同角色进行不同权限划分,
基于插件: Role-based Authorization Strategy ,Authorize Project 来实现。

5.2.2 安装用户管理插件

安装该插件:
系统管理->管理插件-可选插件->搜索该插件选中直接安装即可。

5.2.3 开启该插件功能

系统管理->全局安全设置-授权策略->选中该插件功能即可->保存

5.2.4 验证用户管理

关闭用户管理功能来进行实践测试

5.2.4.1 匿名用户不可读写(全局安全配置)

5.2.4.2 开启允许用户注册(全局安全配置)

5.2.4.3 注册一个新用户

5.2.4.4 重新登录新创建的 xiaozhao 用户,但是显示没有任何权限

5.2.5 权限划分

安装 Role-Based Strategy 插件后,系统管理 中多了如图下所示的一个功能,用户权限的划分就是靠他来做的。

5.2.5.1 添加用户

Manage Roles:管理角色,相当于针对角色赋予不同权限,然后在将该角色分配给用户。角色就相当于一个组。其里面又有Global roles(全局)、Project roles(项目)、Slave roles(),来进行不同划分。
默认是有一个admin用户的,是所有权限都有的,默认如图下所示

接下来我们来添加一个角色:user ,给其一个读的权限

5.2.5.2 添加项目
  • roles to add:表示项目角色
  • Pattern:是用来做正则匹配的(匹配的内容是Job(项目名)),比如说根据正则匹配到的项目项目角色就都有权限;
    接下来新建一个 ItemA 项目角色,改项目角色一般给其构建、取消、读取、读取空间权限,一般配置这4个即可

还可以在新建一个 ItemB 项目角色:

  • Slave roles(奴隶角色):节点相关的权限
  • roles to add:表示项目角色
  • Pattern:是用来做正则匹配的(匹配的内容是节点(slavej节点)),比如说根据正则匹配到的项目项目角色就都有权限;
5.2.5.3 给予 xiaozhao 用户分配 user 角色

这样其就有 manage roles 中刚才创建的user角色的权限了。

此时再去看 xiaozhao 用户,已有查看的权限了

5.2.5.4 针对指定用户分配项目角色

比如将 xiaozhao 用户分配有 ItemA 项目角色,这样其就可以有刚才我们创建的 ItemA 项目角色正则匹配到的项目的权限了。

xiaoli 也为其分配一个 ItemB 项目角色

5.2.5.5 创建两个项目分别以A-和B-开头的项目

5.2.5.6 新建视图

开发组

测试组

5.2.5.7 检测项目

此时可以在 xiaozhao 用户这里看到 ItemA 项目角色所匹配到的项目 A-web01

同理 xiaoli 用户这里看到 ItemB 项目角色所匹配到的项目 B-web01

5.3 Jenkins 参数化构建

参数化构建背景:如果只是简单的构建,jenkins自己默认的插件可以做,但是如果我们想要在构建过程中有更多功能,比如说:选择性构建、传参、项目指定变量等等其他功能,基础的参数化构建可以实现一些简单功能,但是要想使用更多功能这时候我们就需要借助参数化构建来实现交互的功能。此处我们来借助以下插件来进行实现:

  • Extended Choice Parameter(更丰富的参数化构建插件)
  • Git Parameter

5.3.1 Extended 插件

5.3.1.1 安装插件

首先还是安装该插件,去管理插件里面进行安装 Extended Choice Parameter

5.3.1.2 项目配置

5.3.1.3 选择安装过的插件

5.3.1.4 进行配置

这里这个branch 我们就相当于给其当做一个变量,然后来为其进行传参。

5.3.1.5 构建选择执行shell进行测试

5.3.1.6 参数化配置已经生效

5.3.1.7 构建 test02

可以发现控制台的输出也是成功了的

5.3.1.8 数据来源选择文件

在jenkins所在服务器进行如下操作:

# 建立一个文件
[root@jenkins ~]# echo "abc=t1,t2,t3,t4" >> /opt/jenkins.property

web 端配置:

进行测试:
构建前:(可以发现也是生效的)

构建后查看结果:(也是成功的)

5.3.2 Git 插件

5.3.2.1 安装插件 Git Parameter

5.3.2.2 进行相关配置

5.3.2.3 配置 git 仓库

当构建时给一个选择列表,这个变量是代表分支。有哪些分支传递给这个变量。

5.3.2.4 进行构建

1、列表中已经有了可选的分支

2、构建成功

3、新建分支增添内容再来验证插件

# 创建新的分支
[root@web mycode]# git branch
* master
[root@web mycode]# git checkout -b test
切换到一个新分支 'test'
[root@web mycode]# git branchmaster
* test# 提交新的分支文件
[root@web mycode]# echo "aaa" > ceshi.ttx
[root@web mycode]# git add .
[root@web mycode]# git commit -m "web第二次提交测试"
[root@web mycode]# git push origin test

4、jenkins 构建查看
可以发现已经有了我们新建的分支

构建成功!!

5.4 Jenkins Master-Slave 架构

  • jenkins的Master-slave分布式架构主要是为了解决jenkins单点构建任务多、负载较高、性能不足的场景。
  • Master/Slave相当于Server和agent的概念。Master提供web接口让用户来管理job和slave,job可以运行在master本机或者被分配到slave上运行构建。一个master(jenkins服务所在机器)可以关联多个slave用来为不同的job或相同的job的不同配置来服务。

5.4.1 安装

前提:slave 所在服务器必须有 java环境

[root@web ~]# which java
/usr/bin/java

jenkins web 端进行操作:系统管理->管理节点->新建节点
进行基础配置,配置选项中的内容是可变的,根据情况来

注意这里需要配置凭据,也就是配置slave所在服务器用户和密码

之后查看日志已经成功了!

5.4.2 配置

在项目 job 中进行配置:可通过标签或者名称进行匹配(标签可在安装时配置)

5.4.3 构建

可以发现控制台的日志,其也是 slave 构建的

之后查看构建完的工作目录,也有预想中的文件。

[root@web ~]# ll /var/lib/jenkins/workspace/A-web01/
总用量 4
-rw-r--r-- 1 root root 4 8月  27 22:00 index.html

这样基本上就实现了借助 jenkins 的 slave 去构建 job了。
目前是在 slave 构建也在 slave 上部署,之后我们可以通过脚本,比如借助 rsync、ansible 等部署在其他服务器上。

5.4.4 扩展

可以为slave服务器在配置时候加上标签,这样也会方便我们选择,用法也不单单局限在一台服务器上,可以让多台 slave 去竞选。

5.5 Jenkins pipeline

5.5.1 概览

在对 jenkins 进行初始化安装时,默认已经安装了 jenkins 的相关插件,如下图所示:

5.5.2 实操

5.5.2.1 新建任务

5.5.2.2 添加项目Git参数化构建

5.5.2.3 编写 pipeline 脚本

可以借助流水线语法去做。

node {def mvnHomestage('git checkout') { // for display purposescheckout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'c4f13ee9-bbb1-41cc-9a1c-d72f4dfad6a9', url: 'http://192.168.200.26:88/root/app.git']])}stage('maven Build') {echo "maven build..."}stage('deploy') {echo "deploy..."}stage('test') {echo "test..."}
}

5.5.2.4 构建测试

可以去服务器上验证一下(git checkout)刚才拉取下来的代码:

[root@jenkins ~]# ll /var/lib/jenkins/workspace/pipeline-test/
总用量 4
-rw-r--r-- 1 jenkins jenkins 4 8月  27 22:53 index.html

补充:

  • 可以从代码版本管理仓库中读取 pipeline 脚本(相当于将 pipeline 脚本放在仓库中)我们可以选择git。
  • 首先需要将 pipeline 脚本提交到我们新建的 git仓库中(步骤再此忽略。)

5.6 Jenkins 构建邮件状态通知

5.6.1 前提

前提:服务器开启邮箱服务

[root@jenkins ~]# systemctl status postfix | grep activeActive: active (running) since 二 2023-08-22 16:14:29 CST; 5 days ago

5.6.2 基础配置

需要安装一个插件:Email Extension Plugin

进行配置:系统管理->系统设置->相关配置如下图:

可以在此处进行测试发送!检验配置是否正确

查看邮箱

5.6.3 配置到项目中

在项目的配置中选择构建后操作,选择我们对应的插件

填写发件人信息

配置构建成功发送邮件

控制台也有邮件发送成功输出

检查实际是否接收到邮件

5.7 Jenkins 流水线自动化发布PHP项目

5.7.1 前提

环境为:lnmp
PHP项目:wordpress(此处我们下载一个wordpress的源码。将其模拟为我们的代码上传到我们的git仓库)

# 创建新的分支
[root@web mycode]# git checkout -b lnmp
切换到一个新分支 'lnmp'
[root@web mycode]# git branch
* lnmpmastertest# 下载wordpress的源码
[root@web mycode]# wget https://cn.wordpress.org/wordpress-5.2.1-zh_CN.tar.gz -O ~/wordpress-5.2.1-zh_CN.tar.gz
[root@web mycode]# tar xf ~/wordpress-5.2.1-zh_CN.tar.gz -C ~/
[root@web mycode]# mv ~/wordpress/* .
[root@web mycode]# echo "ok" > status.html# 提交到本地仓库
[root@web mycode]# git add --all
[root@web mycode]# git commit -m "web第三次提交测试"
[root@web mycode]# git push origin lnmp

部署节点: node 节点需要在系统管理中配置节点

5.7.2 配置

5.7.2.1 创建job

5.7.2.2 参数化构建

5.7.2.3 配置pipeline脚本 (直接配置或者git获取)

直接配置

git获取

5.7.2.4 编写 jenkinsfile
编写 jenkinsfile 源码文件:jenkinsfile-PHP
[root@web mycode]# vim jenkinsfile-PHP
[root@web mycode]# cat jenkinsfile-PHP
node ("slave") {stage('git checkout') {checkout scmGit(branches: [[name: '*/lnmp']], extensions: [], userRemoteConfigs: [[credentialsId: 'c4f13ee9-bbb1-41cc-9a1c-d72f4dfad6a9', url: 'http://192.168.200.26:88/root/app.git']])}stage('code copy') {sh '''rm -rf ${WORKSPACE}/.gitmv /usr/share/nginx/html/wp.com /data/backup/wp.com-$(date +"%F_%T")cp -rf ${WORKSPACE} /usr/share/nginx/html/wp.com'''}stage('test') {sh "curl http://192.168.200.25/status.html"}
}# 提交到本地仓库
[root@web mycode]# git add .
[root@web mycode]# git commit -m "web第四次提交测试"
[root@web mycode]# git push origin lnmp

下面为带解释版,但不可以使用,部分注释会造成问题

node ("slave") {                  # 绑定到该节点去执行stage('git checkout') {checkout scmGit(branches: [[name: '*/lnmp']], extensions: [], userRemoteConfigs: [[credentialsId: 'c4f13ee9-bbb1-41cc-9a1c-d72f4dfad6a9', url: 'http://192.168.200.26:88/root/app.git']])}# 拉代码# $class: 'GitSCM' git插件获取代码的工具# branches 分支名称# doGenerateSubmoduleConfigurations 是否包含子模块配置# extensions 扩展功能# submoduleCfg  子模块配置# userRemoteConfigs 远程用户配置(仓库地址)stage('code copy') {                           # 复制代码sh '''rm -rf ${WORKSPACE}/.git            # 删除拉下来的项目的.git敏感文件mkdir -p /data/backup/web-$(date +"%F")   # 创建备份目录mv /usr/share/nginx/html/wp.com /data/backup/wp.com-$(date +"%F_%T")   # 备份旧文件cp -rf ${WORKSPACE} /usr/share/nginx/html/wp.com'''                 # 新文件复制到站点目录}stage('test') {               # 测试sh "curl http://192.168.200.25/status.html"}
}

5.7.3 需要提前配置 wordpress 环境

5.7.3.1 需要 java 环境支持
[root@web ~]# which java
/usr/bin/java
5.7.3.2 安装LNMP环境
[root@web ~]# yum -y install epel-release nginx php-fpm php-mysql
5.7.3.3 配置 nginx 文件
[root@web ~]# sed -n "36p;42p" /etc/nginx/nginx.confinclude /etc/nginx/conf.d/*.conf;           # include了一个配置文件目录root         /usr/share/nginx/html;     # 默认的网页目录# 因此我们增加一个server配置文件即可
[root@web ~]# vim /etc/nginx/conf.d/wp.conf
[root@web ~]# cat /etc/nginx/conf.d/wp.conf
server {listen 80;server_name wp.test.com;root    /usr/share/nginx/html/wp.com;location / {index index.php index.html;}location ~\.php {fastcgi_index index.php;fastcgi_pass 127.0.0.1:9000;include fastcgi.conf;}
}# 创建 wordpress 网页目录
[root@web ~]# mkdir -p /usr/share/nginx/html/wp.com
5.7.3.4 启动
[root@web ~]# systemctl start nginx
[root@web ~]# systemctl start php-fpm

5.7.4 构建

构建概览:

控制台输出详情:

可以看到每一步的执行详情,最后也是成功的!!!
此外我们可以查看服务器及网页实际体验效果进行验证。http://192.168.200.25

5.8 Jenkins流水线自动化发布Java项目

5.8.1 前提

5.8.1.1 安装插件:Maven Integration

5.8.1.2 环境:maven、git、java、tomcat
[root@web ~]# which git
/usr/bin/git
[root@web ~]# which java
/usr/bin/java
[root@web ~]# which mvn
/usr/local/maven/bin/mvn
[root@web ~]# tar xf apache-tomcat-8.0.27.tar.gz -C /usr/local/
[root@web ~]# mv /usr/local/apache-tomcat-8.0.27 /usr/local/tomcat
[root@web ~]# rm -rf /usr/local/tomcat/webapps/*
# 部署 tomcat 环境变量
[root@web ~]# cat >> /etc/profile << EOF
export TOMCAT_HOME=/usr/local/tomcat
EOF
[root@web ~]# source /etc/profile
5.8.1.3 远程拉取配置

用的博客系统代码: git clone https://github.com/88250/solo.git

# 创建新的分支
[root@web mycode]# git checkout -b solo
切换到一个新分支 'solo'
[root@web mycode]# git branchlnmpmaster
* solotest# 下载 solo 源码
[root@web mycode]# wget https://github.com/88250/solo/archive/refs/heads/master.zip# 解压压缩包
[root@web mycode]# unzip master.zip
[root@web mycode]# mv solo-master/* .
[root@web mycode]# rm -rf solo-master master.zip # 修改指定的域名
[root@web mycode]# vim src/main/resources/latke.properties
[root@web mycode]# sed -n "21p" src/main/resources/latke.properties
serverHost=192.168.200.25[root@web mycode]# echo "ok" > status.html# 提交到本地仓库
[root@web mycode]# git add --all
[root@web mycode]# git commit -m "web第四次提交测试"
[root@web mycode]# git push origin solo

部署节点: node 节点需要在系统管理中配置节点

5.8.2 配置

5.8.2.1 新建job

5.8.2.2 参数化构建

5.8.2.3 配置git仓库(针对jenkinsfile)

5.8.2.4 编写Jenkinsfile

编写 jenkinsfile 源码文件:Jenkinsfile-JAVA

[root@web mycode]# vim Jenkinsfile-JAVA
[root@web mycode]# cat Jenkinsfile-JAVA
node ("slave") {stage('git checkout') {checkout scmGit(branches: [[name: '*/solo']], extensions: [], userRemoteConfigs: [[credentialsId: 'c4f13ee9-bbb1-41cc-9a1c-d72f4dfad6a9', url: 'http://192.168.200.26:88/root/app.git']])}stage('maven build') {sh '''export JAVA_HOME=/usr/local/jdk/usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true'''}stage('deploy') {sh '''JENKINS_NODE_COOKIE=dontkillmeexport JAVA_HOME=/usr/local/jdkTOMCAT_HOME=/usr/local/tomcatWWWROOT=$TOMCAT_HOME/webapps/ROOT[ -d /data/backup ] || mkdir -p /data/backupif [ -d $WWWROOT ];thenmv $WWWROOT /data/backup/tomcat-$(date +"%F_%T")fiunzip ${WORKSPACE}/target/*.war -d $WWWROOTPID=$(ps -ef |grep tomcat |grep -v "grep" |awk '{print $2}')[ -n "$PID" ] && kill -9 $PIDnohup $TOMCAT_HOME/bin/startup.sh &'''}stage('test') {echo "susses"}
}# 提交到本地仓库
[root@web mycode]# git add --all
[root@web mycode]# git commit -m "web第五次提交测试"
[root@web mycode]# git push origin solo

下面为带解释版,但不可以使用,部分注释会造成问题

node ("slave") {			  # 绑定到该节点构建stage('git checkout') {    # 拉代码checkout scmGit(branches: [[name: '*/solo']], extensions: [], userRemoteConfigs: [[credentialsId: 'c4f13ee9-bbb1-41cc-9a1c-d72f4dfad6a9', url: 'http://192.168.200.26:88/root/app.git']])}stage('maven build') {sh '''export JAVA_HOME=/usr/local/jdk		# 在指定java环境变量								/usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true     # 构建maven包 clean package表示构建之前会清理之前构建的包,-Dmaven.test.skip=true表示跳过单元测试'''}stage('deploy') {sh '''JENKINS_NODE_COOKIE=dontkillme     # 解决jenkins会在构建结束杀掉衍生子进程问题export JAVA_HOME=/usr/local/jdkTOMCAT_HOME=/usr/local/tomcatWWWROOT=$TOMCAT_HOME/webapps/ROOT[ -d /data/backup ] || mkdir -p /data/backupif [ -d $WWWROOT ];thenmv $WWWROOT /data/backup/tomcat-$(date +"%F_%T")fiunzip ${WORKSPACE}/target/*.war -d $WWWROOT			# 项目包解压到站点目录PID=$(ps -ef |grep tomcat |grep -v "grep" |awk '{print $2}')[ -n "$PID" ] && kill -9 $PIDnohup $TOMCAT_HOME/bin/startup.sh &'''}stage('test') {echo "susses"}
}

5.8.3 构建

构建概览:

控制台输出详情:

5.8.4 访问

http://192.168.200.25:8080/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/68537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity-Cinemachine相机】虚拟相机旋转Composer属性详解

Look At和Aim本质是控制虚拟相机自身的旋转&#xff0c;并不一定非要看着&#xff0c;或者并不一定非要瞄着这里的游戏对象 Look At和Aim是以Look At里面的对象作为参考来旋转自身 Do nothing&#xff1a;表现出来的行为和Look At空出来一样 Composer&#xff1a;是一个标准的…

机器学习(吴恩达第一课)

课程链接 文章目录 第一周1、机器学习定义2、监督学习(Supervised learning)1、回归(Regression)2、分类(Classification) 3、无监督学习(Unsupervised learning)4、线性回归模型5、代价函数6、梯度下降(Gradient descent)1、学习率2、用于线性回归的梯度下降 第二周(多维特征…

2605. 从两个数字数组里生成最小数字

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;枚举比较法方法二&#xff1a;集合的位运算表示法 写在最后 Tag 【贪心】【位运算】【数组】 题目来源 2605. 从两个数字数组里生成最小数字 题目解读 给定两个各自只包含数字 1 到 9 的两个数组&#xff0c;每个数组…

静态路由:配置和使用详解

文章目录 一、静态路由的配置和使用详解1. 配置要点1.1 点到点接口配置1.2 以太网接口配置 2. 默认路由3. 静态路由的配置命令4. 静态路由实现路由备份和负载分担 二、静态路由的优先级和比较1. 静态路由的优先级设置2. 静态路由与动态路由的比较2.1 静态路由优缺点2.2 动态路由…

【STM32】学习笔记-SPI通信

SPI通信 SPI通信&#xff08;Serial Peripheral Interface&#xff09;是一种同步的串行通信协议&#xff0c;用于在微控制器、传感器、存储器、数字信号处理器等之间进行通信。SPI通信协议需要使用4个线路进行通信&#xff1a;时钟线(SCLK)、主输入/主输出线(MISO)、主输出/主…

Elasticsearch、Kibana以及Java操作ES 的快速使用

docker 安装elastic search 、 kibana&#xff08;可视化管理elastic search&#xff09; docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1创建docker自定义网络 docker自定义网络可以使得容器之间使用容器名网络互连&#xff0c;默认的网络不会有这功能。 一定…

聚焦磷酸铁锂产线革新,宏工科技一站式解决方案

兼顾了低成本与安全性两大属性&#xff0c;磷酸铁锂市场在全球范围内持续升温&#xff0c;并有望保持较高的景气度。巨大的需求空间之下&#xff0c;行业对于锂电装备企业的自动化与智能化水平、整线交付能力、产品效率与稳定性等均提出了新的要求。 以宏工科技股份有限公司&a…

ES查询报错内容长度超过104857600

项目场景&#xff1a; 使用 ElasticsearchRestTemplate 或者使用 RestHighLevelClient 查询 ES 报错 内容长度超过 104857600 问题描述 ES 查询报错 entiity content is too long xxx for the configured buffer limit 104857600 Overridepublic void esQuery() {restHighL…

LiveGBS流媒体平台GB/T28181功能-支持数据库切换为高斯数据库信创瀚高数据信创数据库

LiveGBS流媒体平台GB/T28181功能-支持数据库切换为高斯数据库信创瀚高数据信创数据库 1、如何配置切换高斯数据库&#xff1f;2、如何配置切换信创瀚高数据库&#xff1f;3、搭建GB28181视频直播平台 1、如何配置切换高斯数据库&#xff1f; livecms.ini -> [db]下面添加配…

优思学院|亲和图案例:寻找六西格玛的项目

什么是亲和图&#xff1f; 亲和图&#xff08;Affinity Diagram&#xff09;主要功能在於分类归纳&#xff0c;协助在一堆杂乱无章的资料之中&#xff0c;有系统的归纳出几个大类&#xff0c;以利后续作业。通常先利用头脑风暴&#xff08;Brainstorming&#xff09;方式得到大…

视频监控/视频云存储EasyCVR平台接入华为ivs3800平台提示400报错,如何解决?

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;视频云存储/安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频…

并行计算之计算平台体系结构(流水线,异构处理器与异构并行)

并行计算粒度 分布式并行(多主机&#xff0c;多进程) &#xff1a; MPI 共享存储式并行 (多线程) &#xff1a;OpenMP OpenCL OpenACC 指令级并行 CPU流水线 CPU流水线 指将一条指令的执行过程划分为多个阶段&#xff0c;使得在每个时钟周期内能够并行执行多条指令&#…

CSS中图片旋转超出父元素解决办法

下面的两种解决办法都会导致图片缩小&#xff0c;可以给图片进行初始化的宽高设置 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">…

使用 Web HID API 在浏览器中进行HID设备交互(纯前端)

文章目录 目的基础说明示例工程&#xff08;HID透传测试工具&#xff09;总结 目的 最近再搞HID透传 《STM32 USB使用记录&#xff1a;HID类设备&#xff08;后篇&#xff09;》 。 市面上的各种测试工具都或多或少存在问题&#xff0c;所以就自己写一个工具进行测试。目前来…

uni-app 客服按钮可上下拖动动

项目需求&#xff1a; 因为悬浮客服有时候会遮挡住界面内容&#xff0c;故需要对悬浮的气泡弹窗做可拖动操作 movable-area&#xff1a;可拖动区域 movable-view&#xff1a;可移动的视图容器&#xff0c;在页面中可以拖拽滑动或双指缩放。 属性说明 属性名类型默认值说…

四川玖璨电子商务有限公司:短视频有什么运营

根据短视频有什么运营&#xff0c;短视频的拍摄工具多种多样。无论是在手机上拍摄还是使用专业摄影设备&#xff0c;拍摄短视频的目的都是为了吸引观众的注意力和提升内容的质量。从小花费到高投入&#xff0c;在不断发展的短视频行业中&#xff0c;拍摄方法也得到了不断创新和…

Redis未授权访问漏洞复现

Redis 简单使用 Redis 未设置密码&#xff0c;客户端工具可以直接链接。 Redis 是非关系型数据库系统&#xff0c;没有库表列的逻辑结构&#xff0c;仅仅以键值对的方式存储数据。 先启动容器 Redis 未设置密码&#xff0c;客户端工具可以直接链接 https://github.com/xk11z/…

Redis的数据类型到底有什么奥秘

这里我们先只介绍五种常用的数据类型~ 目录 1、string 2、hash 3、list 4、set 5、zset 6、示例 1、string 数据类型&#xff1a;string内部编码&#xff1a;raw、int、embstr 说明&#xff1a; raw是最基本的字符串--底层是一个char数组&#xff08;此处的char是一个字…

【Element】Vue+Element表单校验详解

Element表单校验 作为一个后端开发&#xff0c;总结一下实际工作中表单校验的场景和用法。 Element官网&#xff1a;https://element.eleme.cn/#/zh-CN/component/form 代码地址&#xff1a;https://gitee.com/kkmy/kw-microservices/tree/master/kw-ui/kwsphere 常用表单校验场…

Java 中数据结构HashSet的用法

Java HashSet HashSet 基于 HashMap 来实现的&#xff0c;是一个不允许有重复元素的集合。 HashSet 允许有 null 值。 HashSet 是无序的&#xff0c;即不会记录插入的顺序。 HashSet 不是线程安全的&#xff0c; 如果多个线程尝试同时修改 HashSet&#xff0c;则最终结果是…