[toc]php
关于jenkins和gitlab的部署,很少加赘述,网上的部署文档多了去了,不踩坑,不成长!这里只聊聊生产的一些实践实用。在关于php项目的运行,咱们知道对比于java项目,少了不少繁琐的步骤,至少不须要编译,不须要生产war包。但实践上关于php项目jenkins的自动化发布的文档也相对较少。那么这里就聊聊php项目的发布和回滚是怎么处理的。java
这里有2种方式,一种是直接拉取gitlab上的代码,直接同步到目标主机的站点根目录中,为了安全起见,是须要使用--exclude参数来排除.git目录,以及一些关于git的敏感目录进行排除,具体实践,就看公司的程序猿怎么说了。还有另一种方式,也差很少同样的原理,但其中就多了一步,对拉取后的代码同步到目标主机的代码版本目录当中,网站根目录经过软连接的方式实现站点的根路径定义,这样作的好处是若是须要回退到前期的某个版本,能够直接从新定义软连接便可实现快速回滚。这里须要演示的就是第二种方案,若有更好的生产实践方案,也欢迎各位大佬讨论交流。node
主机说明 | IP地址 |
---|---|
Jenkins发布主机 | 192.168.0.143 |
目标服务器主机 | 192.168.0.128 |
这里须要注意的是:jenkins安装后默认用户是jenkins用户运行,修改运行用户,须要将其相关的运行目录的所属进行修改,不然jenkins是无法运行起来的。至于为何改为另一个用户,只是为了拉取代码的所属者和目标主机的php和nginx的运行用户保持一致性。nginx
[root@jenkins ~]# useradd dengcom [root@jenkins ~]# vim /etc/sysconfig/jenkins JENKINS_USER="dengcom" [root@jenkins ~]# chown -R dengcom.dengcom /var/lib/jenkins /usr/lib/jenkins /var/log/jenkins /var/cache/jenkins [root@jenkins ~]# /etc/init.d/jenkins restart [root@jenkins ~]# netstat -tulnp |grep 8080
[root@jenkins ~]# su - dengcom [dengcom@jenkins ~]$ ssh-keygen [dengcom@jenkins ~]$ cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAJvWCAvokpvEx2ohibA7rp+qRdEGO9z03Dj3GlNMRBeBMN3mPBBMUBo8XsJF2gXiPQrdIk0kPZqphnKb9y081AEDhQnliY71pmJxgkfDIWEQiUqJUPwM+tcTuibJH2OYYy0f9Bs5leDHgfXi7ZEurSLI1YCYjgOGPef+yhACMkvPwSIFIsRuyRcsdFrhTt2LXnmbR49KdpOzndUiH+CPgjjOn+qvJxzr8v0bpEArt40y6U4sWqv8hLZPVaArGkBwvpo2o+fZJcDioalxOb377Su4I505e+wv/9rWjanmV5vfo41fcOrpTN89liS1C4CrZvuwBPJuQaQzoC3gcrYCp dengcom@node01.hao123.com [dengcom@jenkins ~]$ git clone git@192.168.0.130:root/wap-dev.git #测试是否能够正常拉取代码
在gitlab上的右上角-->用户设置-->SSH密钥设置,添加上面生成的公钥,添加完成后在Jenkins主机上进行测试是否能够正常拉取代码。 git
添加全局凭据设置,为了一下子能够正常经过jenkins的web操做进行拉取代码,这里添加上面生成的秘钥。web
Jenkins-->管理Jenkins-->凭据-->系统-->全局凭据-->添加凭据shell
建立nginx和php的用户,并在jenkins主机上添加ssh-key信任,站点根目录和代码版本目录建立vim
[root@node01 ~]# useradd dengcom [root@node01 ~]# mkdir /data/web/wap-dev -pv [root@node01 ~]# mkdir /data/code/version -pv [dengcom@jenkins ~]$ ssh-copy-id dengcom@192.168.0.128
任务名称保持和目标网站根目录一致,这样能够节省不少麻烦。首先进行参数设置,以下:安全
源码管理,进行添加项目的git地址和凭据,这里添加变量${git}是为了按照前面的参数进行匹配bash
最后再配置须要执行的shell,就完成了
#!/bin/bash #自定义全局变量 VERSION_ROOT=/data/code/version WWW_ROOT=/data/web/wap-dev NODE_LIST="192.168.0.128" CTIME=$(date "+%Y-%m-%d") #判断是否正确输入须要发布的版本 if [ -z "${git}" ];then echo -e "发布的版本号为空,请从新输入版本号后构建......" exit 1 else #判断为发布操做时,执行如下代码块 if [ ${status} == "Deploy" ];then #对节点列表进行发布代码 for node in $NODE_LIST do # 使用rsync的方式将workspace的代码进行同步到目标主机,并进行软连接到站点根目录 rsync -raz --delete --progress --exclude=cache --exclude=.git --exclude=.idea ${WORKSPACE}/ dengcom@$node:${VERSION_ROOT}/${git}/ ssh dengcom@$node "rm -rf ${WWW_ROOT}" ssh dengcom@$node "ln -sv ${VERSION_ROOT}/${git} ${WWW_ROOT}" echo "发布成功......" done fi #判断为回滚操做时,执行如下代码块 if [ ${status} == "Rollback" ];then echo "准备回退......" #对节点列表进行回退版本 for node in $NODE_LIST;do #判断目标主机是否存在回滚的版本 ssh dengcom@$node "ls -ld ${VERSION_ROOT}/${git}" res=$(echo $?) if [ $res == 0 ];then ssh dengcom@$node "rm -rf ${WWW_ROOT}" ssh dengcom@$node "ln -sv ${VERSION_ROOT}/${git} ${WWW_ROOT}" else echo "回退版本:"${git}"不存在" exit 2 fi done echo "已成功回退到"${git}"版本......"
点击-->Build with Parameters,选择配置的选项参数,并填写版本号-->开始构建
在目标主机上查看代码结构的变化:
[root@node02 code]# ll /data/web/wap-dev lrwxrwxrwx 1 dengcom dengcom 59 Nov 30 16:09 /data/web/wap-dev -> /data/code/version/22e42950c47dccfc0f940f1eaa838749463c84da [root@node02 code]# ll /data/code/version/ total 0 drwxr-xr-x 4 dengcom dengcom 62 Nov 30 16:09 22e42950c47dccfc0f940f1eaa838749463c84da drwxr-xr-x 4 dengcom dengcom 45 Nov 30 14:38 603582c48c7976eb4da6294185f193898689e7a1 drwxr-xr-x 4 dengcom dengcom 45 Nov 30 14:42 fdb77979a186600f4ff39c442a958d00f80af810
在上面能够看到有多个版本号的代码,随意选择一个版本,进行操做。点击-->Build with Parameters,选择配置的选项参数,并填写版本号-->开始构建
目标主机上查看是否已经回滚:
[root@node02 code]# ll /data/web/wap-dev lrwxrwxrwx 1 dengcom dengcom 59 Nov 30 16:12 /data/web/wap-dev -> /data/code/version/603582c48c7976eb4da6294185f193898689e7a1 [root@node02 code]# ll /data/code/version/ total 0 drwxr-xr-x 4 dengcom dengcom 62 Nov 30 16:09 22e42950c47dccfc0f940f1eaa838749463c84da drwxr-xr-x 4 dengcom dengcom 45 Nov 30 14:38 603582c48c7976eb4da6294185f193898689e7a1 drwxr-xr-x 4 dengcom dengcom 45 Nov 30 14:42 fdb77979a186600f4ff39c442a958d00f80af810
简单的php项目发布和回滚就作好了!!!