Jenkins调用Ansible构建LNMP平台

发布于:2025-09-05 ⋅ 阅读:(23) ⋅ 点赞:(0)

前言:

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

目录

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

1、安装ansible

2、修改配置

3、添加目标主机组

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流水线。


网站公告

今日签到

点亮在社区的每一天
去签到