Walle代码发布练习

一、概述

Walle 一个web部署系统工具,配置简单、功能完善、界面流畅、开箱即用!支持git、svn版本管理,支持各种web代码发布,PHP,Python,JAVA等代码的发布、回滚,可以通过web来一键完成。

功能列表:
用户分身份注册、登录
开发者发起上线任务申请、部署
管理者审核上线任务
支持多项目部署
支持多项目多任务并行
快速回滚
项目的用户权限管理
部署前准备任务pre-deploy(前置检查)
代码检出后处理任务post-deploy(如vendor)
同步后更新软链前置任务pre-release
发布完毕后收尾任务post-release(如重启)
执行sql构建(不要担心忘记测试环境sql同步)
线上文件指纹确认
支持git、svn版本管理

二、原理

宿主机、目标机群、操作用户关系如下图所示,宿主机(walle所在的机器),是一个中间机器,是代码托管与远程目标机群的纽带。所以宿主机需要与代码托管(github/gitlab)和远程目标机群都建立ssh-key信任。

上线流程图:

三、安装

环境说明:

主机名 ip地址 部署 系统
linux-node1 192.168.56.11 walle、LNMP Centos 7.4 x86_64
linux-node2 192.168.56.12 LNMP Centos 7.4 x86_64

walle依赖于LAMP或者LNMP环境,在数据库中创建walle库:
create database walle;
grant all privileges on walle.* to [email protected]‘%‘ identified by ‘123456‘;

1.代码检出

[[email protected] ~]# mkdir -p /data/www/walle-web && cd /data/www/walle-web  # 新建目录
[[email protected] ~]# git clone [email protected]/meolu/walle-web.git .          # 代码检出

2.设置mysql连接

[[email protected] walle-web]# vim config/local.php
‘db‘ => [
    ‘dsn‘       => ‘mysql:host=127.0.0.1;dbname=walle‘, # 新建数据库walle
    ‘username‘  => ‘walle‘,                          # 连接的用户名
    ‘password‘  => ‘123456‘,                          # 连接的密码
],

3.安装composer

[[email protected] ~]# curl -sS https://getcomposer.org/installer | php
[[email protected] ~]# mv composer.phar /usr/local/bin/composer                # PATH目录

4.安装vendor

[[email protected] www]# cd walle-web
[[email protected] walle-web]# composer install --prefer-dist --no-dev --optimize-autoloader -vvvv

5.初始化项目

[[email protected] walle-web]# ./yii walle/setup # 需要你的yes

6.配置nginx

