当前位置: 首页 > news >正文

Git+Jenkins实战(一)

一、案例环境

1、案例拓扑

2、资源清单

主机IP 地址软件包备注
Jenkins192.168.10.104Jenkins大管家
gitlab192.168.10.105gitlab代码仓库
web01192.168.10.101apacheweb 服务器
dev192.168.10.102git开发人员

二、部署GitLab(192.168.10.105

1、基础环境配置

(1) 关闭防火墙及内核

hostnamectl set-hostname gitlab
bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config

(2) 解压并安装

tar zxf gitlab-ce-17.8.2.rpm.tar.gz
cd gitlab-ce-17.8.2.rpm
ls
dnf -y install gitlab-ce-17.8.2-ce.0.el9.x86_64.rpm

(3) 修改配置文件

vim /etc/gitlab/gitlab.rb

 external_url 'http://192.168.10.105' 是 GitLab 配置中的核心参数,用于指定 GitLab 服务对外提供访问的基础 URL

(4) 解决版本兼容问题

ln -s /usr/lib64/libcrypt.so.1 /usr/lib64/libcrypt.so.2

具体来说:

  • libcrypt.so 是系统中负责密码加密相关功能的共享库文件
  • 某些版本的 GitLab(或其依赖的组件)可能编译时依赖 libcrypt.so.2 这个库文件
  • 但部分 Linux 系统(如 CentOS 7 等)默认只安装了 libcrypt.so.1(通常是 glibc 提供的版本)
  • 通过创建从 libcrypt.so.1 到 libcrypt.so.2 的软链接,可以让依赖 libcrypt.so.2 的程序 “误以为” 找到了所需的库文件,从而避免因库版本不匹配导致的启动失败或功能异常

这个操作本质上是一种兼容处理,在系统库版本与软件依赖版本不一致时,通过链接方式临时解决依赖问题。如果系统环境允许,更规范的做法是安装对应版本的 libcrypt 库(如 libcrypt2)。

2、部署

(1) GitLib初始化

gitlab-ctl reconfigure

(2) 找到初始化密码

cat /etc/gitlab/initial_root_password
EDgqXDTjQnTGv/gMKYyFBS2yfp/BHaHntPA6cQ/e3to=

(3) 登录

(4) 修改root密码

三、jenkins部署(192.168.10.104


1、基础环境

hostnamectl set-hostname jenkins
bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config

2、安装git

dnf -y install git

3、安装字体库

dnf -y install fontconfig

4、部署JDK

(1) 解压并移动到合适位置

tar zxf jdk-11.0.16.1_linux-x64_bin.tar.gz
mv jdk-11.0.16.1 /usr/local/java

(2) 设置环境变量

export JAVA_HOME=/usr/local/java
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH

(3) 加载环境变量

source /etc/profile

(4) 查看版本

java -version

5、部署Tomcat

tar zxf apache-tomcat-8.5.56.tar.gz
mv apache-tomcat-8.5.56 /usr/local/tomcat

6、部署Meven

(1) 解压并移动到合适位置

tar zxf apache-maven-3.6.0-bin.tar.gz
mv apache-maven-3.6.0 /usr/local/maven

(2) 设置环境变量

export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin

 (3) 加载环境变量

source /etc/profile

(4) 查看版本

mvn -version

(5) 修改配置文件

将Maven仓库改为国内
vim /usr/local/maven/conf/settings.xml
<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>

7、部署nodejs(运行时) 

(1) 部署nodejs的依赖环境

dnf -y install gcc automake autoconf libtool

 (2) 解压并移动到合适位置

tar zxf node-v14.18.0-linux-x64.tar.gz
mv node-v14.18.0-linux-x64 /usr/local/nodejs14

(3) 优化路径并查看版本

ln -s /usr/local/nodejs14/bin/* /usr/local/bin
node -v

(4) 查看node包管理工具(构建工具)

npm -v

8、部署jenkins

mv jenkins.war /usr/local/tomcat/webapps/
cd /usr/local/tomcat/webapps/
ls
/usr/local/tomcat/bin/startup.sh

9、设置Jenkins插件更新源

cd
cd .jenkins/updates/
sed -i 's/https:\/\/www.jenkins.io/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

10、找到初始密码

cat /root/.jenkins/secrets/initialAdminPassword

11、登录Jenkins

12、安装插件(选离线)

13、跳过在线安装插件

14、创建管理员用户生成永久链接

15、开始使用

16、后续如需安装插件

17、拉取本地插件(原先下载好的)


18、然后重启 Jenkins

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

重新查看插件是否已经被添加

19、安装JDK

20、安装Maven

21、安装NodeJS

四、Jenkins实现静态web网站自动发布

        本案例部署了一个简单的静态网站,通过此操作过程,主要掌握代码发布的基本流程,以及在这个过程中我们需要注意的重点环节,也是掌握 jenkins 项目发布的入门级操作。在这些操作中,进一步学习jenkins 持续集成、持续部署流程。

1、安装web服务(192.168.10.101

hostnamectl set-hostname web01
bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
dnf -y install httpd
systemctl start httpd
netstat -anpt | grep httpd

2、上传代码到GitLab

        在本环节中,需要为项目团队创建一个网站开发的项目,此处我们在 gitlab 中创建一个模拟网站,项目的名字为 league。

(1) 在 gitlab 中创建空白项目 league

3、克隆空项目到dev主机开发者本地(192.168.10.102

(1) 基础环境

hostnamectl set-hostname dev
bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
yum -y install git

(2) 克隆

git clone http://192.168.10.105/root/league.git

(3) 设置代码提交者信息

cd league
git config --global user.name "zhangsan"
git config --global user.email zhangsan@league.com
git config --global core.editor vim
git config --list

(4) 开发人员创建本地代码

我不会写,我找了一个案例

(5) 初始化本地仓库

git init

(6) 提交至暂存区

git add .

(7) 提交至本地仓库

git commit -m "my info01"

(8) 为分支命名为main

git branch -M main

(9) 输入GitLab账密,将分支版本移交远程仓库

        在执行 git clone 操作的时候,已经将远程 gitlab 的仓库添加为了自己的仓库,默认的仓库名称为 “origin” 不需要在执行 git remote add 的命令。

git push -u origin main

(10) GitLab查看提交结果

    4、添加远程主机(将接收到的代码给服务器)

    “Manage Jenkins”-->“System”-->“Publish over SSH”,点击 SSH Servers 的新增按钮。须填写的信息如下:

    • Name:为远程主机的起的名字;
    • Hostname:远程主机的 IP 地址或域名;
    • Username:远程主机的登录账号;
    • Remote Directory:远程同步路径(如果要拷贝文件,此处填写远程主机接收文件的目录);
    • 点击高级按钮,并勾选“Use password authentication,or use different key”;
    • 在 Passphrase/Password 中输入密码;
    • 其他保持默认,并点击 test 按钮进行连接测试,测试结果为 Success 表示参数设置成功。
    • 最后保存设置。
    • 可以用同样的方法添加更多的主机。

    5、jenkins 中设置项目构建参数

    (1) 到 gitlab 中获取项目仓库的 URL

    http://192.168.10.105/root/league.git

    (2) 创建一个项目

    (3) 源码管理

    在源码管理中选择 Git,并且把 gitlab 中获取的仓库 URL 填写进去。
    注意在 “指定分支” 的地方,将分支名称修改为 “*/main”。在 gitlab 中我们自己创建一个新项目的时候,项目的分支名称由早期的 “master”,修改为现在的 “main”

    (4) 构建步骤配置

            在本案例中,我们需要将 web 网站的代码文件同步到 web01 主机,需要同步文件,需要一个发送文件的构建步骤,具体操作如下:

    增加构建步骤“Send files or execute commands over SSH”需要设置的关键参数如下:

    • Name:在下拉菜单中选择目标主机;
    • Source files:选择源文件位置,注意这里是工作目录的相对路径,不要写绝对路径。如果要同步此目录下所有内容,就填写“**/*”;如果要同步工作目录下的 img 目录下的所有文件,就填写“img/*”。
    • Remove prefix 该操作是针对上面的 source files 目录,会移除匹配的目录。通常留空
    • Remote directory:远程主机的同步目录,注意这里也是相对路径。是相对于远程主机的同步目录的,我们在前面的远程主机中设置同步的目录是“/var/www/html”,此处就直接写“/”,代表将文件同步到远程主机的“/var/www/html”目录下。
    • 如果需要同时将文件批量同步到更多的主机,可以继续增加构建步骤。
    • Exec command:同步接收后需要在远程主机执行的命令。

    (5) 构建并查看输出日志

    (6) 测试

    五、带有参数的项目发布

    1、修改代码并重新提交

    cd leauge
    vim index.html

    git add .
    git commit -m "AAA"
    git tag AAA
    git push origin main AAA

    vim index.html

    git add .
    git commit -m "BBB"
    git tag BBB
    git push origin main BBB

    vim index.html

    git add .
    git commit -m "CCC"
    git tag CCC
    git push origin main CCC

    2、Jenkins 项目设置

    (1) 修改 General 参数

    勾选 “This project is parameterized”,并点击 “添加参数”,添加 “Git Parameter” 参数。
    设置的参数如下:
    名称:Tag
    默认值:origin/main

    设置源码管理

    构建项目并测试

    AAA

    BBB

    CCC

    六、Jenkins项目实时触发

            在配置 Jenkins 实现前端自动化构建的过程中,Git 如何通知 Jenkins 对应 Job 的工作区实时构建呢?web 开发过程中的 webhook,是一种通过通常的 callback,去增加或者改变 web page 或者 web app行为的方法。这些 callback 可以由第三方用户和开发者维持当前,修改,管理,而这些使用者与网站或者应用的原始开发没有关联。

            webhook 这个词是由 Jeff Lindsay 在 2007 年在计算机科学 hook 项目第一次提出的。Webhooks 是"user-defined HTTP 回调"。它们通常由一些事件触发,例如"push 代码到 repo",或者"post 一个评论到博客"。因此,我们可以将 jenkins 的某个项目的 webhook 放置到 gitlab,当 gitlab 中对应的项目代码有更新时,就会向 jenkins 触发一个构建的事件,这样就完成了一个项目自动触发的流程。

    1:设置触发器

    项目-->配置-->构建触发器,勾选项目的 webhook

    复制出里面的 webhook URL

    http://192.168.10.104:8080/jenkins/project/league

    生成token

    在“构建触发器”中生成一个 Token,并且把这个 Token 复制出来:

    df00c1462b8b5149961bd67f2a16f8e4

    2、设置触发机制

    (1) 找到 Admin 选项

    单击 Menu-->Admin

    (2) 为 gitlab 设置外发请求

    在这里要设置 gitlab 允许利用钩子(webhook)发送请求到本地网络。
    Menu-->Admin-->Settings-->Network-->Outbound requests
    设置 Outbound request(外发请求)
    勾选 “允许 webhook 和服务对本地网络的请求” 和 “允许系统钩子向本地网络发送的请求”,如下图所示

    (3) 设置项目的 webhook 参数

    打开自己创建的项目,Settings-->Webhooks
    点击右上角 Add new Webhook 按钮,
    粘贴前面步骤中生成的 webhook 的 URL 和 Token

    (4) 设置触发器

    (5) 测试

    (6) 修改代码测试是否自动触发

    vim index.html

    git add .
    git commit -m "DDD"
    git tag DDD
    git push origin main DDD

    五、jenkins+ansible+gitlab 实现 PHP 项目发布

    在此案例中,我们将进一步学习 jenkins 较为复杂一点的应用,本案例将 ansible 集成到了 jenkins 中,让 jenkins 利用 ansible 插件,向远程主机推送文件和指令,完成自动化的项目部署。

    1、安装 LAMP 环境

    在 web01 主机上,安装 LAMP 环境。

    dnf -y install httpd httpd-devel mysql mysql-server mysql-devel php php-mysqlnd php-common php-gd php-xml rsyncsystemctl start mysqld
    mysqladmin -uroot password 'pwd123'
    mysql -uroot -ppwd123
    create database wordpress;
    grant all on *.* to root@'localhost';
    

    2、jenkins 主机安装 Ansible 插件

    (1) 做无密码验证

            Ansible 的工作是基于 SSH 协议的,它使用 SSH 连接到远程主机并执行命令。因此在将 ansible 集成给 jenkins 的时候,需要在 jenkins 主机上生成密钥对,并同步公钥给远程 web 主机,为 ansible 的运行提供基础。

    ssh-keygen
    ssh-copy-id 192.168.10.101

    (2) 在 jenkins 主机安装 ansible

            如果要结合 ansible 实现项目的自动发布,就需要在 jenkins 上添加 ansible 插件,但是只在 Jenkins 中安装 Ansible 插件是不行的,还要在 Jenkins 主机上安装 Ansible 程序。

    dnf -y install ansible rsync
    vim /etc/ansible/hosts
    [webservers]
    192.168.10.101

    3、在GitLab中创建空项目

    4、程序员提交代码到本地

    (1) 克隆空项目到本地

    git clone http://192.168.10.105/root/wordpress.git

    (2) 生成代码

    tar zxf wordpress-6.8.2.tar.gz
    cd wordpress
    git init .
    git add .
    git commit -m "wp"
    git tag 1.0.0
    git push origin 1.0.0

    5、Jenkins创建项目并发布测试

    (1) 创建空项目

    (2) 动态获取 Git 仓库 Tag,与用户交互选择 Tag 发布

    勾选 “This project is parameterized”,并点击 “添加参数”,添加 “Git Parameter” 参数。

    设置的参数如下:

    名称:Tag

    默认值:origin/main

    (3) 设置源码管理参数

    在源码管理项,选中 Git,添加代码仓库的 URL:
    修改 */master 为 $Tag。Tag 是上面动态获取的变量名,表示根据用户的选择确定要发布的代码版本。

    (4)设置 “Build Steps” 参数,添加 ansible 同步参数

    在 “Build Steps” 中,点 “增加构建步骤”→“Invoke Ansible Ad - Hoc Command”,在这里设置的主要参数如下:

    • Host pattern:设置 ansible 中的主机组的名字,本案例中我们用的是 “webservers”
    • Inventory:选择 File or host list,填写的文件是 ansible 的主机清单 /etc/ansible/hosts
    • Module:设置同步方式,此处使用 “synchronize” 的方式,表示使用 rsync 同步;
    • Module arguments or command to execute:填写 ansible 的同步命令:命令如下:
      src=${WORKSPACE} dest=/var/www/html rsync_opts=--exclude=.git

    备注:

    ansible 命令解释:

    • ${WORKSPACE} 表示该变量指向的路径是 jenkis 主机从 git 服务器获取到的项目 :/root/.jenkins/workspace
    • rsync_opts=--exclude=.git:同步时将.git 文件除外,该文件不同步

    (5) 设置 “Build Steps” 参数,添加远程主机执行的命令

            在 “Build Steps” 选项中,再次点击 “增加构建步骤”,选择 “Execute shell”,填写需要让 jenkins 主机执行的 ansible 命令:

    ansible "webservers" -m command -a "systemctl restart httpd"
    ansible "webservers" -m command -a "chown -R apache:apache /var/www/html/"
    ansible "webservers" -m command -a "chmod 755 -R /var/www/html/"

    (6) 构建

    6、访问测试

    http://192.168.10.101/blog-wordpress

    http://www.dtcms.com/a/338998.html

    相关文章:

  1. Windows系统维护,核心要点与解决方案
  2. Spring Boot 4 的 11 项重大变更全面解析!
  3. 企业级 RN Android 完整 CI/CD 自动化解决方案
  4. 从《捕风追影》看地理信息大屏可视化:不止于电影的 “天眼” 黑科技
  5. 笔试——Day43
  6. 2.Kotlin 集合 List 所有方法
  7. 服务器无公网ip如何对外提供服务?本地网络只有内网IP,如何能被外网访问?
  8. Netty内存池中ChunkList详解
  9. STM32G4 Park及反Park变换(二)实验
  10. 推理还是训练 || KV缓存和CoT技术
  11. 快速将 MySQL 数据库发布为 API:使用 QuickAPI 实现 SQL2API
  12. SConscript 脚本入门教程
  13. ChatBI驱动的智能商业决策:奥威BI的深度实践
  14. 图像增强——灰度变换增强(线性,对数,指数)、空间滤波增强、频域增强、主成分/彩色合成增强(原理解释和代码示例)
  15. 源码编译安装LAMP架构并部署WordPress(CentOS 7)
  16. Unity音频管理:打造沉浸式游戏音效
  17. BCT8937A Class T Audio Amplifier
  18. 小程序开发APP
  19. 车载以太网gPTP时间同步:从协议到工程实践
  20. 如何用20%计算成本训练LLaMA4级大模型?MoE稀疏化架构实战指南
  21. 第14章 现代React特性
  22. 使用 MySQL 为 SpreadJS 协同服务器提供存储支持
  23. 前后端联合实现文件下载,实现 SQL Server image 类型文件下载
  24. PHP如何使用JpGraph生成折线图?
  25. 如何在 uBlock Origin 中忽略指定网站的某一个拦截规则
  26. 【数据可视化-94】2025 亚洲杯总决赛数据可视化分析:澳大利亚队 vs 中国队
  27. HarmonyOS中AppStorageV2信息储存使用案例
  28. 【git】 撤销revert一次commit中的某几个文件
  29. HarmonyOS 实战:学会在鸿蒙中使用第三方 JavaScript 库(附完整 Demo)
  30. CalMAN简介