当前位置: 首页 > 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.lryc.cn/news/625688.html

    相关文章:

  1. 软件测试核心概念拆解:需求、开发模型与测试模型全解析
  2. JVM调优实战指南:从原理到落地的全面优化方案
  3. 安装DDNS-go
  4. FlexSim-线平衡优化仿真
  5. Qt元对象
  6. Qt消息队列
  7. es7.x es的高亮与solr高亮查询的对比对比说明
  8. 使用Tomcat Clustering和Redis Session Manager实现Session共享
  9. Auto-CoT:大型语言模型的自动化思维链提示技术
  10. 基于“R语言+遥感“水环境综合评价方法技术应用——水线提取、水深提取、水温提、水质提取、水环境遥感等
  11. STM32-FreeRTOS快速入门指南(下)
  12. LLM 中 token 简介与 bert 实操解读
  13. 字符串与算法题详解:最长回文子串、IP 地址转换、字符串排序、蛇形矩阵与字符串加密
  14. 基于SpringBoot+Vue的写真馆预约管理系统(邮箱通知、WebSocket及时通讯、协同过滤算法)
  15. ProfiNet从站转Modbus TCP网关技术详解
  16. Ubuntu Server 22.04 k8s部署服务较时,文件描述符超过限制的处理方法
  17. 算法训练营day55 图论⑤ 并查集理论基础、107. 寻找存在的路径
  18. 游戏相机震动与武器后坐力实现指南
  19. ReLens「Focus DSLR 大光圈虚化相机」v4.1.2 f 解锁付款版 —一款专业大光圈和单反级背景虚化编辑软件
  20. 基于 RxJava 构建强大的 Android 文件下载管理器
  21. Linux管道
  22. 云原生俱乐部-shell知识点归纳(1)
  23. Codeforces 斐波那契立方体
  24. DaemonSet控制器
  25. 《Java 多线程全面解析:从基础到生产者消费者模型》
  26. SpringClound——网关、服务保护和分布式事务
  27. 编排之神--Kubernetes中的认证授权详解
  28. 无训练神经网络影响下的智能制造
  29. 论文阅读:Prompt Optimization in Large Language Models
  30. 基于SpringBoot的篮球馆预约管理系统【2026最新】