webman项目可采用五种gitlab ci自动化部署方式:一、shell executor纯命令行部署;二、docker executor镜像化部署;三、webman原生守护进程热更新;四、gitlab pages静态资源预览;五、自定义shell脚本封装部署。

如果您已在项目中采用 Webman 框架开发 PHP 应用,但尚未实现代码提交后自动构建、测试与部署,则可能是由于缺少 GitLab CI 配置或自动化脚本支持。以下是针对 Webman 框架的多种 GitLab-CI 自动化部署实现方式:
一、基于 Shell Executor 的纯命令行部署
该方法适用于 Webman 项目部署在同机或 SSH 可达的目标服务器上,利用 GitLab Runner 的 shell 执行器直接运行本地或远程部署命令,无需容器环境,轻量且可控。
1、在项目根目录创建 .gitlab-ci.yml 文件。
2、在文件中定义 stages 为 build 和 deploy,并指定仅在 main 分支推送时触发。
3、在 build 阶段执行 composer install --no-dev --optimize-autoloader 安装生产依赖并优化自动加载。
4、在 deploy 阶段使用 sshpass 或密钥免密方式,通过 rsync -avz --delete ./ user@target-server:/var/www/webman/ 同步代码。
5、追加远程执行命令:重启 Webman 进程,例如 ssh user@target-server 'cd /var/www/webman && php webman restart'。
二、基于 Docker Executor 的镜像化部署
该方法将 Webman 应用打包为 Docker 镜像,通过 GitLab Runner 的 docker 执行器构建并推送到私有 Registry,再由目标服务器拉取并更新容器,适合标准化、多环境一致的部署场景。
1、在项目根目录新增 Dockerfile,基础镜像选用 php:8.2-cli-alpine,COPY 项目文件并执行 composer install。
2、在 .gitlab-ci.yml 中定义 image 为 docker:latest,services 添加 docker:dind。
3、在 build 阶段执行 docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA . 构建镜像。
4、执行 docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY 登录私有 Registry。
5、执行 docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA 推送镜像。
6、在 deploy 阶段通过 SSH 连接到目标服务器,执行 docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA && docker tag ... && docker-compose up -d 更新服务。
三、基于 Webman 原生守护进程的热更新部署
该方法利用 Webman 内置的 reload 机制,在不中断服务的前提下完成代码更新,适用于已运行 webman start --daemon 的生产环境,强调零停机与快速生效。
1、确保目标服务器已安装 Webman 并配置好 systemd 或 supervisor 管理进程。
2、在 .gitlab-ci.yml 的 deploy 阶段前,先同步代码至部署路径,例如 scp -r ./ user@server:/opt/webman-app/。
3、同步完成后执行远程 reload 命令:ssh user@server 'cd /opt/webman-app && php webman reload'。
4、添加健康检查步骤:使用 curl 请求 Webman 的某个健康端点(如 /ping),超时或非 200 状态则标记部署失败。
5、若需强制重启(如框架升级后),可改用 php webman restart 替代 reload。
四、结合 GitLab Pages 实现静态资源预览部署
该方法适用于 Webman 项目中包含前端构建产物(如 Vue/React 打包输出)的混合架构,利用 GitLab Pages 将 public 目录托管为静态站点,用于 PR 预览或文档发布。
1、在 .gitlab-ci.yml 中新增 pages stage,并设置 only: [/^feature\/.*$/] 仅对 feature 分支生效。
2、在 build 阶段执行前端构建命令,例如 cd frontend && npm ci && npm run build。
3、将构建产物复制到 Webman 的 public 目录下:cp -r frontend/dist/* public/。
4、定义 artifacts 节点,指定 public 为发布路径。
5、GitLab 自动将 public 下内容发布至 https://
五、使用自定义 Shell 脚本封装部署逻辑
该方法将部署流程抽象为独立可复用的 shell 脚本(deploy.sh),提升可维护性与跨项目复用能力,同时便于本地调试和权限隔离。
1、在项目根目录新建 scripts/deploy.sh,以 bash 编写,开头加入 set -e 确保任一命令失败即终止。
2、脚本内定义变量:DEPLOY_USER、DEPLOY_HOST、DEPLOY_PATH、APP_ENV 等,支持通过环境变量注入。
3、实现 rsync 同步、权限修复(chown www-data:www-data)、.env 文件差异化处理(如从 vault 获取)、日志轮转等操作。
4、在 .gitlab-ci.yml 中调用该脚本:bash scripts/deploy.sh,并传入 $CI_COMMIT_TAG 或 $CI_COMMIT_REF_NAME 作为部署标识。
5、脚本末尾执行 ssh $DEPLOY_USER@$DEPLOY_HOST "cd $DEPLOY_PATH && git checkout . && php webman reload" 完成最终生效。











