前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于 Jenkins 和 Ansible 打造一个 Web 构建发布系统

基于 Jenkins 和 Ansible 打造一个 Web 构建发布系统

作者头像
DevOps时代
发布2019-10-24 10:05:50
1.5K0
发布2019-10-24 10:05:50
举报
一步一步用jenkins,ansible,supervisor打造一个web构建发布系统。

本来应该还有Gitlab这一环节的,但是感觉加上,内容会增加很多。所以直接用github上的spring-mvc-showcase项目来做演示。

https://github.com/spring-projects/spring-mvc-showcase

本文的环境用docker来构建。当然也可以任意linux环境下搭建。

下面将要介绍的完整流程是:

  • github作为源代码仓库
  • jenkins做为打包服务器,Web控制服务器
  • ansible把war包,发布到远程机器
    • 安装python-pip
    • 用pip安装supervisor
    • 安装jdk
    • 下载,部署tomcat
    • 把tomcat交由supervisor托管
    • 把jenkins生成的war包发布到远程服务器上
    • supervisor启动tomcat
    • 在http端口等待tomcat启动成功
  • supervisor托管app进程,提供一个web界面可以查看进程状态,日志,控制重启等。

在文章的最后,会给出一个完整的docker镜像,大家可以自己运行查看实际效果。

安装 Jenkins

  • 先用docker来启动一个名为“jenkins”的容器:
代码语言:javascript
复制
sudo docker run -i -t -p 8080:8080 -p 8101:8101 -p 9001:9001 --name='jenkins' ubuntu /bin/bash

8080是jenkins的端口,8101是spring-mvc-showcase的端口,9001是supervisor的web界面端口

执行完之后,会得到一个container的shell。接着在这个shell里安装其它组件。

  • 安装open jdk 和 git: sudo apt-get update sudo apt-get install openjdk-7-jdk git
  • 下载配置tomcat: apt-get install wget mkdir /opt/jenkins cd /opt/jenkins wget http://apache.fayea.com/tomcat/tomcat-8/v8.0.18/bin/apache-tomcat-8.0.18.tar.gz tar xzf apache-tomcat-8.0.18.tar.gz
  • 安装jenkins:
代码语言:javascript
复制
cd /opt/jenkins/apache-tomcat-8.0.18/webapps
wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war
rm -rf ROOT*
mv jenkins.war ROOT.war
  • 启动jenkins: /opt/jenkins/apache-tomcat-8.0.18/bin/startup.sh

然后在本机用浏览器访问:http://localhost:8080/ ,可以看到jenkins的界面了。

配置Jenkins

安装 Git 插件

安装git插件:

https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

在“系统管理”,“插件管理”,“可选插件”列表里,搜索“Git Plugin”,这样比较快可以找到。

因为jenkins用google来检查网络的连通性,所以可能在开始安装插件时会卡住一段时间。

配置maven,Java

打开 http://localhost:8080/configure,在jenkins的系统配置里,可以找到maven,git,java相关的配置,只要勾选了,在开时执行job时,会自动下载。

JDK可以选择刚才安装好的openjdk,也可以选择自动安装oracle jdk。

Git会自动配置好。

配置ssh服务

安装sshd服务:

代码语言:javascript
复制
sudo apt-get install openssh-server sshpass

编辑vi /etc/ssh/sshd_config把

代码语言:javascript
复制
PermitRootLogin without-password

改为:

代码语言:javascript
复制
PermitRootLogin yes

重启ssh服务:

为root用户配置密码,设置为12345:

代码语言:javascript
复制
passwd

最后尝试登陆下:

代码语言:javascript
复制
ssh root@127.0.0.1

安装 Ansible

在 Jenkins 这个 container 里,继续安装ansible,用来做远程发布用。

先安装pip,再用pip安装ansible:

代码语言:javascript
复制
sudo apt-get install python-pip python-dev build-essential git
sudo pip install ansible

配置Ansible playbook

把自动发布的ansible playbook clone到本地:

https://github.com/hengyunabc/jenkins-ansible-supervisor-deploy

代码语言:javascript
复制
mkdir -p /opt/ansible
cd /opt/ansible
git clone https://github.com/hengyunabc/jenkins-ansible-supervisor-deploy

在 Jenkins 上建立 deploy job

  • 新建一个maven的项目/job,名为spring-mvc-showcase
  • 在配置页面里,勾选“参数化构建过程”,再依次增加“String”类型的参数

共有这些参数:

代码语言:javascript
复制
app       要发布的app的名字
    http_port      tomcat的http端口
    https_port    tomcat的https端口
    server_port    tomcat的server port
    JAVA_OPTS     tomcat启动的Java参数
    deploy_path      tomcat的目录
    target_host     要发布到哪台机器
    war_path       jenkins生成的war包的目录
  • “源码管理”,选择Git,再填入代码地址

https://github.com/spring-projects/spring-mvc-showcase.git

  • 在“Post Steps”里,增加调用ansible playbook的shell命令
代码语言:javascript
复制
cd /opt/ansible/jenkins-ansible-supervisor-deploy
ansible-playbook -i hosts site.yml --verbose --extra-vars "target_host=$target_host app=$app http_port=$http_port https_port=$https_port server_port=$server_port deploy_path=$deploy_path JAVA_HOME=/usr JAVA_OPTS=$JAVA_OPTS deploy_war_path=$WORKSPACE/$war_path"

最后,保存。

测试构建

一切都配置好之后,可以在 Jenkins 界面上,在左边,选择“Build with Parameters”,“开始”来构建项目了。

如果构建成功的话,就可以打开 http://localhost:8101 ,就可以看到spring-mvc-showcase的界面了。

打开 http://localhost:9001 可以看到superviosr的控制网页,可以查看tomcat进程的状态,重启,查看日志等。

如果想要发布到其它机器上的话,只要在

代码语言:javascript
复制
  /opt/ansible/jenkins-ansible-supervisor-deploy/hosts

文件里增加相应的host配置就可以了。

其它的一些东东

如果提示

代码语言:javascript
复制
to use the ‘ssh’ connection type with passwords, you must install the sshpass program

则安装:

代码语言:javascript
复制
sudo apt-get install sshpass

演示的 Docker image

如果只是想查看实际运行效果,可以直接把 hengyunabc/jenkins-ansible-supervisor 这个image拉下来,运行即可。

代码语言:javascript
复制
docker run -it -p 8080:8080 -p 8101:8101 -p 9001:9001 --name='jenkins' hengyunabc/jenkins-ansible-supervisor

总结

  • Jenkins提供了丰富的插件,可以定制自己的打包这过程,并可以提供完善的权限控制
  • Ansible可以轻松实现远程部署,配置环境等工作,轻量简洁,功能强大
  • supervisor托管了tomcat进程,提供了web控制界面,所有运行的程序一目了然,很好用

来源:http://hengyunabc.github.io/deploy-system-jenkins-ansible-supervisor/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps时代 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装 Jenkins
  • 配置Jenkins
    • 安装 Git 插件
    • 配置maven,Java
    • 配置ssh服务
    • 安装 Ansible
    • 配置Ansible playbook
    • 在 Jenkins 上建立 deploy job
    • 测试构建
    • 其它的一些东东
    • 演示的 Docker image
    • 总结
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档