Jenkins详解(三)

news2024/12/30 1:40:58

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 branch
  master
* 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 mvnHome
   stage('git checkout') { // for display purposes
        checkout 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 active
   Active: 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
* lnmp
  master
  test

# 下载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}/.git
        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"
   }
}

# 提交到本地仓库
[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.conf
    include /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 branch
  lnmp
  master
* solo
  test

# 下载 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=dontkillme
				export JAVA_HOME=/usr/local/jdk
        TOMCAT_HOME=/usr/local/tomcat
        WWWROOT=$TOMCAT_HOME/webapps/ROOT
				[ -d /data/backup ] || mkdir -p /data/backup
        if [ -d $WWWROOT ];then
           mv $WWWROOT /data/backup/tomcat-$(date +"%F_%T")
        fi
        unzip ${WORKSPACE}/target/*.war -d $WWWROOT
        PID=$(ps -ef |grep tomcat |grep -v "grep" |awk '{print $2}')
        [ -n "$PID" ] && kill -9 $PID
        nohup $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/jdk
        TOMCAT_HOME=/usr/local/tomcat
        WWWROOT=$TOMCAT_HOME/webapps/ROOT
				[ -d /data/backup ] || mkdir -p /data/backup
        if [ -d $WWWROOT ];then
           mv $WWWROOT /data/backup/tomcat-$(date +"%F_%T")
        fi
        unzip ${WORKSPACE}/target/*.war -d $WWWROOT			# 项目包解压到站点目录
        PID=$(ps -ef |grep tomcat |grep -v "grep" |awk '{print $2}')
        [ -n "$PID" ] && kill -9 $PID
        nohup $TOMCAT_HOME/bin/startup.sh &
        '''
   }
   stage('test') {
    echo "susses"
   }
}

5.8.3 构建

构建概览:

控制台输出详情:

5.8.4 访问

http://192.168.200.25:8080/

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

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

相关文章

Dom-clobbering原理和例题

目录 引入 1.获取标签 2.覆盖 3.多层覆盖 利用Dom-clobbering 1.tostring 2.集合取值 3.层级关系取值 4.三层取值 5.自定义属性 例题 1 2. 3. 引入 分析 引入 先用三个小例子看看dom-clobbering干了什么 1.获取标签 这个例子给img标签分别做了一个id和一个name…

热释电矢量传感器设计

1 概述 使用4个热释电传感器组成一个2X2的矩阵。通过曲线的相位差、 峰峰值等特征量来计算相关信息。本文使用STM32单片机设计、制作了热释电传感器矩阵&#xff1b;使用C#.NET设计了上位机软件。为以上研究做了试验平台。 2 硬件电路设计 2.1 热释电传感器介绍 热释电红外…

CCKS2023:基于企业数仓和大语言模型构建面向场景的智能应用

8月24日-27日&#xff0c;第十七届全国知识图谱与语义计算大会&#xff08;CCKS 2023&#xff09;在沈阳召开。大会以“知识图谱赋能通用AI”为主题&#xff0c;探讨知识图谱对通用AI技术的支撑能力&#xff0c;探索知识图谱在跨平台、跨领域等AI任务中的作用和应用途径。 作为…

MAC系统“无法验证开发者”问题

参考:https://blog.csdn.net/suxiang198/article/details/126550955 对于使用MAC电脑的同学而言&#xff0c;许多时候因为使用需要&#xff0c;从第三方源&#xff08;比如github等&#xff09;下载工具或软件&#xff0c;而在运行时会受到MAC系统的安全限制&#xff0c;老是弹…

【STM32】学习笔记-SPI通信

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

深入浅出AXI协议(5)——数据读写结构读写响应结构

目录 一、前言 二、写选通&#xff08;Write strobes&#xff09; 三、窄传输&#xff08;Narrow transfers&#xff09; 1、示例1 2、示例2 四、字节不变性&#xff08;Byte invariance&#xff09; 五、未对齐的传输&#xff08;Unaligned transfers&#xff09; 六…

网络版五子棋C++实现

目录 1.项目介绍 2.开发环境 3.核心技术 4.环境搭建 5.WebSocketpp介绍 5.1WebSocketpp是什么 5.2为什么使用WebSocketpp 5.3原理解析&#xff1a; 5.4WebSocketpp主要特性 6.WebSocketpp使用 7.JsonCpp使用 8.MySQL API 9.项目模块设计以及流程图 10.封装日志宏…

基于单片机的太阳能热水器控制器设计

一、项目介绍 随着环保意识的逐渐增强&#xff0c;太阳能热水器作为一种清洁能源应用得越来越广泛。然而&#xff0c;传统的太阳能热水器控制器通常采用机械式或电子式温控器&#xff0c;存在精度低、控制不稳定等问题。为了解决这些问题&#xff0c;本项目基于单片机技术设计…

Qt鼠标点击事件处理:按Escape键退出程序

创建项目 Qt 入门实战教程&#xff08;目录&#xff09; 首先&#xff0c;创建一个名称为QtKeyEscape的Qt默认的窗口程序。 参考 &#xff1a;Qt Creator 创建 Qt 默认窗口程序 Qt响应键盘Escape事件 打开Qt Creator >>编辑 >> 项目 >> Headers>> …

服务运营 | MS文章精读:基于强化学习和可穿戴设备的帕金森治疗方案

作者信息&#xff1a;庞硕&#xff0c;李舒湉 编者按 帕金森疾病的治疗是一个备受关注的医疗问题。本文通过患者的可穿戴传感器收集数据&#xff0c;提出了一个基于强化学习的帕金森药物治疗方案。这是第一篇关于可穿戴治疗设备在慢性疾病管理中的应用研究。原文于2023年4月发…

如何在你的Android工程中启用K2编译器?

如何在你的Android工程中启用K2编译器&#xff1f; K2编译器是用于Kotlin代码编译的最新、高效编译器&#xff0c;你现在可以尝试使用了。 Kotlin编译器正在为Kotlin 2.0进行重写&#xff0c;新的编译器实现&#xff08;代号K2&#xff09;带来了显著的构建速度改进&#xff…

K210-调用自定义py库

调用自定义py库 导入py库文件调用py库 用过Python的朋友应该知道&#xff0c;Python是支持将自定义py库&#xff08;或者第三方py库&#xff09;放到同一个目录下调用的&#xff0c;MicroPython也是支持调用自定义py库的。在调用自定义py库之前&#xff0c;需要提前将py库文件导…

期货基础知识

一、期货是什么&#xff1f;  期货是与现货相对应&#xff0c;并由现货衍生而来。期货通常指期货合约&#xff0c;期货与现货完全不同&#xff0c;现货是实实在在可以交易的货&#xff08;商品&#xff09;&#xff0c;期货主要不是货&#xff0c;而是以某种大众产品如棉花、大…

影响Windows 和 macOS平台,黑客利用 Adobe CF 漏洞部署恶意软件

FortiGuard 实验室的网络安全研究人员发现了几个影响 Windows 和 Mac 设备的 Adobe ColdFusion 漏洞。 远程攻击者可利用Adobe ColdFusion 2021中的验证前RCE漏洞&#xff0c;获取受影响系統的控制权力。Adobe 已发布安全补丁来解决这些漏洞&#xff0c;但攻击者仍在利用这些漏…

leetcode:1941. 检查是否所有字符出现次数相同(python3解法)

难度&#xff1a;简单 给你一个字符串 s &#xff0c;如果 s 是一个 好 字符串&#xff0c;请你返回 true &#xff0c;否则请返回 false 。 如果 s 中出现过的 所有 字符的出现次数 相同 &#xff0c;那么我们称字符串 s 是 好 字符串。 示例 1&#xff1a; 输入&#xff1a;s…

鼠标悬停阴影的效果被旁边div挡住的解决办法

出现的问题 需求要求鼠标悬停某个图片上有阴影效果&#xff0c;但阴影被旁边相邻的div挡住了&#xff0c;如图所示 解决方案 给悬停的这块div增加2个css属性 $(this).css(position, relative); $(this).css(z-index, 200);新的效果如图所示 一直写后端&#xff0c;前端的…

国际网页短信软件平台搭建定制接口说明|移讯云短信系统

国际网页短信软件平台搭建定制接口说明|移讯云短信系统 通道路由功能介绍 支持地区通道分流&#xff0c;支持关键字&#xff0c;关键词通道分流&#xff0c;支持白名单独立通道&#xff0c;支持全网通道分流&#xff0c;支持通道可发地区设置&#xff0c;通道路由分组&#x…

redis 数据结构(二)

整数集合 整数集合是 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素&#xff0c;并且元素数量不时&#xff0c;就会使用整数集这个数据结构作为底层实现。 整数集合结构设计 整数集合本质上是一块连续内存空间&#xff0c;它的结构定义如下&#xff1a; typed…

QT C++ 实现网络聊天室

一、基本原理及流程 1&#xff09;知识回顾&#xff08;C语言中的TCP流程&#xff09; 2&#xff09;QT中的服务器端/客户端的操作流程 二、代码实现 1&#xff09;服务器 .ui .pro 在pro文件中添加network库 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>…

春秋云镜 CVE-2018-12530

春秋云镜 CVE-2018-12530 Metinfo 6.0.0任意文件删除 靶标介绍 Metinfo 6.0.0任意文件删除。后台密码&#xff1a;f2xWcke5KN6pfebu 启动场景 漏洞利用 /admin进入管理后台&#xff0c;admin/f2xWcke5KN6pfebu /admin/app/batch/csvup.php?fileFieldtest-1&fliename…