jenkins+ansible自动化部署springboot项目

一. 版本

jenkins:2.346.3

Docker:24.0.2

maven:3.8.4

ansible:2.10.8

git:2.30.2

二. 前言

1)  jenkins程序打包部署非常灵活,有多种实现方式,选择适合自己的就好。

2)大致实现思路:jenkins通过git拉取最新代码,并使用maven打包。打包完成后,通过shell + ansible脚本实现程序包的部署、解压和服务重启。如果熟悉ansible-playbook的,也可网上看下其他朋友的实现方法。

3)我用的是docker安装的jenkins,各种配置折腾了好一阵才调通,建议大家还是本地服务器直接安装。jenkins的安装过程,网上有很多参考资料,可以搜一搜并参照安装。本次主要说的是如何创建和配置jenkins任务来实现自动化部署。

三. 创建和配置jenkins任务步骤

1.新建jenkins任务

选择“构建一个maven项目”,如果打包方式不是maven,可能需要使用其他的。

2.配置参数

参数化构建过程--->新增三个参数:

部署环境选择(根据实际需要自定义):

选项参数--->DEPLOY_ENV--->sit / uat / prod

部署模块选择(根据项目自定义):

选项参数--->module--->user-service / product-service

通过git参数获取分支:

GIT参数--->DEPLOY_BRANCH

3.源码管理-git配置

配置git访问地址和登录信息,并指定具体的分支。

4.构建触发器、构建环境和Pre Steps

这三部分都未勾选。

5.构建

按具体项目进行配置pom.xml和goals and options

6.Post Steps(后置步骤)

新增"执行shell"步骤,这部分通过shell脚本和ansible来实现程序包的备份,上传,解压和应用服务重启。

7. 完成jenkins任务配置

完成第6步后,点击“保存”按钮完成任务配置。

下面是执行构建部署任务的界面:

8.部署脚本

脚本说明:

1)如果是docker安装的jenkins,需要在容器内安装:sshpass 和ansible

2)部署环境可分为sit / uat / prod或者其他,ansible的hosts配置目录(自定义):

/var/jenkins_home/ansible_hosts

hosts文件,可保持一致,如果不同需修改对应脚本。另外建议生产环境和测试/uat环境分开设置,并通过jenkins的角色管理来分配权限给不同人员使用。

app-sit  /  app-uat  /  app-prod

文件内容(示例):

[user-service]
192.168.2.1

[user-service:vars]
ansible_ssh_user="username"
ansible_ssh_pass="password"
ansible_ssh_port=22

[product-service]
192.168.2.1

[product-service:vars]
ansible_ssh_user="username"
ansible_ssh_pass="password"
ansible_ssh_port=22

上面配置的主要目的是根据构建时选择的部署环境参数和模块参数:DEPLOY_ENV、module,来决定部署哪个模块的应用服务到哪个环境。

3)我这里构建的是:xxx-1.0-SNAPSHOT-bin.tar.gz 程序包,启停服务脚本在对应的bin目录下,如果不一致可对应做调整,这块可以灵活进行配置。

4)通过jenkins构建后的程序包一般是在jenkins主目录的workspace下面。

5)具体脚本如下,可参考:

#!/bin/bash
# 设置字符集为UTF-8
#这边应用服务的日志是UTF-8格式,按各自所需,也可不设置
export LANG=en_US.UTF-8  
export LC_ALL=en_US.UTF-8

#获取当前日期,年+月+日+时
curTime=`date +%Y%m%d%H`

### jenkins服务器目录设置
# ansible应用环境服务器hosts设置目录
hosts_dir="/var/jenkins_home/ansible_hosts"
# 获取当前目录
current_dir=$(pwd)
# 获取构建包目录
package_dir="$current_dir/$module/target"
# 构建程序包名称
package_name="$module-1.0-SNAPSHOT-bin.tar.gz"
# 备份程序包目录
bak_packages_dir="/var/jenkins_home/bak_packages/$module"

### 应用服务器目录
#应用服务部署目录
module_dir="/myproject/$module"
#服务启停脚本目录
work_dir="/myproject/$module/$module-1.0-SNAPSHOT/bin"

# 如果备份目录不存在,则创建它
if [ ! -d "$bak_packages_dir" ]; then
    mkdir -p "$bak_packages_dir"
fi

echo "---------------1.备份程序包--------------------"
cp ${package_dir}/${package_name} ${bak_packages_dir}/${package_name}.bak.$curTime
ls -l ${bak_packages_dir}/${package_name}.bak.$curTime

echo "---------------2.停服务--------------------"
ansible -i ${hosts_dir}/app-${DEPLOY_ENV} ${module} -m shell -a "cd ${work_dir} && sh stop.sh"

echo "---------------3.上传应用包--------------------"
ansible -i ${hosts_dir}/app-${DEPLOY_ENV} ${module} -m copy -a "src=${package_dir}/${package_name} dest=${module_dir}"

# echo "---------------4.删除历史应用包(可直接解压覆盖,备用)--------------------"
# ansible -i ${hosts_dir}/app-${DEPLOY_ENV} ${module} -m shell -a "cd ${module_dir} && rm -rf ${module}-1.0-SNAPSHOT"

echo "---------------3.解压--------------------"
ansible -i ${hosts_dir}/app-${DEPLOY_ENV} ${module} -m shell -a "cd ${module_dir} && tar -xzvf ${package_name}"
sleep 3

echo "---------------4.启动服务--------------------"
ansible -i ${hosts_dir}/app-${DEPLOY_ENV} ${module} -m shell -a "cd ${work_dir} && sh run.sh"

echo "---------------${module},启动成功!--------------------"
echo "---------------${module},部署完成!--------------------"

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JenkinsAnsible是两个广泛使用的自动化工具,可以帮助简化软件开发和部署过程。 Jenkins是一个开源的持续集成和自动化工具,常用于编译代码、运行测试、部署软件等任务。它提供了一个易于使用的用户界面,可以通过配置和连接各种工具和插件实现自动化流程。Jenkins可以与版本控制系统(如Git)集成,可以通过定时触发或通过触发特定的事件来自动执行任务。 Ansible是一个自动化工具,用于配置管理、应用程序部署和任务执行。它采用基于SSH的无需客户端的架构,可以通过编写简单的YAML文件来描述服务器的配置和应用的部署Ansible可以在本地或远程执行任务,并可以轻松地进行水平扩展。 结合JenkinsAnsible可以实现更高效和灵活的自动化部署流程。可以将Jenkins用作任务调度和流程控制的中心,通过Jenkins的插件支持,与Ansible进行集成。通过在Jenkins中配置Ansible插件,可以直接在Jenkins上运行Ansible Playbook,并灵活地控制各个部署和配置任务。 使用JenkinsAnsible可以实现以下功能: 1. 通过Jenkins触发自动化部署任务,对软件进行编译、测试和打包。 2. 使用Jenkins上的用户界面配置Ansible的执行环境和主机清单。 3. 创建和管理Ansible Playbook来描述服务器的配置和应用的部署过程。 4. 在Jenkins中通过添加Ansible插件来执行Ansible Playbook,自动部署软件和配置环境。 5. 通过Jenkins的日志和报告功能,可以方便地查看和分析部署过程中的问题和错误。 总之,JenkinsAnsible的结合可以大大简化软件开发和部署过程,提高工作效率和软件质量。不仅可以实现简单的部署任务,还可以通过灵活的配置和扩展,满足不同项目和环境的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值