Git + Maven + Jenkins 实现自动化部署

简介: 一、安装 和 准备工作     我们选择了用 Tomcat 服务器下 war 包的安装方式。Jenkins 的下载地址:http://mirrors.jenkins-ci.org/,打开链接后,表格有war列。

一、安装 和 准备工作

    我们选择了用 Tomcat 服务器下 war 包的安装方式。Jenkins 的下载地址:http://mirrors.jenkins-ci.org/,打开链接后,表格有war列。Releases行是短期更新包,LTS行是长期更新包。一般选择Releases下载即可。将下载完成的 war 包 放在 Tomcat 服务器的 webapps 目录下,然后启动服务器即可。建议单独用一台 Tomcat 服务器部署,方便管理。

    1、Tomcat 服务器运行起来后,用浏览器访问 http://ip地址:端口号/jenkins 如下图:

         

    2、在 Linux 服务器上执行 cat /root/.jenkins/secrets/initialAdminPassword 复制密码并粘贴:

       

    3、安装推荐的插件即可。插件安装完成后,可以创建一个管理员账户:

        

    4、创建用户后,进入Jenkins ,页面如下图:

    5、点击 系统管理 --> 管理插件 --> 可选插件 ,搜索 Maven Integration (用来Maven 编译打包)和 Publish Over SSH (用于远程服务器发布) 插件,安装完成后重启:http://IP地址:端口号/jenkins/restart

    6、点击 系统管理 --> 全局工具配置,安装配置好 JDK、Maven 和 Git。不会安装的自行百度...

tips:安装好 git 后请把服务器公钥添加到 gitlab 服务器。 

二、构建 Maven 项目 

    1、输入任务名称,选择 构建一个 Maven 项目:

    2、源码管理

    3、构建触发器

build whenever a snapshot dependency is built -->当job依赖的快照版本被build时,执行本job。
build after other projects are built -->当本job依赖的job被build时,执行本job
build periodically -->隔一段时间build一次,不管版本库代码是否发生变化,通常不会采用此种方式。
poll scm -->隔一段时间比较一次源代码如果发生变更,那么就build。否则,不进行build,通常采用这种方式。

这里我选择手动触发部署,所以没有勾选任何一项。

    4、构建环境

Delete workspace before build starts --> 默认删除所有的,也可以设置删除特定的文件

- Patterns for files to be deleted:正则匹配删除哪些文件
- Apply pattern also on directories:规则是否也应用到文件夹
- Check parameter:是否删除,是个bool值,true则删除,false不删除
- External Deletion Command:执行外部删除命令

Abort the build if it’s stuck --> 构建阻塞的时候,根据超时策略处理.

- Time-out strategy:超时策略,有绝对时间,相对时间,根据以前的构建时间判断等
- Time-out variable:超时时间
- Time-out actions:超时后的处理,如终结,faile调或者写描述
- Add timestamps to the Console Output:在输出界面添加时间戳
- Use secret text(s) or file:使用密文,用于全局性的管理密码等,勾选后会在下方出现Binding,输入需要的用户名,密码证书等就可以了。

    5、Build

     6、Post Steps

当Maven 编译打包完成后,接下来的工作就是 把 war包 解压到 Tomcat 服务器的 /webapps/ROOT 目录下,然后重启服务器。为此准备了两个脚本 deploy.sh (解压war包并重启服务器),重启服务器 用到了另一个脚本 restart.sh 。接下来看一下这两个脚本的具体内容:

deploy.sh 

#!/bin/sh

war=$1
bin=$(cd `dirname $0`; pwd)

if [ ! -n "${war}" ]; then
    echo "***Usage: $0 [project.war]"
    exit 0
fi
if [ ! -f "${war}" ]; then
    echo "***Error: ${war} does not exist."
    exit 0
fi
if [ ! "${war##*.}" = "war" ]; then
    echo "***Error: ${war} is not a war file."
    exit 0
fi

echo "Deploy ${war##*/}..."
rm -rf ${bin}/../webapps/ROOT/
cd ${bin}/../webapps && mkdir ROOT && cd ROOT
jar -xvf ${war}
rm -rf ${bin}/../work/Catalina/localhost/
echo "Restart tomcat..."
sh ${bin}/restart.sh

