開發免不了要測試,同一個項目一兩我的開發的時候,開發、測試、部署一個分支就行,但當項目變大,開發人員變多時,若是仍是這樣操做,你可能就會常常遇到不一樣需求的代碼同時測試時的相互干擾問題。好比,一、合併代碼時常常發生衝突;二、一人代碼寫錯,影響全部人等。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項目的倉庫地址。
至此,多分支同時部署測試的環境就搭建好了。