onedesign/atomic-deploy

一个用于在Linux环境中轻松处理原子部署的脚本。

1.2.0 2021-12-03 21:38 UTC

README

此项目基于在Buddy Atomic Deployments中提出的概念。它提供了处理部署之间共享文件和目录的功能。虽然这是为Buddy编写的,但它可以在任何标准的*nix环境中工作。

依赖项

  • PHP 5.5+
  • curl

文件结构

  • deploy-cache/ - 所有文件上传到服务器的位置
  • revisions/ - 包含所有修订版的目录
  • current - 指向当前修订版的符号链接
  • shared/ - 包含应跨所有部署共享的文件的目录

用法

curl -sS https://raw.githubusercontent.com/onedesign/atomic-deployments/master/atomic-deploy.php | php -- --revision=$(date "+%F-%H-%M-%S")

Buddy + Craft 2 示例

在您的流水线中文件上传操作之后,在“SSH命令”部分添加以下内容

curl -sS https://raw.githubusercontent.com/onedesign/atomic-deployments/master/atomic-deploy.php | php -- --revision=${execution.to_revision.revision} --symlinks='{"shared/config/.env.php":".env.php","shared/storage":"craft/storage"}'

选项

  • --revision (必需) 接受此修订版的字符串ID
  • --deploy-dir 接受部署的基础目录(默认:当前工作目录)
  • --deploy-cache-dir 接受目标缓存目录(默认:deploy-dir中的deploy-cache
  • --revisions-to-keep 保留的旧修订版数量(默认:20
  • --symlinks 要在修订版目录中创建的符号链接的JSON散列(默认:{}
  • --help 打印帮助和用法说明
  • --ansi 强制ANSI颜色输出
  • --no-ansi 禁用ANSI颜色输出
  • --quiet 抑制不重要信息
  • --protect 保护来自*.oneis.us域名的网站(默认:true

符号链接

符号链接指定为{"target":"linkname"},并使用本机ln工具创建链接。

  • target 相对于--deploy-dir路径
  • linkname 相对于修订版路径

例如,指定此选项

--symlinks='{"shared/config/.env.php":".env.php","shared/logs":"logs"}'

将创建与以下相同的符号链接

ln -s <deploy-dir>/shared/config/.env.php revisions/<revision>/.env.php
ln -s <deploy-dir>/shared/logs revisions/<revision>/logs

注意:在创建符号链接的地方存在的文件和目录将被覆盖。例如,使用上面的示例,实际上发生的是这种情况

rm -rf revisions/<revision_id>/.env.php \
  && ln -sfn <deploy-dir>/shared/config/.env.php revisions/<revision>/.env.php
rm -rf revisions/<revision_id>/logs \
  && ln -sfn <deploy-dir>/shared/logs revisions/<revision>/logs

密码保护

默认情况下,部署将保护任何来自*.oneis.us域名的网站。这是通过将templates/htaccess-auth.txt文件的内容添加到在current/web目录中找到的任何现有的.htaccess文件来实现的。如果在那个目录中没有找到.htaccess文件,将使用templates/htaccess.txt文件生成一个。

测试

cd ./test
php ../bin/deploy \
  --deploy-cache-dir="./deploy-cache" \
  --revision="123456" \
  --symlinks='{"shared/config/env":".env","shared/storage":"storage"}'