`
chenruieye
  • 浏览: 37760 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Jenkins加Shell实现最简单的持续部署

    博客分类:
  • Java
阅读更多

参考跳转链接:

http://ju.outofmemory.cn/entry/29263

 

 

 

 

大量的有关持续集成的书籍与文档中,基本都提到了持续部署这个步骤,然而具体怎么实现,并没有通行的做法,对于典型的Java Web应用来说,大致有两个思路,一是通过web容器(如Tomcat、JBoss)提供的接口部署,这方面的代表就是Cargo,然而,其缺点是配置复杂且不够稳定,我的经验是,部署了很多次之后,容器的JVM就会内存溢出,当然这个和具体容器有关,部署多少次之后才溢出,也要看Web应用的大小。

第二种初看起来会更复杂的做法是自己写Shell脚本来停止容器、更新Web应用、然后再启动容器,其实,如果你懂点Shell,这种方法非常简单,而且这种方法非常稳定,因为每次直接杀JVM进程,直接避免了内存溢出的问题。以下是具体的步骤,以Jenkins和Tomcat为例:

1. 配置Jenkins的Build Job在完成之后Archive war文件备用

这样每次Build完之后,到对应的Job,如:http://10.12.136.115:8080/job/fileserver/lastSuccessfulBuild/artifact/my-app/target/my-app.war。

另一种方法是直接让Jenkins Build完了之后直接deploy到Nexus,之后就可以直接从Nexus获取了,细节这里就不解释了。

2. 编写部署脚本并测试

脚本的基本思路就是,看有没有容器在运行,如果有就kill掉,然后从Jenkins/Nexus下载最新的war文件,替换掉旧的,再启动容器,如:

#!/bin/bashexport JAVA_HOME=/usr/java

tomcat_pid=`/usr/sbin/lsof -n -P -t -i :9009`[-n "$tomcat_pid"]&& kill -9 $tomcat_pid

cd /home/admin/
mv myapp.war myapp.war.bak
wget http://10.12.136.115:8080/job/fileserver/lastSuccessfulBuild/artifact/my-app/target/my-app.war
rm /home/admin/apache-tomcat-7.0.40/webapps/myapp.war
rm -fr /home/admin/apache-tomcat-7.0.40/webapps/myapp
cp myapp.war /home/admin/apache-tomcat-7.0.40/webapps/myapp.war

cd /home/admin/apache-tomcat-7.0.40/bin/./startup.sh

为什么要export JAVA_HOME环境变量稍后解释。这里的的lsof命令根据tomcat监听的端口来获取其进程ID然后杀掉,其他命令基本一目了然。在部署机器上运行该脚本确保其能工作,然后提交到源码仓库里。

3. 建一个Jenkins Job专门做部署

建一个freestyle的Job,然后scm等配置也照常,当然,部署脚本要在scm仓库中,然后Jenkins的Build配置像这样:

这条命令就是通过ssh远程登陆到部署机器上运行部署部署脚本deploy.sh,-x参数让shell打印每一行执行的命令,-s则表示从标准输入读取要运行的脚本,这里重定向了我们的deploy.sh。(如何设置ssh key实现免密码登陆请自理)

需要注意的是,这种远程执行脚本的方式,属于非交互式Shell,不会触发诸如~/.bash_profile之类文件的载入,这也是我为什么在Shell脚本中export JAVA_HOME,这个环境变量本来是在~/.bash_profile中的,当然,你也可以直接source整个~/.bash_profile

最后,你可以通过Jenkins的Pipeline,使得当my-app Build成功之后,自动触发deploy这个任务,做到自动持续。

如果有多个应用,按照类似的方法创建多个Jenkins Job就可以了,由于Shell脚本是自己写的,不论什么容器都OK,有所放弃的是,由于要重启容器,相比直接通过容器接口部署,会稍微耗时些,但考虑到稳定性的大幅提高及配置的简化,我觉得还是值得的。

分享到:
评论
1 楼 YaLove 2016-02-23  
你好,
“建一个freestyle的Job,然后scm等配置也照常,当然,部署脚本要在scm仓库中”这句话中我,我有个疑问, 部署脚本怎么放在scm仓库中? scm仓库又是什么? 

万分感谢。

相关推荐

    jenkins入门讲解

    Jenkins是一个开源软件项目,是全球最受欢迎的持续集成(CI)工具之一。它的前身是Hudson,并且随着时间的发展,它不仅成为了CI领域的领头羊,还在持续交付(CD)方面有着广泛的应用。Jenkins支持多种编程语言,包括Java...

    Go-deployr一个简单的golang应用程序用于自动部署软件版本

    开发者可以将其与其他工具如Jenkins、GitLab CI/CD等配合使用,实现从代码提交到部署的全自动流程。此外,由于其源代码开放,用户可以根据自身需求进行定制和扩展,增强了工具的灵活性。 在"skx-deployr-b3dbed8"这...

    使用Jenkins Pipeline自动化构建发布Java项目的方法

    Pipeline是Jenkins2.X的最核心的特性,帮助Jenkins实现从CI到CD与DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建一个Pipeline项目。创建Pipeline项目可以通过...

    cf-example-jenkins:如何将 Jenkins 部署到基于 Cloud Foundry 的 PaaS

    Jenkins 部署到基于 Cloud Foundry 的 PaaS应用概述 是一个用 Java 编写的开源持续集成工具。...注意事项使用 jenkins buildpack 第一种也是最简单的方法是使用特殊的 buildpack。 如果您使用命令行部署 Jenkin

    jenkins中通过Publish Over SSH插件将项目部署到远程机器上的讲解说明

    在持续集成和持续部署(CI/CD)的流程中,Jenkins是一个广泛使用的自动化服务器,它可以帮助我们自动化各种构建、测试和部署任务。在本文中,我们将深入探讨如何使用Jenkins中的Publish Over SSH插件来将项目部署到...

    服务器环境配置工具

    最后,Jenkins 是一款持续集成/持续部署(CI/CD)工具,它与上述工具配合使用,自动化构建、测试和部署流程,确保快速、可靠地发布新功能或修复。 总的来说,服务器环境配置工具的目的是提高效率、一致性并降低出错...

    hello-jenkins:詹金斯你好世界

    本项目"hello-jenkins"旨在介绍如何利用詹金斯实现简单的自动化构建过程,同时结合JavaScript这一通用编程语言,创建一个基础的"你好,世界"示例。 1. **詹金斯简介** 詹金斯提供了一个友好的Web界面,允许开发者...

    DevOps-References:包含适合入门者的小而简单的示例

    5. **Bash Script / Shell**: Bash是Unix和Linux系统中最常用的命令行解释器,也常用于编写shell脚本。在DevOps中,bash脚本可以用于自动化日常任务,如文件处理、系统配置和集成工作流。 6. **Examples**: 提供的...

    holberton-system_engineering-devops:在此存储库中,我们找到了与shell使用相关的所有内容

    5. 持续集成/持续交付(CI/CD):配合Jenkins、GitLab CI/CD等工具,利用Shell脚本实现自动化测试和部署。 综上所述,"holberton-system_engineering-devops"存储库中的内容可能涵盖了Shell脚本编写、基本命令使用...

    holberton-system_engineering-devops:开始学习shell

    在DevOps领域,Shell脚本是至关重要的工具,因为它们可以帮助实现持续集成和持续部署(CI/CD)流程。例如,你可以创建一个Shell脚本来自动化测试、构建、打包和部署应用程序。这极大地提高了效率,减少了人为错误,...

    完整的Linux视频教程

    最后,对于部署工程师,教程会涵盖自动化部署工具(如Ansible、Chef、Puppet)的使用,持续集成/持续部署(CI/CD)流程的建立,以及如何通过Jenkins、GitLab CI/CD等工具实现自动化测试和部署。 总之,这个6G多的...

    git-ready-to-deploy:您是否已准备好部署Git?

    2. **持续集成/持续部署(CI/CD)**:利用如Jenkins、GitLab CI/CD等工具,实现代码提交自动触发构建和测试,通过后自动部署。 3. **部署准备**:`git flow deploy`或自定义脚本可以确保所有必要的更改已提交,并且...

    windows Git-2.24.0.2-64-bit.rar

    9. **持续集成/持续部署(CI/CD)**:Git也可以与持续集成/持续部署工具集成,如Jenkins、Travis CI或Azure DevOps,自动构建、测试和部署代码,提高开发效率。 10. **钩子(hooks)**:Git的钩子系统允许在特定事件...

    介绍一些使用python自动化方法的总结

    对于持续集成和自动化部署,`jenkins`或`travis-ci`等工具可以与Python脚本结合,实现代码构建和发布自动化。 在文件处理方面,`shutil`库提供了高级的文件和文件集操作,如复制、移动或打包文件。`subprocess`库...

    最专业的devops工程师学习路径,无论是专业devops,还是IT小白,都值得拥有

    - **学习目标**: 理解持续集成/持续部署(CI/CD)的概念,能够配置并维护CI/CD流水线。 - **实践建议**: 构建一个简单的CI/CD流水线,自动构建、测试和部署应用程序。 - **重要性**: CI/CD是DevOps的核心理念之一,...

    tomcat自动启停脚本

    结合自动启停脚本,可以进一步实现自动化部署,例如通过持续集成工具(如Jenkins)、版本控制系统(如Git)或自动化运维工具(如Ansible、SaltStack)进行应用的自动部署和更新。 总结,Tomcat自动启停脚本是系统...

    Devops-scripts

    在IT行业中,DevOps是一种实践,它强调开发人员与运维人员之间的协作,以实现快速、可靠和持续的软件交付。"Devops-scripts"这个压缩包文件显然包含了支持DevOps流程的一些自动化脚本,主要针对AWS(亚马逊网络服务...

Global site tag (gtag.js) - Google Analytics