Jenkins + pipeline + Git + PHP

Posted 林中龙虾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins + pipeline + Git + PHP 相关的知识,希望对你有一定的参考价值。

一、准备环境介绍

192.168.5.71    # gitlab 仓库IP
192.168.5.72    # 开发环境,用于提交代码等
192.168.5.150   # www.leon.com 运行wordpress的网站地址
192.168.5.239   # jenkins 服务器

二、Jenkins需要先安装pipeline插件

Jenkins -> 系统管理 -> 插件管理 -> 可选插件 -> 过滤pipeline -> 钩选后直接安装

 三、创建两个git仓库,用于存放jenkinsfile脚本及php线上代码

在192.168.5.71上面使用git用户,也可以用root用户。

# 初始化一个仓库用于存储jenkins pipeline 的SCM脚本,jenkinsfile名称可修改成别的名字
# su - git
$ mkdir -p /home/git/repo/jenkinsfile/
$ cd repo/jenkinsfile/
$ git --bare init
Initialized empty Git repository in /home/git/repo/jenkinsfile/
-----------------------------------------------------------------------------
# 初始化之后的仓库地址是:git@192.168.5.71:/home/git/repo/jenkinsfile

# 初始化第二个git仓库,用于上线wordpress代码
$ mkdir -p /home/git/repo/wordpress
$ cd /home/git/repo/wordpress/
$ git --bare init
Initialized empty Git repository in /home/git/repo/wordpress/
------------------------------------------------------------------------------
# 初始化之后的仓库地址是:git@192.168.5.71:/home/git/repo/wordpress

四、开发机(72)和LNMP环境的web机器(150)配置对git服务器(71)免密钥认证

开发机和web机在两台机器上面都要进行操作
LNMP环境安装可参见:https://www.cnblogs.com/cyleon/p/10110060.html
# 在两台(72、150)机器上面做如下操作
# ssh-keygen -t rsa -P \'\' -f ~/.ssh/id_dsa # ssh-copy-id -i /root/.ssh/id_dsa.pub git@192.168.5.71 # 完成后测试是否能免密码拉取代码 # git clone git@192.168.5.71:/home/git/repo/jenkinsfile Cloning into \'jenkinsfile\'... remote: Counting objects: 12, done. remote: Compressing objects: 100% (7/7), done. remote: Total 12 (delta 1), reused 0 (delta 0) Receiving objects: 100% (12/12), done. Resolving deltas: 100% (1/1), done.

五、在开发机(72)下载wordpress代码,并push到wordpress仓库中

# LNMP环境版本:nginx/1.8.1、PHP 5.5.30、MariaDB-5.5.64、wordpress-4.7.4
# tar xf wordpress-4.7.4-zh_CN.tar.gz 
# cd wordpress/
# cp wp-config-sample.php wp-config.php
# echo "OK" > status.html # git init # git remote add origin git@192.168.5.71:/home/git/repo/wordpress # git add . # git commit -m \'wordpress all files\' # git push origin master

六、编写jenkinsfile脚本文件

php代码发布不需要重启服务,如果是多台机器发布到一台机器之后再使用rsync进行同步。

# git clone git@192.168.5.71:/home/git/repo/jenkinsfile
# cd jenkinsfile/
# mkdir team-a/
# cd team-a/
# cat jenkinsfile-php 
node ("wordpress-192.168.5.150") {  # 指定jenkins的slave节点,也是WEB服务器
   stage(\'git checkout\') {
        checkout([$class: \'GitSCM\', branches: [[name: \'*/master\']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: \'ccf5f140-9a28-49d6-abc8-40bc6c750323\', url: \'git@192.168.5.71:/home/git/repo/wordpress\']]])
   }
   stage(\'copy code\') {
        sh \'\'\' rm -rf ${WORKSPACE}/.git
        mv /data/html/www.leon.com /data/backup/www.leon.com-$(date +%F_%T)
        cp -rf ${WORKSPACE} /data/html/www.leon.com \'\'\'
   }
   stage(\'check web test\'){
        sh "curl http://www.leon.com/status.html"   # 需要在150本地配置/etc/hosts解析
   }
}

七、nginx域名配置及hosts文件修改

# mkdir -p /data/html/www.leon.com
# mkdir /data/backup
# cat /etc/nginx/conf.d/www.leon.com.conf 
server {
        listen       80;
        server_name  www.leon.com;
        access_log   /var/log/nginx/access.log  main;
        location / {
                root   /data/html/www.leon.com;
                index  index.html index.htm index.php;
                try_files $uri $uri/ /index.php$is_args$args;
        }

        location ~ \\.php {
                root  /data/html/www.leon.com; 
                fastcgi_pass   unix:/tmp/php-cgi.sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_param  PATH_INFO $fastcgi_script_name;
                include        fastcgi_params;
        }
}
# nginx -s reload
# echo \'192.168.5.150 www.leon.com\' >> /etc/hosts

八、配置jenkins pipeline

8.1 创建pipeline的任务并进行配置

 8.2 进行构建

 

 默认master分支,无需修改

 

 

 可以点击查看部署日志

 九、pipeline语法

可以自行生成checkout流水线等语法

以上是关于Jenkins + pipeline + Git + PHP 的主要内容,如果未能解决你的问题,请参考以下文章

使用凭据签出 Jenkins Pipeline Git SCM?

在 Jenkins Pipeline/Jenkinsfile 中获取 git 分支名称

2. Jenkins+Git+Kubernetes+Pipeline配置详细说明

Jenkins pipeline:pipeline 使用之语法详解

试用Jenkins 2 的 Pipeline 项目

Jenkins的pipeline