@abgov/nx-oc
为艾伯塔省政府应用程序生成和应用OpenShift运单的Nx插件.
该插件为 CI/CD 管道设置和每个应用程序的部署配置提供发电机,并为运行提供执行器 oc apply 对抗 OpenShift 集群.
先决条件
- 打开Shift CLI (
oc(中文(简体) ) 安装和运行PATH - 活跃的 OpenShift 登录 :
oc login <url> --token=<token> - 为建设基础设施和每个运行时间环境(dev, test, prod)提供单独的 OpenShift 项目
安装
npm i -D @abgov/nx-oc
快速启动
# 1. Create workspace and install plugin
npx create-nx-workspace my-workspace
npm i -D @abgov/nx-oc
# 2. Login to OpenShift
oc login <url> --token=<token>
# 3. Generate pipeline infrastructure manifests
npx nx g @abgov/nx-oc:pipeline my-pipeline \
--infra my-infra-project \
--envs "my-dev my-test my-prod" \
--registry ghcr.io/my-org
# 4. Apply the generated infrastructure manifests to the cluster
npx nx g @abgov/nx-oc:apply-infra
# 5. Add deployment manifests to each application
npx nx g @abgov/nx-oc:deployment my-app --appType node --env dev
发电机
pipeline
生成一个CI/CD管道的OpenShift清单,包括在所有环境中使用的共享建设基础设施资源.
npx nx g @abgov/nx-oc:pipeline my-pipeline \
--infra my-infra-project \
--envs "my-dev my-test my-prod" \
--registry ghcr.io/my-org \
--type actions
| 选项 | 别名 | 需求 | 说明 |
|---|---|---|---|
pipeline | —— 说 | 对 | OpenShift 管道名称 |
infra | -i | 对 | 用于建设基础设施的 OpenShift 项目名称 |
envs | -e | 对 | OpenShift 环境项目(例如, "my-dev my-test my-prod"(中文(简体) ) |
registry | -r | 对 | 发布图像的集装箱登记册(例如:, ghcr.io/my-org(中文(简体) ) |
type | -t | 没有 | 管道类型 : actions (违约)或 jenkins |
apply | -a | 没有 | 生成后立即将生成的运算表应用到 OpenShift |
apply-infra
应用 OpenShift 基础设施列表 pipeline。没有选择——从工作空间读取生成的管道配置.
npx nx g @abgov/nx-oc:apply-infra
使用 apply-infra 后续行动 pipeline 当您想要推迟集群提供时,或者作为编辑生成的列表后重新应用的步骤.
deployment
将 OpenShift 部署表(部署,服务,路由等)添加到一个针对特定环境的现有Nx项目.
npx nx g @abgov/nx-oc:deployment my-app --appType node --env dev
| 选项 | 别名 | 需求 | 说明 |
|---|---|---|---|
project | —— 说 | 对 | 将部署单添加到 |
appType | -t | 对 | 应用程序类型 : frontend, (中文(简体) ), dotnet,或 node |
env | -e | 对 | ADSP环境: dev, (中文(简体) ), test,或 prod |
accessToken | -at | 没有 | 非交互检索 ADSP 配置的访问令牌 |
每个应用程序运行一次生成器。 对于典型的 三环境设置,运行三次 --env dev, (中文(简体) ), --env test,以及 --env prod。 。 。 .
deployment 写入 .openshift/<project>/<project>.yml· ; sandbox
写入 .openshift/<project>/<project>.sandbox.yml 和它并肩并肩 分享同样的
.openshift/<project>/Dockerfile (无论哪种方式都一样). 项目既可以有,也可以有
* 真正由CI驱动的管道部署和用于当地试验的沙盒——同样
时间;运行一个从不接触另一个的表。 每一个物体都使
携带一个 deployment-mode: pipeline编号 :sandbox 标签( 除了现有的 app 标签,
这么说 teardown-<env> 财务报告和审定财务报表 sandbox-teardown 对象的标签选择器删除永远无法
删除其它模式的资源, 即使它们曾经在同一命名空间降落 .
执行者 : apply
运行 oc apply 以部署应用程序的 OpenShift 运单。 配置为项目的目标 project.json数字 :
{
"targets": {
"deploy": {
"executor": "@abgov/nx-oc:apply",
"options": {
"ocProject": "my-dev-project"
}
}
}
}
然后运行 :
npx nx run my-app:deploy
选项
| 选项 | 需求 | 说明 |
|---|---|---|
ocProject | 对 | OpenShift 工程将应用到 |
ocProject 接受三种表格:
// Single project
{ "ocProject": "my-dev" }
// Multiple projects
{ "ocProject": ["my-dev", "my-test"] }
// Tagged deployments
{ "ocProject": [{ "project": "my-dev", "tag": "v1.2.3" }] }
沙盒部署(当地建筑)
对于快速迭代 sandbox 每件应用程序安装一个电线
图像 本地与 pockman,将其推入集装箱登记册(GHCR),以及
导入到您的 OpenShift 命名空间中 。 (要求
Nx23线, @abgov/nx-oc (13.x.) (中文(简体) )
sandbox 写入 .openshift/<project>/<project>.sandbox.yml,同时
deployment是因为 .openshift/<project>/<project>.yml ——两股
同样的 .openshift/<project>/Dockerfile (无论哪种方式都一样) 但永远不要碰
彼此显相. 一个项目可以同时进行——一个真正的CI驱动管道
部署和用于当地实验的沙盒——同时.
# Add the sandbox targets to a project (run once per app)
npx nx g @abgov/nx-oc:sandbox my-app --sandboxProject=<namespace> --registry=ghcr.io/<org>
# Build → podman → push → import → roll out
npx nx run my-app:sandbox
# Tear down the sandbox resources + delete the pushed image
npx nx run my-app:sandbox-teardown
先决条件: podman (机器启动于macOS), oc 登录到
组合,和 gh 认证为账户 write:packages 编辑
登记册(部署为: gh auth token 推和拉的秘密——不
PAT是存储的,所以账户必须是 活动 gh 账户).
部署是 @abgov/nx-oc:sandbox 执行器,因此其逻辑被版本化
在插件中( 定义到达每个工程 npm update) (中文(简体) ). 它会:
- 飞行前
oc编号 :gh编号 :podman并快速失败可操作信件 在建造之前; - 重试
oc import-image匀支oc tag调和种族; - 自动检测数据库 (从
adsp:database:*项目标签,或 细雨db:migrate和提供共享的Postgres/mongo实例+ 每个应用程序数据库+移入的容器——否--database需要旗帜; - (单位:千美元) 前端,确保每个对接后端的服务存在 警告时
如果后端没有运行的 pocks( 代理)
/api电话502;通过--deployBackend在同一运行中部署后端; - 支持
--skipBuild编号 :--skipPush改为 恢复 a 部分部署.
运行生成器也写着 .openshift/<app>/SANDBOX.md a 包括:
部署/分解程序簿(飞行前修正、恢复旗帜、人工完成)
(d) 程序、配额/自动/CrashLoopBackOff指导).
典型的工作流程
生产管道
- 运行
pipeline一旦每个工作区生成共享的建筑基础设施清单. - 运行
apply-infra(或通过)--apply改为pipeline(b) 为专题组提供资源. - 运行
deployment用于每个应用程序和环境组合. - 添加一个
apply每个应用程序的执行目标project.json。 。 。 . - 在您的 GitHub 行动或 Jenkins 管道,呼叫
npx nx run my-app:deploy以适用CI/CD期间的运单.
沙盒喷发
- 运行
sandbox每个申请,通过--sandboxProject财务报告和审定财务报表--database视需要而定. - 运行
npx nx run my-app:sandbox建设,推进,部署. 重复每个变化.