此前公司的IT项目OPS管理使用 gogs + walle 搭建,因为服务器切换。需要重新配置。研究了下阿里云的云效,相比几年前已经比较完善了,于是将所有项目的代码库和上线管理切换到了云效上。
代码管理 Codeup 和常用的 git 服务类似,很容易上手,流水线 Flow 与阿里云大部产品已经打通,管理 k8s 系列的大型项目相当顺滑。
公司有一些普通的 php 单体项目,流水线 Flow 处理这些传统 php 项目时,需要特殊处理。
流程有三个节点:
选盾代码库及分支,可配置提交代码自动触发。
构建下有两个任务步骤:
通常情况下,项目中的 composer 依赖包不放在代码库中,PHP 构建时:
如果不需要 composer 更新,则仅需要简单清理下文件,或不做任何处理
composer install 与 composer update 的区别:
使用 composer 构建时,阿里云的构建集群应该只安装了默认的php扩展,如倮项目或第三方软件包依赖了未安装的php扩展,将构建失败,如缺少 bcmath 库,gd 库等,相关文档很少,难以处理,可以考虑本地 composer 管理依赖包,将 vendor 目录放入代码库,或在第三步部署时,通过命令行在服务器上执行 composer。
选择 “归档至云效公共存储空间(供后续任务拉取并部署)”
打包路径中填写 . 用一个点号自动包含了根目录下的所有文件及目录,在 2.1 中已清理掉了不需要的文件。
因为代码中可能会有大量目录,官方文档中配置多个目录的方式并不实用。
部署操作主要工作就是解压 tgz 压缩包,放置到指定位置,代码稍多,预先在部署服务器上写好 deploy-be.sh 直接调用却可。
/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}