Skip to main content

新服务脚手架

本指南只需 7 分钟即可完成,旨在展示 Port 中自助action的力量。

先决条件
  • 本指南假定您已拥有 Port 账户,并已完成onboarding process 。我们将使用Onboarding过程中创建的 "服务 "蓝图。
  • 您需要一个 Git 仓库(Github、GitLab 或 Bitbucket),您可以在其中放置我们将在本指南中使用的工作流/Pipelines。如果没有,建议创建一个名为 "Port-actions "的新仓库。

本指南的目标

在本指南中,我们将创建一个初始化新 Git 仓库的动作。 在现实中,开发人员可以用这样的动作来搭建新服务的脚手架。

完成这项工作后,你就会了解它如何使你的组织中的不同角色受益:

  • 开发人员可以轻松构建新服务。
  • 研发经理将能获得新服务的总体情况--有多少服务是由谁创建的。
  • 平台工程师将能够控制权限,确保只有相关人员才能创建新服务。

设置动作的前端

Onboarding

作为Onboarding流程的一部分,您的self-service tab 中应该已经有一个名为 "新服务脚手架 "的操作。在这种情况下,您可以将鼠标悬停在该操作上,单击右上角的"... "按钮,然后选择 "编辑":

然后,跳到Define backend type 步骤。

如果您跳过了***Onboarding培训,或者您想从头开始创建操作,请完成下面的 "创建操作的前端 "步骤。

Create the action's frontend
  1. 点击 "新建操作":

2.Port 中的每个操作都与一个蓝图直接相关。由于我们正在创建一个资源库,因此让我们使用onboarding 流程中为我们创建的 Service 蓝图。从下拉菜单中选择它。 3.像这样填写操作的基本细节,然后单击 "下一步":

4.下一步是定义动作的输入。当有人被用于此操作时,我们只希望他们输入新版本库的名称。点击 "新输入",像这样填写表格,然后点击 "创建":

说明
  • 我们将 "Required "字段设置为 "true",以确保在使用此操作时始终提供一个名称。
  • 由于这是一个名称,因此我们将类型设置为 Text,但请注意 Port 允许的所有不同类型的输入。
  • 在被用于Text输入时,您可以设置约束和限制以强制执行某些模式。

定义后端类型

现在我们来定义操作的后端。 Port 支持多种调用类型,根据您在入门过程中选择的 Git Provider,我们会为您选择其中一种。

在表格中填写您的 Values:

  • 用您的 Values 替换 OrganizationRepository 值(这是工作流将驻留和运行的位置)。
  • 将工作流命名为 portCreateRepo.yaml
  • 将 "忽略用户输入 "设置为 "是"。
  • 像这样填写表单的其余部分,然后单击 下一步:
重要

在我们的工作流中,cookiecutter 使用有效载荷作为输入。 为了避免向工作流发送额外的输入,我们省略了用户输入。

最后一步是自定义动作的权限。 为简单起见,我们将使用默认设置。 欲了解更多信息,请参阅permissions 页面。 点击 "创建"。

action的前端已准备就绪 🥳


设置action的后端

现在,我们要编写我们的操作将触发的逻辑。

重要事项 如果存放工作流程的 Github 组织与创建新版本库的组织不同,请在另一个组织中也安装 Port'sGithub app
  1. 首先,让我们创建必要的令牌和secret:
  • 访问Github tokens page ,创建一个包含 repoadmin:repo_hookadmin:org 范围的个人访问令牌(经典) ,然后复制它(从我们的工作流中创建 repo 需要此令牌) 。
SAML SSO 如果贵组织被用于 SAML SSO,则需要授权令牌。请遵循these instructions ,然后继续本指南。
  • 进入Port application ,点击右上角的"...",然后点击 "凭据"。复制您的 "客户 ID "和 "客户 secret"。

