开发免不了要测试,同一个项目一两我的开发的时候,开发、测试、部署一个分支就行,但当项目变大,开发人员变多时,若是仍是这样操做,你可能就会常常遇到不一样需求的代码同时测试时的相互干扰问题。好比,一、合并代码时常常发生冲突;二、一人代码写错,影响全部人等。php
那么如何解决这个问题呢?java
这里我介绍一个多分支同时部署测试的方案。具体就是每个开发者的分支代码均可以独立部署到测试服务器(好比,不一样的根目录,不一样的容器),而后,各开发者能够在各自的测试分支独立调试。git
下面以PHP项目为例来具体说明。docker
首先列一下咱们可能用到的工具清单:centos
须要说明的是,咱们安装这些工具主要使用yum命令,所以在执行后面步骤前,请先确保你的Linux系统已经安装了yum命令。
具体步骤以下:ruby
yum install docker
下载Gitlab镜像:bash
docker pull gitlab-ce
建立Gitlab容器了:服务器
docker run --name gitlab -p 443:443 -p 80:80 -p 22:22 -v /data/www/gitlab/config:/etc/gitlab -v /data/www/gitlab/logs:/var/log/gitlab -v /data/www/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce /bin/bash
访问localhost,查看效果:composer
制做Jenkins镜像工具
咱们的仓库代码是不包含vendor目录的,须要git checkout 后,使用composer install命令自动生成。因为官方Jenkins镜像不包含Composer、PHP、Git等咱们的PHP项目须要用到的命令,所以,在实际使用时,咱们以官方镜像为基础制做了本身的Jenkins镜像。
下载Centos镜像,以下:
docker pull centos:latest
以Centos镜像为基础镜像,建立Jenkins容器:
docker run -idt --name jenkins docker.io/centos /bin/bash
进入jenkins容器内部:
docker exec -it jenkins /bin/bash
使用yum命令安装java、php、composer、git:
yum -y php git java
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'c31c1e292ad7be5f49291169c0ac8f683499edddcfd4e42232982d0fd193004208a58ff6f353fde0012d35fdd72bc394') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" mv composer.phar /usr/bin/composer
若是提示PHP拓展缺失,请使用yum命令安装相关拓展。
使用yum命令,安装官方jenkins:
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key yum install jenkins
修改Jenkins配置,配置文件默认位置为:/etc/sysconfig/jenkins
JENKINS_HOME是Jenkins的主目录,Jenkins工做的目录都放在这里,Jenkins储存文件的地址,Jenkins的插件,生成的文件都在这个目录下。
JENKINS_USER是Jenkins的用户,拥有$JENKINS_HOME和/var/log/jenkins的权限,通常使用root用户。
JENKINS_PORT是Jenkins的端口,默认端口是8080。
启动Jenkins:
service jenkins start
若是出现错误,可能要考虑文件/etc/init.d/jenkins是否缺乏配置,Jenkins的启动须要Java的支持。
若是Jenkins安装没有问题,下面咱们就须要设置开机自启了。这是为了咱们后面建立Jenkins容器的时候,Jenkins能够自动启动,而不须要咱们进入容器中手动启动。jenkins.sh重启脚本以下:
给jenkins.sh设置可执行权限:
chmod +x /usr/local/jenkins/jenkins.sh
将文件添加系统自动启动程序列表:
echo "/usr/local/jenkins/jenkins.sh">> /etc/rc.d/rc.local
使用exit命令退出容器,而后使用docker commit命令制做新的Jenkins镜像:
docker commit -m 'Jenkins with docker/composer/git/php' jenkins jenkins:latest
以新镜像建立Jenkins容器,以下:
docker run -idt --name jenkins -p 8080:8080 -p 50000:50000 -v /var/run/docker.sock:/var/run/docker.sock -v /data/www/jenkins/jenkins_home:/var/lib/jenkins:rw jenkins /bin/bash
至此,Jenkins就安装好了。
一、设置access token,记录生成的秘钥,后面建立Jenkins任务须要使用。
二、建立代码仓库
三、为代码仓库,设置Webhook
五、在Jenkins建立任务
在Jenkins中,Jenkins的主要功能都是由一个个插件提供的。所以,在搭建环境以前咱们也须要先安装几个用到的插件。
咱们用到的插件主要有如下几个:
从名字咱们也能够看到,这主要是用于Jenkins与Gitlab的交互。
说明一下,Jenkins与Gitlab的交互包括两部分,一部分是Gitlab经过Webhook提交Git Push事件,触发Jenkins开始执行集成任务,另外一部分是Jenkins经过Git从Gitlab拉取源代码。
一、配置Gitlab连接
这个是Gitlab上建立的access token
二、建立集成任务
这是gitlab项目的仓库地址。
至此,多分支同时部署测试的环境就搭建好了。