你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

一个多分支同时部署、测试的方案

[复制链接]
gaosmile 发布时间:2020-12-30 21:53
开发免不了要测试,同一个项目一两个人开发的时候,开发、测试、运维部署一个分支就行,但当项目变大,开发人员变多时,如果还是这样操作,你可能就会经常遇到不同需求的代码同时测试时的相互干扰问题。比如:
  • 1、合并代码时经常发生冲突;
  • 2、一人代码写错,影响所有人等。0 u0 n2 l4 M0 S" S9 O; z
那么如何解决这个问题呢?
这里我介绍一个多分支同时部署、测试的方案。具体就是每一个开发者的分支代码都可以独立部署到测试服务器(比如,不同的根目录,不同的容器),然后,各开发者可以在各自的测试分支独立调试。
下面以PHP项目为例来具体说明。
首先列一下我们可能用到的工具清单:
  • Linux:这是一切操作的基础,本文中主要用到的Linux版本为Centos8
  • Gitlab:负责管理源代码
  • Jenkins:负责持续集成部署,
  • Docker:负责搭建Gitlab、Jenkins、Web应用。
  • Nginx:Web应用服务器、反向代理
  • PHP:解析PHP代码
  • GIT:管理源代码
    + a# R* E: O+ Y# z
需要说明的是,我们安装这些工具主要使用yum命令,因此在执行后面步骤前,请先确保你的Linux系统已经安装了yum命令。
具体步骤如下:
1、安装Docker
yum install docker
! c+ X4 B( {2 o' |
2、安装Gitlab
下载Gitlab镜像:
docker pull gitlab-ce( S7 V( q0 p' v! N; y$ D, t: ~
创建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/bash9 t8 ?# h7 B1 d& w& U0 R+ X- k& f
访问localhost,查看效果:
微信图片_20201230214222.png
3、安装Jenkins
制作Jenkins镜像
我们的仓库代码是不包含vendor目录的,需要git checkout 后,使用composer install命令自动生成。由于官方Jenkins镜像不包含Composer、PHP、Git等我们的PHP项目需要用到的命令,因此,在实际使用时,我们以官方镜像为基础制作了自己的Jenkins镜像。
下载Centos镜像,如下:
docker pull centos:latest" ~/ x$ E0 G, r4 p$ t
微信图片_20201230214225.png
以Centos镜像为基础镜像,创建Jenkins容器:
docker run -idt --name jenkins docker.io/centos /bin/bash
; i5 o7 f& D% P1 \
进入jenkins容器内部:
docker exec -it jenkins /bin/bash
9 P4 Z) @- o5 j8 b, G7 N7 j
使用yum命令安装java、php、composer、git:
yum -y php git java  ^& C  ]1 A: _3 I5 w" ]1 v1 Z
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"2 u3 |# M0 R$ @' g0 ^
php -r "if (hash_file('sha384', 'composer-setup.php') === 'c31c1e292ad7be5f49291169c0ac8f683499edddcfd4e42232982d0fd193004208a58ff6f353fde0012d35fdd72bc394') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
) E# l+ I  K8 Q7 cphp composer-setup.php
5 |* B6 {+ B% R/ R1 jphp -r "unlink('composer-setup.php');"1 i/ K1 M, e1 T' B4 u6 S
mv composer.phar /usr/bin/composer6 w* v7 {* b1 Z* G6 {
如果提示PHP拓展缺失,请使用yum命令安装相关拓展。
使用yum命令,安装官方jenkins:
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
3 m* I: G- x- a, wrpm --import https://pkg.jenkins.io/redhat/jenkins.io.key" x. [; f% i7 W' U- j2 p  t
yum install jenkins
) m" n2 d0 W3 U
修改Jenkins配置,配置文件默认位置为:/etc/sysconfig/jenkins
JENKINS_HOME
$ y( ]6 B, ~8 v  R$ o- Y; P8 cJENKINS_USER
! Z5 j: y/ ]$ ~JENKINS_PORT
3 v2 G" C0 m" x#JENKINS_HOME是Jenkins的主目录,Jenkins工作的目录都放在这里,Jenkins储存文件的地址,Jenkins的插件,生成的文件都在这个目录下。$ w. C5 j+ [3 }
#JENKINS_USER是Jenkins的用户,拥有$JENKINS_HOME和/var/log/jenkins的权限,一般使用root用户。3 x+ d2 C$ R: C1 l
#JENKINS_PORT是Jenkins的端口,默认端口是8080。* M1 `/ D' R$ r8 W+ p4 ]" m
启动Jenkins:
service jenkins start
3 S; l" r  o7 k8 w1 L
如果出现错误,可能要考虑文件/etc/init.d/jenkins是否缺少配置,Jenkins的启动需要Java的支持。 微信图片_20201230214228.png
如果Jenkins安装没有问题,下面我们就需要设置开机自启了。这是为了我们后面创建Jenkins容器的时候,Jenkins可以自动启动,而不需要我们进入容器中手动启动。jenkins.sh重启脚本如下:
微信图片_20201230214231.png
给jenkins.sh设置可执行权限:
chmod +x /usr/local/jenkins/jenkins.sh4 J+ X8 R" C" E; g$ Q- D% g
将文件添加系统自动启动程序列表:
echo "/usr/local/jenkins/jenkins.sh">> /etc/rc.d/rc.local
1 w; `7 |4 t4 u5 G" Y
使用exit命令退出容器,然后使用docker commit命令制作新的Jenkins镜像:
docker commit -m 'Jenkins with docker/composer/git/php' jenkins jenkins:latest1 N7 y; `* Q- d: W" y5 U1 B$ S1 [
以新镜像创建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; M% W; |5 z% D
至此,Jenkins就安装好了。
4、在Gitlab创建项目
1、设置access token,记录生成的秘钥,后面创建Jenkins任务需要使用。
微信图片_20201230214234.png
2、创建代码仓库
微信图片_20201230214236.png
3、为代码仓库,设置Webhook
微信图片_20201230214239.png
4、在Jenkins创建任务
在Jenkins中,Jenkins的主要功能都是由一个个插件提供的。因此,在搭建环境之前我们也需要先安装几个用到的插件。 微信图片_20201230214242.png
微信图片_20201230214244.png ' p$ P  x8 W$ f4 h8 g
微信图片_20201230214248.png
我们用到的插件主要有以下几个:
  • GitLab Plugin
  • Gitlab Hook Plugin
  • Gitlab API Plugin
  • ruby-runtime
    ) s+ s2 B* T( F; W
从名字我们也可以看到,这主要是用于Jenkins与Gitlab的交互。
说明一下,Jenkins与Gitlab的交互包括两部分:
  • 一部分是Gitlab通过Webhook提交Git Push事件,触发Jenkins开始执行集成任务,
  • 另一部分是Jenkins通过Git从Gitlab拉取源代码。4 J9 V0 q5 K- h* h
1、配置Gitlab链接
微信图片_20201230214251.png
微信图片_20201230214254.png
; s3 J+ d$ a5 f# H8 S: L! z2 q这个是Gitlab上创建的access token
2、创建集成任务
微信图片_20201230214257.png
% n# C! R, C6 @& t, F9 Q
微信图片_20201230214300.png
微信图片_20201230214302.png
这是gitlab项目的仓库地址。
微信图片_20201230214305.png
微信图片_20201230214308.png
) @! t% \- A5 v/ }
微信图片_20201230214316.png
3、在本地Push代码到Gitlab,查看Jenkins任务执行情况
微信图片_20201230214319.png
至此,多分支同时部署测试的环境就搭建好了。
2 P8 p0 N) s4 s" t
赞 收藏 评论0 发布时间:2020-12-30 21:53

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版