Jenkins调用Ansible构建LNMP平台

前言:

在现代化应用部署中,环境的一致性与部署效率直接影响业务迭代速度。传统手动部署LNMP环境存在操作繁琐、易出错、难以复现等问题。Jenkins作为持续集成核心工具,与Ansible配置管理强强联合,能够实现"基础设施即代码"的自动化运维理念。本文将以OpenEuler系统为例,系统讲解如何通过Jenkins调用Ansible完成LNMP平台的自动化构建与应用部署,为开发运维团队提供一套可落地、可扩展的自动化解决方案。

目录

一、Jenkins主机中安装并配置Ansible

1、安装ansible

2、修改配置

3、添加目标主机组

[4、Jenkins SSH 密钥设置流程](#4、Jenkins SSH 密钥设置流程)

二、Jenkins配置ansible插件

三、构建项目

配置参数详解

四、流水线触发机制

五、流水线脚本进阶

1、声明式流水线示例

2、脚本式流水线优势

六、最佳实践总结

1、配置管理规范

2、性能优化策略

3、维护建议

总结


一、Jenkins主机中安装并配置Ansible

操作系统 IP地址 主机名 角色
OpenEuler24.03 192.168.72.138 Jenkins Jenkins服务器
OpenEuler24.03 192.168.72.139 localhost webserver

1、安装ansible

复制代码
 ###在192.168.72.138 Jenkins服务器上安装
 yum install -y ansible

2、修改配置

复制代码
 ###Ansible 将默认使用 root用户来连接远程主机执行任务
 vim /etc/ansible/ansible.cfg
 remote_user=root

3、添加目标主机组

复制代码
 ###定义主机组,该组包含需要进行远程部署的主机
 vim /etc/ansible/hosts
 [webServer]
 192.168.72.139

4、Jenkins SSH 密钥设置流程

复制代码
 ###在Jenkins主机进行操作
 su -s /bin/bash jenkins
 ssh-keygen
 Ctrl+C(复制/var/lib/jenkins/.ssh/id_ed25519这段)
 ###在Jenkins界面
 ###进入Manage Jenkins/Syetem中修改
 ###找到 Publish over SSH部分
 ###设置 Path to key:Ctrl+v(粘贴/var/lib/jenkins/.ssh/id_ed25519)
 ​
 ###新增SSH Server
 ###Name:webServer-LNMP
 ###Hostname:192.168.72.138
 ###Username:root
 ###Remote Directory:/root
 ​
 ####从Jenkins用户环境复制公钥到远程服务器
 ssh-copy-id root@192.168.72.138
 ssh-copy-id root@192.168.72.139
 ​
 ###在192.168.72.138主机上复制密钥到192.168.72.139主机
 ssh-copy-id 192.168.72.139
 ​
 ###再次从Jenkins环境复制
 ssh-copy-id root@192.168.72.139
 ​
 ###在72.138主机和Jenkins环境中测试Ansible连通性
 ansible webServer -m ping

二、Jenkins配置ansible插件

  1. 在勾选所需插件

  2. 点击"安装"按钮

  3. 等待安装完成(网速影响安装时间)

三、构建项目

点击 Jenkins的LOGO,回到控制台→点击新建Item

新建Item输入一个任务名称 :<根据业务需求自定义>→Select an item type :Freestyle project→确定

这样就创建好了一个Freestyle project

点击配置→Configuration→Build Steps→增加构建步骤:Invoke Ansible Ad-Hoc Command

Invoke Ansible Ad-Hoc Command配置→调用yum模块安装php-fpm、php-fpm、php、php-mysqlnd、mysql-server、mysql、nginx

Invoke Ansible Ad-Hoc Command配置,例:使用 /etc/ansible/hosts文件作为主机清单(主机清单在配置中可以忽略不写),在 webServer主机组(即 192.168.72.139)上,调用 service模块,确保 php-fpm服务处于运行状态 ,并且配置为开机自动启动

配置参数详解

界面中的每个字段都对应一个 Ansible 命令的核心参数:

  1. Ansible installation : ansible - hoc

    • 作用 : 指定使用哪个 Ansible 版本来执行命令。这里的 ansible - hoc可能是一个预配置的 Ansible 环境名称,指向 Jenkins 服务器上安装的 Ansible 可执行文件路径。
  2. Host pattern : webServer

    • 作用 : 指定命令在哪些主机上执行。这里的 webServer就是在 /etc/ansible/hostsInventory 文件中定义的主机组 。这意味着命令将对该组下的所有主机(即 192.168.72.139)生效。
  3. Inventory : File or host list-> /etc/ansible/hosts

    • 作用 : 指定 Ansible 的"库存"文件路径,该文件定义了可管理的主机和组。这里明确告诉 Ansible 去 /etc/ansible/hosts这个文件中查找 webServer组包含哪些主机。
  4. Module : service

    • 作用 : 指定要使用的 Ansible 模块service模块用于管理远程主机上的服务(启动、停止、重启、设置开机自启等),它是一个非常核心和常用的模块。
  5. Module arguments or command to execute : name=php-fpm state=started enabled=true

    • 作用 : 为选定的模块提供具体的参数。这里给 service模块传递了三个参数:

      • name=php-fpm: 操作的对象 是名为 php-fpm的服务。

      • state=started: 期望的状态是"启动"。如果服务未运行,则启动它;如果已运行,则不进行任何操作(幂等性)。

      • enabled=true: 设置开机自动启动 。确保系统重启后,php-fpm服务会自动启动。

Invoke Ansible Ad-Hoc Command配置完成后应用并Save 回到项目状态页面进行Build Now

项目构建完成后得到以下Jenkins界面结果

要确认php-fpm和mysql是否正常启动并且能解析php文件,例:根据上述操作重新创建项目,并配置Invoke Ansible Ad-Hoc Command→Build Now→项目构建完成,进行测试

分别访问192.168.72.139/phpinfo.php、192.168.72.139/phpinfo.php,访问成功,phpinfo.php、mysql.php正常解析

部署Discuz论坛,配置Invoke Ansible Ad-Hoc Command

将Discuz.zip包拷入192.168.72.139主机

复制代码
 mkdir /data/
 cd /data
 [root@git data]# rz
 rz waiting to receive.**[root@git data]# 
 [root@git data]# ls
 Discuz.zip

回到Jenkins界面,Build Now

构建成功

访问192.168.72.139/upload,进行安装,最后安装完成进入到Discuz论坛界面,完成LNMP平台部署

四、流水线触发机制

主项目构建成功触发测试项目触发部署项目完成部署

配置方法:

  1. 在"构建后操作"选择"Build other projects"

  2. 输入下游项目名称(如LNMP-test)

  3. 勾选"Trigger only if build is stable"

五、流水线脚本进阶

1、声明式流水线示例

复制代码
pipeline {
     agent any
     stages {
         stage('Deploy LAMP') {
             steps {
                 ansiblePlaybook(
                     playbook: 'lamp.yml',
                     inventory: 'inventory.ini',
                     credentialsId: 'ssh-key'
                 )
             }
         }
         stage('Test') {
             steps {
                 sh 'curl -I http://localhost/phpinfo.php | grep 200'
             }
         }
     }
     post {
         success {
             mail to: 'admin@example.com',
                  subject: 'Deployment Succeeded',
                  body: 'LAMP stack deployed successfully'
         }
     }
 }

2、脚本式流水线优势

  1. 版本控制:脚本可纳入Git仓库管理

  2. 阶段可视化:清晰展示构建各阶段状态

  3. 错误处理:完善的异常处理机制

  4. 并行执行:支持并行任务加速构建

六、最佳实践总结

1、配置管理规范

  1. 凭据统一使用Jenkins凭证管理

  2. 敏感数据(密码、密钥)禁止硬编码在脚本中

  3. 共享库开发:封装常用Ansible Playbook

2、性能优化策略

优化方向 具体措施 预期效果
执行器配置 增加执行器数量(根据CPU核心数调整) 提升并发任务能力
节点管理 配置构建节点分担主节点压力 避免单点瓶颈
缓存机制 使用tmp目录缓存依赖包 减少网络传输
任务拆分 大型Playbook拆分为多个阶段 提高错误定位效率

3、维护建议

  1. 定期清理构建历史:Manage JenkinsScript Console执行

    复制代码
    Jenkins.instance.items.each {item.builds.each { it.delete() }}
  2. 监控磁盘使用:重点关注$JENKINS_HOME目录

  3. 插件更新策略:非必要不更新,测试环境验证后再上线

总结:

通过本文的实践,我们成功构建了Jenkins与Ansible协同工作的自动化部署体系。关键成果包括:

1.实现了基于SSH密钥认证的安全管控体系,确保Jenkins到目标主机的无缝连接

2.通过Ansible Ad-Hoc命令实现了LNMP组件的标准化安装与服务管理

3.建立了完整的流水线触发机制,实现构建、测试、部署的自动化流水线

4.通过Discuz项目实战验证了部署流程的可靠性和实用性

这种自动化方案不仅显著提升了部署效率,降低了人为错误风险,更为后续实现蓝绿部署、灰度发布等高级运维场景奠定了坚实基础。建议在生产环境中结合配置管理规范和性能优化策略,进一步完善监控告警和回滚机制,构建真正高效可靠的企业级DevOps流水线。

相关推荐
Gss7776 小时前
Ansible 项目管理核心要点总结
linux·运维·ansible
半梦半醒*6 小时前
ansible中的角色(roles)
linux·运维·自动化·ssh·ansible·负载均衡
误入运维泥潭6 小时前
Ansible Playbook自动化运维全攻略
ansible·yaml·playbook·facts
KellenKellenHao6 小时前
Jenkins调用ansible部署lnmp
servlet·ansible·jenkins
威风的虫6 小时前
SQLite3 操作指南:SQL 语句与 ORM 方法对比解析
数据库·sql
EndingCoder6 小时前
数据库集成:使用 SQLite 与 Electron
数据库·electron·sqlite·前端框架·node.js
一匹电信狗6 小时前
【Linux我做主】细说进程等待
linux·运维·服务器·c++·ubuntu·小程序·开源
浊尘6 小时前
SQL server实现异地增量备份和全量备份
数据库·sqlserver
THMAIL7 小时前
机器学习从入门到精通 - 卷积神经网络(CNN)实战:图像识别模型搭建指南
linux·人工智能·python·算法·机器学习·cnn·逻辑回归