[[email protected] www]# vim /usr/local/nginx/conf/vhost/walle.conf
server {
    listen       82;
    server_name  192.168.56.11; # 改你的host
    root /data/www/walle-web/web; # 根目录为web
    index index.php;

    # 建议放内网
    # allow 192.168.0.0/24;
    # deny all;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri = 404;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

默认用户名密码:Admin admin

四、配置项目

1、基本要求

宿主机php进程用户www(假如,可通过配置的检测查看或ps aux|grep php)的ssh-key要加入git/gitlab的deploy-keys。此处是www用户的id_rsa.pub,添加到gitlab上的SSH-KEYS

[[email protected] ~]$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCp/n0aWNws9KlFUTCFk7j1kSMz4mi8RVUl8amYuW/NNuuB9Ee3MRX0ZgJUgRpJDWM/xtHgCxAU9eg+3cTXCED7946aRaCY1ekK+eWfG+FiWzXLzDrUub2lJ071m3Pfsh6ExljwETObxiiSldrrgTStBbknYl/tTiGKM3vlGckVlDO8czUbpsLLot2ayQjQl3yHOhZcZbSkYk18i9MIp91fB3VPFhedyJfUJUouhiWJ4RjkbCdMCTCfBSMIxTNP9OvdjGmbDsG2+4YbfXZjQUJgwm9/oafAlpF1IQBdatnPFEL1QTocm+clt+EvyV2HpOksswx+UTHoJiZXdzuJaPAx [email protected]


宿主机php进程用户www(假如,可通过配置的检测查看或ps aux|grep php)要加入目标机群部署用户www_remote(配置中)ssh-key信任,也就是ssh-keys免秘钥登陆

[[email protected] ~]$ sh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[[email protected] ~]$ ssh [email protected]
Last login: Thu Jan 25 10:30:45 2018 from linux-node1
[[email protected] ~]$ 

2、配置项目


这里创建三个项目,可以通过检测来测试是否正常:

注意:这里3个项目的宿主机是linux-node1,所以在设置代码检出仓库,统一为一个仓库即可,这里设置为/data/git,所属也为www用户。检测报错,可以通过报错提示进行修改,通常的报错有检测代码目录、远程代码目录所属问题,gitlab的ssh-key认证问题,宿主机和远程主机的ssh信任问题。

3、高级任务配置

高级任务方便用户自定义一些操作,无论是在代码检出前后,还是切换版本前后。
(1)Java配置实例

pre_deploy任务

echo pre_deploy >> /tmp/cmd        # 初始化一些东西,自由发挥
post_deploy任务

mvn package -Dmaven.test.skip=true # 编译java
mvn clean                          # 打扫
mv WEB-INF/config.Properties.test WEB-INF/config.Properties # 切换环境相应的配置
rm -rf src                         # 甚至删除无用代码
pre_release任务

./xx.sh stop                       # 暂停服务
post_release任务

./xx.sh start                      # 启动服务

五、Nginx虚拟主机配置

[[email protected] app]# cd /etc/nginx/conf.d/
[[email protected] conf.d]# ls
jxs.conf  wap.conf  www.conf
[[email protected] conf.d]# cat www.conf
   server {
        listen 80;
        server_name www.123.com;
        root /data/web/www;
        index index.html index.htm;
        access_log /var/log/nginx/eshop_access.log main;

    location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

}

[[email protected] conf.d]# cat jxs.conf
   server {
        listen 80;
        server_name jxs.123.com;
        root /data/web/jxs;
        index index.html index.htm;
        access_log /var/log/nginx/jxs_access.log main;

    location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

}
[[email protected] conf.d]# cat wap.conf
   server {
        listen 80;
        server_name m.123.com;
        root /data/web/wap;
        index index.html index.htm;
        access_log /var/log/nginx/wap_access.log main;

    location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

}

六、上线发布

我的上线单-->创建上线单-->选择项目



提交完成,点击上线后,点击部署即可发布


下面可以看到宿主机linux-node1中的检出代码库的变化:

[[email protected] git]# pwd
/data/git
[[email protected] git]# tree
.
└── test
    ├── jxs
    │?? └── index.html
    ├── wap
    │?? └── index.html
    └── www
        ├── app
        │?? ├── 1.txt
        │?? └── index.php
        ├── index.htm
        └── index.html

5 directories, 6 files

也可以看到远程目标主机的网站代码目录,都是通过软连接的方式链接到发布版本库中的数据

[[email protected] app]$ cd /data/web/
[[email protected] web]$ ll
total 0
lrwxrwxrwx 1 www www 37 Jan 25 14:40 jxs -> /data/jxs/release/jxs/20180125-144001
lrwxrwxrwx 1 www www 37 Jan 25 14:40 wap -> /data/wap/release/wap/20180125-144026
lrwxrwxrwx 1 www www 37 Jan 26 09:45 www -> /data/www/release/www/20180126-094529
[[email protected] web]$ 

总结:
walle发布代码实现,walle安装在宿主机上,通过拉取gitlab上的代码,而后通过rsync同步到远程目标主机的代码版本库目录中,远程目标主机同时修改软链接,链接到最新的代码版本,回滚的操作也是通过链接不同的代码版本库中进行实现。

原文地址:http://blog.51cto.com/jinlong/2065315

时间: 2024-09-29 21:03:28

Walle代码发布练习的相关文章

Walle代码发布

一.概述 Walle 一个web部署系统工具,配置简单.功能完善.界面流畅.开箱即用!支持git.svn版本管理,支持各种web代码发布,PHP,Python,JAVA等代码的发布.回滚,可以通过web来一键完成. 功能列表:用户分身份注册.登录开发者发起上线任务申请.部署管理者审核上线任务支持多项目部署支持多项目多任务并行快速回滚项目的用户权限管理部署前准备任务pre-deploy(前置检查)代码检出后处理任务post-deploy(如vendor)同步后更新软链前置任务pre-release

自动化代码发布系统实现

日常运维问题 在我日常运维工作中,代码发布可能是最普遍的一项工作之一,尤其是网页代码的更新,碎片化发布需求非常频繁.在前期开发人员比较少时,还可以由自己来上服务器通过脚本来发布代码.但随着公司项目的增多,更多的开发人员加入到公司,发布代码需求开始增多,这就占用了我大部分时间,经常的被打断其它工作来发布代码,非常地不爽,然后开始想解决方法. 尝试解决问题 当然,发布代码肯定是运维的职责之一了,但频繁的发布导致运维大部分时间浪费在重复的操作上,非常的不值得.基于此,开始限制代码发布频率,要求把不是很

测试代码发布到博客效果(Windows Live Writer发布)

测试代码发布到博客效果(Windows Live Writer发布) public class SwitchCase { /** * 1.switch后面的表达式为常量表达式,类型只能是可以转化为int.enum(1.6+).String(1.7+)的类型 * 2.可以转化为int类型的数据类型有:byte.short.int.char * 3.boolean类型的数据类型推荐用if else,java中不支持使用 * * */ public static int getAge(String n

手游公司运维之利用Rundeck自动化运维工具和Shell脚本构建测试环境代码发布平台和生产环境代码发布平台

在做手游运维工作之前,我接触的代码发布都是常规的软件发布,有固定的发布周期.之前工作的那个外企有严格的发布周期,一年中的所有发布计划都是由Release Manager来控制,每次发布之前都需要做一些准备工作,如填写发布表单,上传发布需要的资源文件,联系发布过程中的相关人员,如开发和测试.最后在公司内部开发的发布平台上按照指定的时间点击鼠标对一个集群内的几台主机或全部主机进行代码发布.这个发布平台还是基于rsync服务实现的.虽然每个星期都有各种服务的发布,但是整个发布流程是可以控制的,并且发布

代码发布

代码发布系统 腾讯(蓝鲸) http://bk.tencent.com Murder(推特)  基于管理工具[capistrano]+比特流[bittornado]                             Ruby                  python 代码发布流程 l 程序员开发 l 合并代码 l 发布 --编译 --非编译 --推送(扩展)到指定服务器  注册事件       在互联网产品的发布过程中也较多采用此种发布方式:产品的发布过程不是一蹴而就,而是逐步扩大使

wcf之四代码发布服务

Wcf之四(代码创建服务及客户端) 简述 在开发WCF程序时,如何选择一个适合的绑定对于消息传输的可靠性,传输模式是否跨进程.主机.网络,传输模式的支持.安全性.性能等方面有着重要的影响. 这里列举些 绑定名称 用途描述 版本 basicHttpBinding 支持基于WS-I Basic Profile 1.1规范的Web Service,主要支持早期的Web服务. 3.0/3.5 wsHttpBinding 基于WS*的高级Web Service 3.0/3.5 wsDualHttpBind

代码发布(jenkins)

代码发布流程: 代码上线: 通过工具进行代码分发,分发方式:push(推).pull(拉) 一般拉得方式比较安全一些. 工具:jenkins 测试:使用wordpress installation: wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key y

运维自动化--代码发布平台

随着业务线和项目增加,使用rsync 命令方式发布代码已经无法满足需求.所以想搞一套代码发布平台. [需求收集] 1.年前开发了一个版本,当时只是和前端PHP团队沟通过.开发完发现后端需求和前端的需求有出入.所以这个版本给废掉了. 2.春节后,跟各业务线Leader重新沟通了一下需求,准备重新开发. [开发架构] 1.前端设计: 页面使用Bootstrap.CSS和Jquery. 2.数据库设计: 数据库使用Mysql. 3.后端开发语言: 比较熟悉Django,所以使用Django开发. [功

代码发布系统实现

文章目录 [隐藏] 关于项目开源 日常运维问题 尝试解决问题 最终解决方案 开源技术使用 代码发布流程 最后想说的话 关于项目开源 由于挺多同学请求开源此项目,在这里说明一下:其实本人是想开源的,由于是本人写的第一个运维方面的系统,且写这个项目的时间时间紧,只达到了可以使用的程度,完全没有达到开源的要求,希望理解! 日常运维问题 在我日常运维工作中,代码发布可能是最普遍的一项工作之一,尤其是网页代码的更新,碎片化发布需求非常频繁.在前期开发人员比较少时,还可以由自己 来上服务器通过脚本来发布代码