阿里云云效流水线管理PHP项目

作者: 刘一二 发布时间: 2023年1月19日 浏览: 709

此前公司的IT项目OPS管理使用 gogs + walle 搭建,因为服务器切换。需要重新配置。研究了下阿里云的云效,相比几年前已经比较完善了,于是将所有项目的代码库和上线管理切换到了云效上。

代码管理 Codeup 和常用的 git 服务类似,很容易上手,流水线 Flow 与阿里云大部产品已经打通,管理 k8s 系列的大型项目相当顺滑。

公司有一些普通的 php 单体项目,流水线 Flow 处理这些传统 php 项目时,需要特殊处理。

流程有三个节点:

  1. 流水线源 - 选择代码及版本库,支持第三方代码库
  2. 构解 - 用于生成文件包
  3. 部署 - 上伟代码到服务器

overview.jpg

 

1. 流水线源

选盾代码库及分支,可配置提交代码自动触发。

 

2. 构建

构建下有两个任务步骤:

  1. PHP 构建 - 将相关代码打包成一个 tgz 压缩包
  2. 构建物上传 - 将打包好的代码包上传,用于后续部署

 

1.jpg

 

2.1 PHP 构建

通常情况下,项目中的 composer 依赖包不放在代码库中,PHP 构建时:

  • 使用 "composer install --no-dev" 或 "composer update --no-dev" 拉取依赖包(使用的 php 版本需与部署服务器一致)。
  • 清理不需要部署到服务器中的文件,如 .git 目录。

如果不需要  composer 更新,则仅需要简单清理下文件,或不做任何处理

composer installcomposer update 的区别:

  • composer install  -  以 composer.lock 中的配置 安装软件,相当于锁定的版本号,比较安全,composer.lock 需放入代码库
  • composer update -  以 composer.json 中的配置 更新软件包,并覆盖 composer.lock

使用 composer 构建时,阿里云的构建集群应该只安装了默认的php扩展,如倮项目或第三方软件包依赖了未安装的php扩展,将构建失败,如缺少 bcmath 库,gd 库等,相关文档很少,难以处理,可以考虑本地 composer 管理依赖包,将 vendor 目录放入代码库,或在第三步部署时,通过命令行在服务器上执行 composer。

 

1.1.jpg

 

 

2.2 构建物上传

选择 “归档至云效公共存储空间(供后续任务拉取并部署)”

打包路径中填写  .  用一个点号自动包含了根目录下的所有文件及目录,在 2.1 中已清理掉了不需要的文件。

因为代码中可能会有大量目录,官方文档中配置多个目录的方式并不实用。

1.2.jpg

 

 

3. 部署

部署操作主要工作就是解压 tgz 压缩包,放置到指定位置,代码稍多,预先在部署服务器上写好 deploy-be.sh 直接调用却可。

 

2.jpg

 

/www.php/deploy-be.sh 脚本示例:

#!/bin/bash

DEPLOY_DIR=${package_download_path%.*}
DEPLOY_DIR_TMP=${DEPLOY_DIR}'_tmp'

echo "部署文件夹:${DEPLOY_DIR}"
echo "临时文件夹: ${DEPLOY_DIR_TMP}"

if [ -d ${DEPLOY_DIR_TMP} ]; then
    echo "删除临时文件夹 ${DEPLOY_DIR_TMP}"
    rm -rf ${DEPLOY_DIR_TMP}
fi

echo "创建临时文件夹 ${DEPLOY_DIR_TMP}"
mkdir -p ${DEPLOY_DIR_TMP}

echo "解压 ${package_download_path} 到 ${DEPLOY_DIR_TMP}"
tar zxf ${package_download_path} -C ${DEPLOY_DIR_TMP}


DATA_DIR='/www.php/_data/'${DEPLOY_DIR#/www.php/}
if [ ! -d ${DATA_DIR} ]; then
	echo "创建 data 目录 ${DATA_DIR}"
	mkdir -p ${DATA_DIR}
	chmod 777 ${DATA_DIR}
fi

if [ -d ${DEPLOY_DIR_TMP}'/data' ]; then
	rm -rf ${DEPLOY_DIR_TMP}'/data'
fi

ln -sfn ${DATA_DIR} ${DEPLOY_DIR_TMP}'/data'

if [ -d ${DEPLOY_DIR} ]; then
    echo "部署文件夹 ${DEPLOY_DIR}"
    rm -rf ${DEPLOY_DIR}
fi

echo "将 ${DEPLOY_DIR_TMP} 重命名为 ${DEPLOY_DIR}"
mv ${DEPLOY_DIR_TMP} ${DEPLOY_DIR}


rm -f ${package_download_path}

 

服本说明:

  • 部署配置中设置的 下载路径  /www.php/liu12.com/www.liu12.com(变量名:package_download_path,移除 .tgz)作为项目的部署路径。
  • 将压缩包解压到 /www.php/liu12.com/www.liu12.com_tmp
  • 处理项目中的外挂目录,如 data 目录等(存放有网站产生的数据。通过软链接挂入)
  • 删除旧的  /www.php/liu12.com/www.liu12.com
  • 将  /www.php/liu12.com/www.liu12.com_tmp 改名成  /www.php/liu12.com/www.liu12.com
最新文章
热门文章
导航