fourkitchens / project_ci
Conflicts
This package is auto-updated.
Last update: 2024-09-20 18:43:04 UTC
README
此 Composer 包提供了在 Acquia 等托管平台上测试和部署网站所需的基础。
目录
升级
如果您使用的是此包中包含的标准脚本,则升级应该更简单。每次版本升级时,您都应该检查您的 .circleci/config.yml
文件与这里的 config.yml
文件之间的更改。
为此,最简单的方法是使用标准化的 diff 工具,并使用 diff .circleci/config.yml
与 config.yml
。一个示例可能如下所示
diff -u --color .circleci/config.yml ./vendor/fourkitchens/pots/config.yml
验证更改并移动您想要保留的更改。
依赖项
此包期望您的项目具有以下支持框架以运行即用
- composer 脚本 lint 和 code-sniff。示例
"scripts": { "lint": [ "./node_modules/.bin/eslint ./", "find web/modules/custom web/themes/custom \\( -iname '*.php' -o -iname '*.inc' -o -iname '*.module' -o -iname '*.install'-o -iname '*.theme' \\) '!' -path '*/node_modules/*' -print0 | xargs -0 -n1 -P8 php -l" ], "code-sniff": [ "./vendor/bin/phpcs" ] }
- 包含构建主题脚本的 package.json。示例
"scripts": { "theme-build": "cd ./docroot/themes/custom/sdsu && npm run build" }
- package.lock 或 shrinkwrap。
- 最好有一个 .nvmrc
- .gitignore 文件中有剪断行,用于区分源代码和工件。以下是一个示例 .gitignore。
Circle 任务设置假设您使用机器人用户执行此操作。请确保您使用的机器人用户在您的网站所在的 GitHub 组织和托管提供商上都有账户。您需要
- 作为机器人用户在 GitHub 和托管提供商上登录的能力
- SSH 密钥(私钥和公钥)
- 托管工具的 API 或机器令牌,例如 terminus 或 acli
安装
-
安装此包并复制模板 config.yml
composer require fourkitchens/pots mkdir .circleci cp vendor/fourkitchens/pots/config.yml .circleci/config.yml
-
确保您的 composer.json 和 package.json 符合默认脚本的要求数据。
-
将更改推送到公开的 GitHub 分支。
-
通过点击左上角您的名字处的图标并选择正确的选项,导航到您的网站代码所在的组织。
-
导航到“项目”
-
找到您网站的存储库名称
-
点击旁边的“设置项目”按钮
-
选择最快的
-
在对话框中的“git branch”图标处输入您推送到分支的名称。
-
验证扳手图标变为绿色,并告知您找到了 config.json。
-
点击“设置项目”。
第一次尝试总是会失败。转到配置步骤。
配置环境
某些配置步骤在托管环境中是共享的。请确保检查您推送到该环境的特定设置。
共享
部署机器人设置
需要一个 Deploy Bot 用户。此工具假定 Bender(Four Kitchens 的部署机器人)为默认设置,但不会提供您设置工具所需的任何凭据。向 Web Chef 询问 Bender,让您正在合作的组织创建一个新的机器人,或者按照以下步骤为他们创建新的机器人。您需要以该机器人的身份登录以进行一些配置。
为部署机器人创建 GitHub 账户
- 打开一个新的浏览器实例或从您当前的 GitHub 实例登出。
- 转到 https://github.com/join。
- 输入用户名、您的电子邮件地址和密码。注意:确保您输入的电子邮件地址指向一个真实的电子邮件账户。如果您使用 Gmail,您可以使用电子邮件中的“+”来创建多个指向同一账户的“地址”。请参阅如何 创建特定任务的电子邮件地址
- 选择“注册 GitHub”,然后按照说明操作。
- 安全地向客户端提供凭据。
- 在新浏览器实例中,以拥有该网站的组织的管理员身份,邀请机器人用户加入组织。
配置 SSH 密钥
需要一个 SSH 密钥,才能从 circleci 推送提交到托管提供商的 git 仓库。在某些情况下,相同的 SSH 密钥也需要用于能够通过 ssh 登录到托管平台。请客户生成 SSH 密钥对或生成并安全地向客户提供 SSH 密钥对。
- 登录到 https://app.circleci.com/
- 通过点击左上角您的名字处的图标并选择正确的选项,导航到您的网站代码所在的组织。
- 导航到“项目”
- 找到您网站的仓库名称,并点击它。
- 验证您是否看到了失败的流程。
- 点击“项目设置”。
- 点击“SSH 密钥”。
- 导航到“其他 SSH 密钥”。
- 点击“添加 SSH 密钥”。
- 将提供给您的机器人用户的私有 SSH 密钥的内容复制到出现的对话框中的“私有密钥”字段。
- 确保您没有多余的空格或换行符。
- 点击“添加 SSH 密钥”关闭对话框并接受更改。
- 注意指纹以供将来使用。注意:您可以通过验证 circleci 中的指纹与命令
ssh-keygen -l -E md5 -f id_rsa
显示的内容相同来检查文件是否正确复制,其中 idrsa 是您的密钥的文件名。
获取 Github 令牌
您必须有一个 GitHub 令牌,以便 Deploy Bot 可以将评论发布到提交或拉取请求。这允许它提供有关它创建的环境的链接和信息。
如果您跳到了这里,请确保您遵循“配置 SSH 密钥”中的步骤 1-6,以到达 Circle 的项目设置。
- 在新浏览器实例中,以 Deploy Bot 身份登录 GitHub。
- 遵循 创建个人访问令牌 的说明。
- 选择“完整仓库访问”选项。
- 安全地保存访问令牌,以便您可以访问它。它只会显示一次。
配置环境变量
在此处,您将配置通用环境变量。特定于托管的变量和步骤将在下面提供。要配置的变量如下。
GITHUB_TOKEN
GitHub访问令牌,以便机器人用户可以在提交上回复评论。GIT_EMAIL
用于构建工件时的提交者使用的任意电子邮件。CANONICAL_ENV
获取规范数据库和文件的 环境。
如果您跳到了这里,请确保您遵循“配置 SSH 密钥”中的步骤 1-6,以到达 Circle 的项目设置。
- 切换回您的浏览器实例,其中您已登录到CircleCI -> 项目设置
- 在左侧单击“环境变量”。
- 单击“添加环境变量”。
- 在名称中输入“GITHUB_TOKEN”。
- 将令牌值复制到“值”中。
- 单击“添加环境变量”以接受更改。
- 单击“添加环境变量”。
- 在名称中输入“GIT_EMAIL”。
- 将与部署机器人关联的电子邮件地址输入到“值”中。
- 单击“添加环境变量”以接受更改。
Pantheon
SITE_NAME
:用于运行terminus命令的Pantheon站点ID。TERMINUS_TOKEN
:用于操作terminus的Pantheon机器令牌。
为部署机器人创建 Pantheon 账户
对于Pantheon托管站点,我们需要为我们的部署机器人创建一个账户,以便我们的部署与任何Pantheon用户关联。
- 以您的Pantheon组织管理员身份登录。
- 在仪表板右上角单击您的用户名。
- 导航到您想要创建用户的组织名称。
- 单击“人员”选项卡。
- 单击“添加用户”按钮。
- 选择“团队成员”作为角色。
- 添加您之前为GitHub账户创建的相同电子邮件地址。
- 单击“添加用户”。
- 在新的浏览器实例中,检查与该用户关联的电子邮件。
- 接受邀请。
设置 SSH 密钥
您的机器人需要一个配置好的ssh密钥,以便能够将提交推送到Pantheon。使用“配置SSH密钥”部分生成的密钥对中的公钥。
从您的Pantheon账户登出或使用单独的浏览器实例,按照Pantheon的说明将您的SSH密钥添加到Pantheon。
获取 Terminus 令牌(或机器令牌)
- 在上述相同的浏览器实例中,按照Pantheon的说明创建机器令牌
- 安全地保存机器令牌,以便您可以使用它。它只会显示一次。
配置更多 CircleCi 环境变量
- 导航回您的CircleCI -> 项目设置 -> 环境变量浏览器实例。
- 单击“添加环境变量”。
- 在名称中输入“SITE_NAME”。
- 将您的Pantheon站点的站点ID(或
TERMINUS SITE ID
)输入到“值”中。注意:您可以在Pantheon中查看站点的仪表板以找到站点ID。如果您点击任何环境的“访问站点”按钮,则url的格式为https://{{TERMINUS ENV}}-{{TERMINUS SITE}}.pantheonsite.io/
- 单击“添加环境变量”以接受更改。
- 单击“添加环境变量”。
- 在名称中输入“TERMINUS_TOKEN”。
- 将您之前保存的机器令牌值复制到“值”中。
- 单击“添加环境变量”以接受更改。
Acquia
SITE_NAME
:用于运行Acquia Cloud API命令的Acquia站点ID。ACQUIA_REALM
:Cloud API领域。通常是“prod”或“devcloud”。ACQUIA_REPO
:Acquia git仓库。
为部署机器人创建 Acquia 账户
待办事项:填写此部分
设置 SSH 密钥
您的机器人需要一个配置好的ssh密钥,以便能够将提交推送到Acquia。使用“配置SSH密钥”部分生成的密钥对中的公钥。
从您的Acquia账户登出或使用单独的浏览器实例,按照Acquia的说明向Acquia配置文件添加公钥。
配置更多 CircleCi 环境变量
- 导航回您的CircleCI -> 项目设置 -> 环境变量浏览器实例。
- 单击“添加环境变量”。
- 在名称中输入“ACQUIA_REPO”。
- 将Acquia仓库url输入到“值”中。待办事项:更详细地说明如何获取它
- 单击“添加环境变量”以接受更改。
- 单击“添加环境变量”。
- 在名称中输入“ACQUIA_REALM”。
- 将Acquia领域ID输入到“值”中。待办事项:更详细地说明如何获取它
- 单击“添加环境变量”以接受更改。
- 单击“添加环境变量”。
- 在名称中输入“SITE_NAME”。
- 将Acquia站点ID复制到“值”中。待办:提供更多获取方法
- 单击“添加环境变量”以接受更改。
- 单击“添加环境变量”。
- 在名称中输入“ZD_REQUESTER_ID”。
- 将客户端请求者ID输入到“值”中。用户ID可以从用户的URL中获得。例如:https://advomatic.zendesk.com/agent/users/378771022972/requested_tickets
- 单击“添加环境变量”以接受更改。
- 单击“添加环境变量”。
- 在名称中输入“ZD_TOKEN”。
- 将Zendesk令牌值ID输入到“值”中。此令牌存储在1password中。
- 单击“添加环境变量”以接受更改。
- 单击“添加环境变量”。
- 在名称中输入“ZD_LEAD_EMAIL”。
- 将项目负责人电子邮件值ID输入到“值”中。这是项目负责人的电子邮件。
- 单击“添加环境变量”以接受更改。
配置 CircleCI config.yml
您有多种选项,其中一些是共享的,一些是特定于托管。
管道参数默认值
目前,您可以通过设置一些管道参数默认值来配置整个脚本。这些可以通过API调用(高级用法)进行更改,但在您直接向存储您的.circleci/config.yml文件的仓库提交拉取请求或提交时,将使用默认值。
在每一个中,更改default:
键后面的值。例如,要更改整个项目的docroot,更改
docroot:
description: "Where composer installs drupal."
default: "web"
type: string
到
docroot:
description: "Where composer installs drupal."
default: "docroot" #NOTE I CHANGED THIS
type: string
以下参数存在
php-version
这是一个表示整个构建中使用的PHP版本号的字符串。
如果您使用Pantheon作为主机变体,则这只能是一个主要版本号,例如"8.1"
,因为Pantheon Docker容器只允许两位数的版本。
在其他托管平台上,您可以使用三位数的版本号(主要版本.次要版本.补丁),例如如果需要,可以使用"8.1.4"
,但是允许两位数。
tz
这是一个表示时区的字符串。这可能很重要,因为这样就可以确保执行时间计算、打印时间戳或提交的作业是准确的。请参阅时区值的完整列表,以找到适合您使用的时区。
host-variant
这影响整个构建的行为以及您可用的配置。当前选项是“pantheon”、“acquia”和“general”。我们所有的工作流程都将提供您“工件构建”,并提交适当的存储库。这允许您使用Git历史记录将构建回溯到我们在开发中使用的源提交。
pantheon
Pantheon为您提供构建多开发环境的流程,有关开发分支的选项,以及通过CircleCI用户界面审批部署代码的流程。此设置提供的部署过程使用Pantheon的Terminus和Build Tools插件来创建工件构建。这些更改仅提交到Pantheon的git存储库,而不是您的“源存储库”,即在您进行编码更改时创建的存储库。
acquia
Acquia为您提供一个非常基础的流程,但是它确实提供了构建过程中的一部分acquia cli。这允许您使用支持部署方法,如我们的cloud hooks来简化部署过程。对于多开发功能,建议使用tugboat。这些设置提供的部署过程使用一些标准git命令创建工件构建。这些更改仅提交到Acquia的git存储库,而不是您的“源存储库”,即在您进行编码更改时创建的存储库。
general
“General”为您提供了最基本的部署,将工件构建提交到源存储库下的新分支,该分支遵循命名约定deploy-{BRANCHNAME}
。例如,如果您的分支名称为test
,您将在deploy-test
分支中有一个工件构建提交。
docroot
此设置应设置为您的Drupal安装所在文件夹。这应该与extra.drupal-scaffold.locations.web-root
中的设置相匹配。这通常是Pantheon的web
或Acquia的docroot
,但也可能是像public_html
这样的通用主机上的任何东西。
artifact_workspace
此设置移动构建工件的位置。当您想从构建中选择项目,而不是将整个工件发送到主机时,这尤其有用。~/project
目录始终提交到“工件构建”。因此,通过将此目录更改为类似/tmp/project
的东西,您可以使用rsync将先前构建脚本构建的部分移动到~/project
。默认情况下,此设置的值是~/project
,因此所有在“构建”作业期间构建的内容都会推送到主机。
其他配置
有一些配置无法通过API调用进行更改,如果您想临时或永久更改它们,则需要直接修改config.yml。
persisting_dirs
这些目录将从工作流程的构建部分完整复制到部署部分。您可能还想包括像node_modules
、simplesaml
或private
这样的其他根目录。我们排除大多数顶级目录,因为它们在托管系统本身中不需要。
可配置环境变量
可以使用CircleCI环境变量界面配置环境变量,或者您可以直接在.circleci/config.yml
中设置它们。在界面中更改它们会使升级.circleci/config.yml
时出现的问题更少,但它会隐藏您可能正在使用的某些开关。根据最佳实践,请确保任何密钥都在CircleCI UI中配置。我们还将所有必需的环境变量以此方式包含在内。
共享
-
GITHUB_TOKEN
:必需 GitHub访问令牌,以便机器人用户可以对提交或PR进行评论,并删除不需要的多开发版本。 -
SITE_NAME
:用于运行terminus/acli命令的Pantheon或Acquia站点ID。默认为GitHub存储库名称。 -
GIT_EMAIL
:用作构建工件提交者的任意电子邮件。默认为bender@fourkitchens.com
-
CANONICAL_ENV
:从中获取规范数据库和文件的环境。可能的值- Acquia:dev、test、prod
- Pantheon:dev、test、live
默认值:在Acquia上为“prod”。在Pantheon上为“live”
-
SANITIZE_SCRIPT
:用于清理数据库的脚本。仅在CANONICAL_ENV
不是dev时使用。没有默认值。 -
SYNC_CONFIG
:启用或关闭配置同步的能力。默认情况下,如果./config目录(包括)中的任何目录包含system.site.yml
,则为是。例如:如果存在./config/system.site.yml
或./config/default/system.site.yml
或./config/sync/system.site.yml
,则为是。可能的值是YES
或NO
。
Pantheon 专用
TERMINUS_TOKEN
:必需 Pantheon机器令牌。CI_BUILD
:在Pantheon上的每次提交上构建CI多开发版本。这样您就可以得到ci-*环境。这可能对视觉回归测试或没有PR的工作流程很有用。默认值为NO
。可能的值是YES
和NO
。MAIN_BRANCH
:定义从哪个主分支切割发布。如果分支存在,默认值为main
,否则为master
。DEVELOPMENT_BRANCH
:定义在GitHub上发生积极开发的开发分支。此分支在gitflow开发模式中使用得最多。默认值为develop
。REBUILD_MULTIDEV_ENV_EVERY_PUSH
:每次将内容推送到Pantheon时,都会重新同步多开发版本的内容。默认值为NO
。可能的值是YES
和NO
。REBUILD_DEVELOPMENT_ENV_EVERY_PUSH
:每次将内容推送到DEVELOPMENT_BRANCH
分支时,都会重新同步GitHub开发多开发版本的内容。默认值为NO
。可能的值是YES
和NO
。DEVELOPMENT_ENV
:定义用于GitHub开发分支的多环境名称。必须遵循Pantheon的多环境命名规范。默认为github-dev
。
Acquia 专用
ACQUIA_REPO
:必填 Acquia git仓库地址。例如:sitename@svn-21939.prod.hosting.acquia.com:sitename.git
。ACQUIA_REALM
:必填 Acquia Cloud API域。通常是"prod"或"devcloud"。见文档。默认为prod
。
辅助环境变量
这些环境变量不可配置。它们被设置为帮助您在自己的环境中开发脚本。其中一些包含之前提到的管道参数的值。
HOST_VARIANT
:包含由host-variant管道参数提供的值。DATE_TIMEZONE
:包含由tz管道参数提供的值。DOCROOT
:包含由docroot管道参数提供的值。TERM
:"xterm"。
配置 composer.json
有两个脚本,默认脚本需要您构建,以便在整个项目中重复使用。您必须在项目中能够运行以下命令。
composer run lint
composer run code-sniff
请参阅依赖关系部分以获取示例。
配置脚本
此框架提供的几乎所有操作都是可重载的。只需在.circleci/scripts
的正确位置提供一个脚本,您就可以使此工具执行任何所需的步骤。我们在本存储库的脚本部分提供了一个默认的操作集,您可以基于这些操作编写自定义脚本。
可重载的脚本如下
test/static
:提供静态代码测试,如代码风格检查和代码标准验证。默认情况下,它运行composer run lint; composer run code-sniff
build/php
:提供构建应用程序的功能。默认情况下,这只是优化一个已准备好的依赖项安装。build/theme
:提供构建自定义主题的功能。默认情况下,它运行npm run theme-build
并遍历$DOCROOT/themes/custom
,对每个.gitignore执行“cut”操作,因此您可以在编码时提供一个应忽略的项目列表,以及构建工件时忽略的项目列表。deploy
:将工件构建推送到远程托管环境的所有操作。在Pantheon上,这包括创建和构建多环境。在Acquia和通用托管上,这仅将工件代码推送到其应存在的仓库。
Pantheon 专用脚本
drush-commands
:提供基本的部署drush命令,用于运行更新钩子、清除缓存和同步配置。drush-config-import
:提供导入配置的命令。默认情况下,这提供了drupal 8+的命令,如drush cim
,但可以替换为类似drush fra
的东西,如果使用drupal 7或具有基于功能的网站配置设置。post-drush-commands
:某些网站可能需要更改外部系统,如solr、第三方缓存,或希望运行drush deploy:hook
以允许drush运行某些后部署清理代码HOOK_deploy_NAME()
。见Drush文档。deploy-to-test
:提供将更改部署到预发布环境的逻辑。默认情况下,它提供“部署”服务,将实时同步到测试环境,并进行标准部署。deploy-to-live
:提供将更改部署到生产环境的逻辑。默认情况下,它提供备份服务、“部署”服务以及标准部署。
自动安全更新。
POTS包含自动查找安全更新并将它们安装到不同贡献项目的步骤和脚本。
这个项目是利用CircleCI管道参数触发的CI作业来运行检查和安全更新的脚本构建的。
为了能够重复触发,我们有几种选择
- Evercurrent(推荐)
- CircleCi触发接口
为了使自动安全更新适用于我们的项目,我们需要按照以下步骤操作
- 创建一组新的SSH密钥,以便将更改推回GitHub(GitHub部署密钥)
- 配置Zendesk集成(环境变量 - 已在顶部文档化)
- (可选)配置IA集成(Open IA)
设置密钥的步骤
当在项目上配置持续集成时,CircleCI会生成一组SSH密钥,并将私钥自动添加到CircleCI,公钥添加到GitHub。这样,CircleCI将能够访问GitHub上的仓库,但这种访问只是只读的。最初,对于POTS,这种访问就足够了,因为它只需要读取GitHub上的仓库,并在托管网站的平台(Acquia、Pantheon、Platform等)上写入。
随着AutoSec的到来,这组SSH密钥不再足够,因为AutoSec需要读取仓库、执行安全更新并将更改发送到GitHub,因此从AutoSec开始,需要具有读写权限的密钥。CircleCI不能生成具有写入权限的密钥,因此需要外部创建一组SSH密钥并将其手动添加到CircleCI和GitHub。
- 密钥可以通过在控制台通过此指南中的命令生成,或者也可以通过1password生成。
- 将私钥添加到CircleCI:在“项目设置 -> SSH密钥 -> 其他SSH密钥”中操作。
- 将公钥添加到GitHub:在“项目设置 -> 部署密钥”中操作。
设置 IA 密钥的步骤
AutoSec已开发用于使用IA并获取其自动更新的软件包的一些功能测试。这些步骤已添加到PR文档中,从而为执行测试的开发者提供重要信息。
AI实现是通过ChatGPT API完成的,因此需要生成并添加到CircleCI中的一个密钥。重要的是要说明,使用此密钥每次请求都有成本,因此配置此密钥是完全可选的,系统是制作来检查是否配置了密钥,它向ChatGPT请求步骤,如果没有配置密钥,它不会进行任何请求。
- 生成新的API密钥,导航到OpenIA页面并登录,选择API控制台。
- 在左侧边栏中导航到“API密钥”(悬停在OpenIA标志上)。
- 单击“创建新秘密密钥”按钮并复制哈希码。
- 将API密钥添加到CircleCI,导航:在“项目设置 -> SSH密钥 -> 环境变量”中操作。
- 单击“添加环境变量”按钮。
- 变量名必须是:
OPENAI_API_KEY
,并将步骤3中复制的哈希码粘贴到值中。