开发免不了要测试,同一个我的项目一两个人开发的时候,开发、测试、部署一个分支就行,但当我的项目变大,开发人员变多时,如果还是这样操作,你可能就会常常遇到不同需要的代码同时测试时的互相烦扰问题。比方,1、合并代码时常常发生冲突;2、一人代码写错,影响所有人等。
那么如何解决这个问题呢?
这里我介绍一个多分支同时部署测试的计划。具体就是每一个开发者的分支代码都能够独立部署到测试服务器(比方,不同的根目录,不同的容器),而后,各开发者能够在各自的测试分支独立调试。
上面以PHP我的项目为例来具体阐明。
首先列一下咱们可能用到的工具清单:
- Linux:这是所有操作的根底,本文中次要用到的Linux版本为Centos8
- Gitlab:负责管理源代码
- Jenkins:负责继续集成部署,
- Docker:负责搭建Gitlab、Jenkins、Web利用。
- Nginx:Web应用服务器、反向代理
- PHP:解析PHP代码
- GIT:治理源代码
须要阐明的是,咱们装置这些工具次要应用yum命令,因而在执行前面步骤前,请先确保你的Linux零碎曾经装置了yum命令。
具体步骤如下:
1、装置Docker
yum install docker
2、装置Gitlab
下载Gitlab镜像:
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,查看成果:
3、装置Jenkins
制作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.phpphp -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.reporpm --import https://pkg.jenkins.io/redhat/jenkins.io.keyyum install jenkins
批改Jenkins配置,配置文件默认地位为:/etc/sysconfig/jenkins
- JENKINS_HOME
- JENKINS_USER
- JENKINS_PORT
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就装置好了。
4、在Gitlab创立我的项目
1、设置access token,记录生成的秘钥,前面创立Jenkins工作须要应用。
2、创立代码仓库
3、为代码仓库,设置Webhook
5、在Jenkins创立工作
在Jenkins中,Jenkins的次要性能都是由一个个插件提供的。因而,在搭建环境之前咱们也须要先装置几个用到的插件。
咱们用到的插件次要有以下几个:
- GitLab Plugin
- Gitlab Hook Plugin
- Gitlab API Plugin
- ruby-runtime
从名字咱们也能够看到,这次要是用于Jenkins与Gitlab的交互。
阐明一下,Jenkins与Gitlab的交互包含两局部,一部分是Gitlab通过Webhook提交Git Push事件,触发Jenkins开始执行集成工作,另一部分是Jenkins通过Git从Gitlab拉取源代码。
1、配置Gitlab链接
这个是Gitlab上创立的access token
2、创立集成工作
这是gitlab我的项目的仓库地址。
3、在本地Push代码到Gitlab,查看Jenkins工作执行状况
至此,多分支同时部署测试的环境就搭建好了。