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

Jenkins调用Ansible构建LNMP平台

前言:

        在现代化应用部署中,环境的一致性与部署效率直接影响业务迭代速度。传统手动部署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.03192.168.72.138JenkinsJenkins服务器
OpenEuler24.03192.168.72.139localhostwebserver

1、安装ansible

 ###在192.168.72.138 Jenkins服务器上安装yum install -y ansible

2、修改配置

 ###Ansible 将默认使用 root用户来连接远程主机执行任务vim /etc/ansible/ansible.cfgremote_user=root

3、添加目标主机组

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

4、Jenkins SSH 密钥设置流程

 ###在Jenkins主机进行操作su -s /bin/bash jenkinsssh-keygenCtrl+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.138ssh-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]# rzrz waiting to receive.**[root@git data]# [root@git data]# lsDiscuz.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 anystages {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流水线。

http://www.xdnf.cn/news/19840.html

相关文章:

  • 深入探索 WebSocket:构建实时应用的核心技术
  • DarkHole: 2靶场渗透
  • 用 SPL 编写阿里云 FC2.0 函数
  • AntdesignVue 的月份区间组件用法
  • mysql分页SQL
  • Dubbo(分布式RPC调用和分布式文件储存)
  • 深入解析Django重定向机制
  • 2025React面试题集锦
  • Java 与 Docker 的最佳实践
  • wins中怎么用一个bat文件启动jar包和tomcat等多个服务
  • Linux tail 命令使用说明
  • 【C++详解】C++11(四) 包装器:function、bind、STL中⼀些变化
  • 【AI论文】UI-TARS-2技术报告:借助多轮强化学习推进图形用户界面(GUI)智能体发展
  • 20. 云计算-华为云-云服务
  • Linux Centos7搭建LDAP服务(解决设置密码生成密文添加到配置文件配置后输入密码验证报错)
  • 分享星空投影灯方案
  • 高效菜单管理页面:一键增删改查
  • Word 常用快捷键大全:提升文档处理效率的必备技巧​
  • FastGPT源码解析 Agent工作流编排后端详解
  • Ansible自动化运维:从入门到精通
  • 【面试题】词汇表大小如何选择?
  • React实现点击按钮复制操作【navigator.clipboard与document.execCommand】
  • Elasticsearch面试精讲 Day 6:Query DSL查询语法详解
  • 【JAVA】windows本地跑zookeeper,然后使用代码连接服务获取znode数据
  • 【leetcode】130. 被围绕的区域
  • NLP插曲番外 · 猫猫狐狐问答夜话
  • 分词器详解(一)
  • 信息融智学=信息哲学+信息科学+信息技术+信息系统工程+信息处理之智
  • 组长跟我说,她招人看重的是数据分析能力
  • 计算机视觉(七):膨胀操作