备注:1、deploy.sh会先清空tomcat下的ROOT目录,再将指定的war包加压至ROOT目录,最后执行restart.sh重启tomcat。

          2、可以使用 unzip 命令 直接解压,但是我发现我们服务器上经常没有安装 unzip 这个软件,所以选择了如上的方式。

          3、一键发布命令:./deploy.sh 项目war包    例如:./deploy.sh /home/test.war 。

restart.sh

#!/bin/sh

bin=$(cd `dirname $0`; pwd)
pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}') 

if [ -n "${pid}" ]; then
    echo "Shutdown..."
    sh ${bin}/shutdown.sh
    sleep 3

    pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}')
    if [ -n "${pid}" ]; then
        kill -9 ${pid}
        sleep 1
    fi
fi

echo "Startup..."
sh ${bin}/startup.sh
if [ "$1" = "-v" ]; then
    tail -f -n 600 ${bin}/../logs/catalina.out
fi

备注:1、restart.sh是用来重启tomcat的,如果tomcat没有启动则直接启动,如果已经启动就先shutdown再启动,如果shutdown之后3s没有停掉tomcat进程,则kill掉原来的进程再启动。

          2、如需重启tomcat则使用命令:./restart.sh 或 ./restart.sh -v (参数-v表示启动时打印tomcat启动日志)。

 

实施方案: 把 deploy.sh 和 restart.sh 拷贝到 Tomcat 的bin目录下,再用chmod +x 给这两个脚本赋上可执行权限。

本地部署方案:

#!/bin/sh
export BUILD_ID=qianxx
sh /home/wwwroot/t8_8280_passenger/bin/deploy.sh ${WORKSPACE}/target/*.war
View Code

远程服务器部署方案:

  1. 添加服务器

系统管理 --> 系统设置 --> Publish over SSH ,服务器配置如下:

2. 工程中配置

/home/wwwroot/t8_8180_common/bin/deploy.sh /root/common/*.war
View Code
目录
相关文章
|
1月前
|
测试技术 开发工具 git
利用Git Hooks自动化你的开发流程
Git Hooks 是 Git 的强大功能,允许在特定事件(如提交、推送、合并请求)发生时自动执行脚本。通过合理设置和使用 Git Hooks,可以自动化测试、代码风格检查等任务,提高代码质量和开发效率。本文介绍了如何设置和使用常用的 Git Hooks,包括 `pre-commit`、`pre-push` 和 `post-merge`,并提供了最佳实践建议。
|
4月前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
|
21天前
|
移动开发 jenkins 持续交付
jenkins配置git
通过上述步骤,您可以在 Jenkins 中成功配置 Git,从而实现自动拉取代码并进行构建和部署。这些配置不仅提高了开发效率,还保证了代码的连续集成和交付。确保每一步配置正确,以避免在实际使用中遇到问题。
40 1
|
2月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
2月前
|
测试技术 开发工具 git
利用Git Hooks自动化你的开发流程
【10月更文挑战第6天】在现代软件开发中,版本控制至关重要,Git作为主流工具,提供了强大的代码管理功能。Git Hooks 是 Git 的一个特性,可在特定事件(如提交、推送)发生时自动执行脚本,实现开发流程自动化。本文介绍 Git Hooks 的基本概念、常见用例及设置方法,涵盖 pre-commit、pre-push 等多种类型的 Hooks,并展示了如何利用它们进行代码格式化、自动化测试和风格检查,提升开发效率与代码质量。通过合理应用 Git Hooks,可以显著减少人为错误,确保代码一致性,并促进团队协作。
|
2月前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
140 1
|
2月前
|
运维 jenkins 持续交付
自动化部署的魅力:如何用Jenkins和Docker简化运维工作
【10月更文挑战第7天】在现代软件开发周期中,快速且高效的部署是至关重要的。本文将引导你理解如何使用Jenkins和Docker实现自动化部署,从而简化运维流程。我们将从基础概念开始,逐步深入到实战操作,让你轻松掌握这一强大的工具组合。通过这篇文章,你将学会如何利用这些工具来提升你的工作效率,并减少人为错误的可能性。
|
2月前
|
运维 监控 jenkins
运维自动化实践:利用Jenkins实现高效CI/CD流程
【10月更文挑战第18天】运维自动化实践:利用Jenkins实现高效CI/CD流程
|
4月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
101 1
|
4月前
|
Java jenkins Shell
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成

推荐镜像

更多