2.在工作流程所在的版本库中,在 "设置->secret和变量->操作 "下创建 3 个新secret:

  • ORG_ADMIN_TOKEN` - 您在上一步中创建的个人访问令牌。
  • PORT_CLIENT_ID - 从 Port 应用程序复制的客户端 ID。
  • PORT_CLIENT_SECRET` - 从 Port 应用程序复制的客户机secret。


3.现在,让我们创建包含逻辑的工作流文件。在.github/workflows下创建一个名为portCreateRepo.yaml的新文件,并使用以下代码段作为其内容(记得将第 19 行中的<YOUR-ORG-NAME>更改为您的 GitHub 组织名称):

Github workflow (click to expand)
portCreateRepo.yaml
name: Scaffold a new service
on:
workflow_dispatch:
inputs:
port_payload:
required: true
description: "Port's payload, including details for who triggered the action and general context (blueprint, run id, etc...)"
type: string
secrets:
ORG_ADMIN_TOKEN:
required: true
PORT_CLIENT_ID:
required: true
PORT_CLIENT_SECRET:
required: true
jobs:
scaffold-service:
env:
ORG_NAME: <YOUR-ORG-NAME>
runs-on: ubuntu-latest
steps:
- uses: port-labs/cookiecutter-[email protected]
id: scaff
with:
portClientId: ${{ secrets.PORT_CLIENT_ID }}
portClientSecret: ${{ secrets.PORT_CLIENT_SECRET }}
token: ${{ secrets.ORG_ADMIN_TOKEN }}
portRunId: ${{ fromJson(inputs.port_payload).context.runId }}
repositoryName: ${{ fromJson(inputs.port_payload).payload.properties.service_name }}
portUserInputs: '{"cookiecutter_app_name": "${{ fromJson(inputs.port_payload).payload.properties.service_name }}" }'
cookiecutterTemplate: https://github.com/lacion/cookiecutter-golang
blueprintIdentifier: "service"
organizationName: ${{ env.ORG_NAME }}
该工作流程使用 Port 的cookiecutter Github action 来构建新的资源库。

完成!动作已准备就绪,可以开始使用 🚀


执行操作

创建操作后,该操作将出现在 Port 应用程序的 "自助服务 "选项卡下:

  1. 点击 "创建 "开始执行操作。
  2. 输入新版本库的名称,然后点击 "执行"。弹出一个小窗口,点击查看详情:


触发 bitbucket scaffolder

要触发 Bitbucket scaffolder,您需要提供两个附加参数:

  • Bitbucket Workspace Name(Bitbucket 工作区名称)--要在其中创建新版本库的工作区名称
  • Bitbucket 项目密钥 - 要在其中创建新版本库的 Bitbucket 项目的密钥。
    • 要找到 Bitbucket 项目密钥,请访问 https://bitbucket.org/YOUR_BITBUCKET_WORKSPACE/workspace/projects/,在列表中找到所需的项目,然后复制在表中 Key 列看到的值
  1. 该页面提供了有关操作运行的详细信息。如您所见,后端返回了 Success 且 repo 已成功创建(这可能需要片刻时间):


记录操作进度 💡 注意底部的 "日志流",它可用于报告进度、结果和错误。 点击here 了解更多信息。

恭喜!您现在可以从 Port 💪🏽 轻松创建服务了。

可能的日常整合

  • 在研发频道中发送一条松弛消息,让每个人都知道创建了一项新服务。
  • 为管理人员发送周报/月报,显示该时间段内创建的所有新服务及其 Owner。

结论

创建服务并不只是开发人员的一项定期任务,而是每月都会发生的重要步骤。 然而,我们必须认识到,这只是我们努力为开发人员创造的更广泛体验的一个片段。 我们的最终目标是促进从构思到生产的无缝过渡。 这样做,我们的目标是消除开发人员在大量工具中穿梭的需要,减少摩擦并加快生产时间。 从本质上讲,我们并不只是在构建一个工具,而是在构建一个生态系统,使开发人员能够以最高的效率将新功能变为现实。