网站首页 > 博客文章 正文
概述
随着GitLab在DevOps方面持续开发,基于GitLab CI持续集成实现全自动化的开发部署栈成了现实。但是由于Gitlab版本迭代太快,时下网上的文档都早已经过期,本文虫虫结合Gitlab官方最新的文档来给大家实例展示基于Gitlab CI/CD 的Laravel项目自动化开发、测试、部署教程。本文中我们将实例展示Laravel应用程序创建,配置生产服务器,再到利用Envoy实现生产环境,并通过GitLab CI/CD持续交测试和部署。
创建Laravel应用程序
创建应用
假设已经安装了laravel,我们新建一个laravel项目Cctest,并以此创建Git仓库。laravel命令创建项目:
laravel new --dev CCtest
laravel就会给我们搭好项目架构,目录如下图:
单元测试
我们此处建立一个单元测试实例,。
Laravel的应用都支持有两种类型的测试,功能测试和单元测试,位于tests目录。
单元测试tests/Unit/ExampleTest.php中的代码如下:
Laravel默认使用PHPUnit进行测试,PHPUnit可以通过下面命令安装:
composer require --dev phpunit/phpunit
安装好后执行vendor/bin/phpunit tests/Unit/ExampleTest.php
建立Git仓库
我们在Gitlab服务器上建立一个新项目"CCtest",并添加到上一部我们创建的Laravel中。
cd CCtest
git init
git remote add origin git@XX/Chongchong/cctest.git
git add。
git commit -m '初始化CCtest'
git push -u origin master
生产环境准备
Laravel是个典型的PHP应用,其运行需要LNMP环境,即Linux,Nginx,MySQL和PHP。
创建部署用户
创建一个部署用户和应用部署目录,并给用户赋予权限。
useradd deployer
创建web目录/var/www的,给部署用户deployer赋予读写执行权限
setfacl -R -m u:deployer:rwx /var/www
添加SSH证书
为了能将GitLab上的私有存储库的应用程序部署到生产服务器。首先,我们要生成一个SSH证书的密钥对。将公钥部署到部署用户下的authorized_keys文件
sshd-keygen
cd ~/.ssh/
cp id_rsa.pub >> authorized_keys
复制私钥id_rsa内容出来,我们后面供部署使用
添加Gitlab SSH变量
为在.gitlab-ci.ym配置文件中使用私钥,并保证私钥安全防止其泄露,我们在Gitlab项目管理也将其配置为变量(注意对配置文件中其他敏感信息,比如密码、认证token等也使用类似的方法)。
打开项目的 "设置">"CI/CD"下Variables配置下设置:
在KEY字段中,添加名称SSH_PRIVATE_KEY,并在VALUE字段中粘贴上面我们准备到证书私钥id_rsa的内容:
同时将该SSH证书的公钥id_rsa.pub添加到项目> 设置> Repository的部署证书下,这样可以SSH方式clone该项目库。添加成功后就可以用
git clone git@XXX:<用户名>/cctest.git
来clone项目了。
配置Nginx
现在,让我们确保我们的Web服务器配置根目录current/public,典型的配置方法是通过/usr/local/nginx/conf/nginx.conf
站点server的配置如下:
server {
root /var/www/app/current/public;
server_name XXX.example;
}
GitLab持续集成
通过GitLab CI/CD我们可以很方便的使用Docker容器来进行应用程序的测试和部署。
为了能够使用GitLab CI/CD构建,测试和部署,我们先准备我们的工作环境。我们使用Docker镜像来生成容器化的环境,镜像安装运行Laravel应用程序需要运行的最低要求组件。
创建镜像
我们在应用程序中创建Dockerfile,用来生成镜像,Gitlab也提供了方便文件模版我们可以用模版创建Dockerfile。
然后我们配置Dockerfile,内容如下:
构建容器镜像库
GitLab也提供了Container Registry服务可以用来管理和存储docker镜像。可以用它来方便的建立私有地镜像仓库。
在GitLab管理也,点击 "Registry"选项卡。
要开始使用Container Registry,需要使用我们的GitLab用户名和密码登录GitLab Registry:
docker login registry.XXX
然后通过下面的命令构建并推送镜像:
docker build -t registry.XXX/<用户名>/cctest
docker push r registry.XXX/<用户名>/cctest
配置GitLab CI/CD
为了使用GitLab CI/CD构建和测试我们的应用,我们要创建配置和.gitlab-ci.yml的文件,同理创建.gitlab-ci.yml也支持使用gitlab内置的模版并在此基础上修改。
我们的.gitlab-ci.yml文件如下所示:
镜像配置
image关键字指示Runners要使用的镜像。
services关键字定义链接到镜像的其他镜像。此处我们使用上一步创建的镜像为基本镜像,并增加使用MySQL 5.7作为service。
注意:如果您希望使用不同的PHP版本和数据库管理系统测试您的应用程序,则可以为每个测试作业定义不同的图像和服务关键字。
变量Variables
GitLab CI/CD配置文件.gitlab-ci.yml中我们可以使用环境变量,比上我们上文中添加的SSH证书变量SSH_PRIVATE_KEY。此处我们定义MySQL为数据库,通过将MYSQL_DATABASE变量定义为数据库名称并将MYSQL_ROOT_PASSWORD变量定义为root的密码来动态调整MySQL实例的配置。
更多变量是mysql配置变量DB_HOST设置为127.0.0.1,
DB_USERNAME设置为root,这些都是Laravel特定变量,用户其连接数据库。
单元测试
我们使用shell脚本来运行unit_test作业时要执行参数等。脚本中包括,建立Laravel的Artisan命令,最后通过PHPUnit进行测试。
部署到生产
作业deploy_production将应用程序部署到生产服务器。脚本中使用了Envoy部署应用程序,用到$SSH_PRIVATE_KEY的SSH私钥。
在GitLab持续交付方法中通过environment关键字告诉GitLab该作业部署到生产环境。 url关键字会在GitLab Environments添加一个应用程序的链接。
only关键字指定只有在管道构建主分支时才应执行作业。
when:manual表示通过手动确认进行部署。
运行DevOps
上面我们配置好了GitLab CI/CD测试和部署应用程序所需的一切。我们只需提交.gitlab-ci.yml到master分支,就会自动触发一个管道,可以在项目的管道下实时查看。
在这里,我们看到我们的测试和部署阶段。 Test阶段正在构建unit_test。。
作业Jobs页面
如果有问题,我们回滚到应用程序的最新工作版本。
通过单击右侧指定的外部链接图标,GitLab将打开生产网站。
总结
本文我们使用GitLab CI/CD进行了一个Laravel项目的自动化测试和部署到生产环境,完成了一个完整DevOps全栈实例。关于GitLab CI/CD更多的文档请参考GitLab官方文档。
猜你喜欢
- 2024-09-27 gitlab 使用技巧及过程错误记录(gitlab官网)
- 2024-09-27 ubuntu git生成ssh key (公钥私钥)配置github或者码云
- 2024-09-27 全网最全程序员效率工具及小技巧(一)
- 2024-09-27 基于docker的gitlab安装搭建公司的git服务器
- 2024-09-27 gitlab未授权RCE(CVE-2021-22205)漏洞复现及深入利用
- 2024-09-27 如何在CentOS7配置Gitlab,图文详细,一看就会
- 2024-09-27 Gitlab不同方式的安装配置及常见场景用法
- 2024-09-27 linux之ssh-keygen命令(linux用ssh命令)
- 2024-09-27 一文让你了解如何配置SSH免密码登录
- 2024-09-27 Java教程:gitlab-使用入门(gitlab4j-api)
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)