阅读 112

[译] 教学:如何使用实际按钮将应用程序部署到生产环境

原文 Tutorial: How to deploy an app to production with an actual button

如果你熟悉部署流程,那么你很有可能熟悉在推送到生产环境之前必须完成的一系列重复步骤。 这不是一个被描述为”有趣”的流程,但它仍然是一个重要的过程。

但是,如果我们可以使用一个真正的按钮来部署和发布一个应用程序呢? 在这篇文章中,我们将讨论如何制作自己的 “ship it” 按钮来部署一个新版本。

Ship it GIF

先决条件

为了跟进这个教程,你需要:

  1. 一个 AWS IoT Dash 按钮: 为了快速启动,我们将使用一个预制的物联网按钮,你可以在亚马逊上购买
  2. 一个 AWS 账户: 创建一个 AWS 账户。 即使你有一个 Amazon.com 账号,你也需要创建一个。 我们将使用 AWS Lambda 工具调用 GitHub API。

    注意: 此服务为您使用的数据收费。 您也可以从您的手机使用虚拟的 dash 按钮服务。 而且我们的指南中的代码可以连接到任何应用程序,而不仅仅是 AWS。

  3. 创建你的开发环境:在与 AWS Lambda 连接时,我们将使用Node.js 6.10。下载最新的 node 版本,或者只是用 Lambda 来开发
  4. 一个 GitHub 账户: 创建一个 GitHub 帐户。 它快速,简单,当然,是免费的
  5. 一个 GitHub API 访问令牌:产生一个一个个人访问令牌允许你在通过 API 或以其他方式使用 GitHub 时认证您是谁。 :

    • github.com/settings/to…
    • 点击生成新的令牌
    • 选择我们将用于教程的范围: repo_ deployment, write:packages, read:package

一旦你完成了所有的先决条件,就开始安装流程的其余部分。

步骤1: 编写 GitHub API 调用

使用 Node.js 调用 GitHub API 和 Octokit / rest.js程序库来包装 API 调用。 和其他任何程序库一样,Ocatkit 使用 GitHub REST API 端点ーー但它也允许我们使用 await、promise、和 callback 包装。 此外,我们可以在开始时进行身份验证,然后运行我们的调用。

让我们看一下我们将创建的

index.js

文件。

步骤 1a: 设置 Octopkit

在文件的顶部,我们包含了我们的 Octokit npm 套件:

const octokit = require('@octokit/rest')()
复制代码

Step 1b: Authenticating

步骤 1b : 认证

然后我们使用我们新创建的个人访问令牌与 GitHub 进行身份验证:

octokit.authenticate({
type: 'token',
token: process.env.GH_TOKEN
})
复制代码

步骤 1c: 设置事件处理程序

为了使用 AWS Lambda,我们需要一个处理程序来理解当按钮被点击时该怎么做。 我们添加了包装:

exports.handler = (event, context, callback) => {
console.log(`Received event: ${event}`)
let tag_name
const owner = process.env.GH_LOGIN
const repo = process.env.GH_REPO
}
复制代码

Step 1d: Retrieving and creating the latest release

步骤 1d: 取出并创建最新的版本

exports.handler函数中,你会发现releases。 GitHub Releases API 是一个隐藏的宝石,在 Repository API 下方。 您可以创建一个草案,预先发布,设置发布来源的分支,这一个 API 调用还有更多功能。

为了这个情况,我们将取得最新发布版本,并将其增加一个版号。 然后每次点击按钮,我们都会发布一个新版本

下面这两个方法都是Promises,一旦最新版本被取出,将会创建一个新的版本。 要做到这一点,我们需要我们的 GitHub 用户名,我们想要发布的 repository,以及一个将创建的tag_name。 我们可以添加一些可选的细节,但是这边都是最基本的设置:

 octokit.repos.getLatestRelease({
owner,
repo
}).then(result => {
tag_name = (parseInt(result.data.tag_name) + 1.0).toString() + '.0'

octokit.repos.createRelease({
owner,
repo,
tag_name
}, (error, result) => {
if (error) throw new Error()
if (result) console.log(`Created Release: ${JSON.stringify(result)}`)
})
})
复制代码

步骤 1e: 创建一个部署

除了创建一个发布版本,我们将通过调用 GitHub 部署 API 来开始部署。 我们可以通过指定登录帐号、repo、要部属的分支来实现这一目标:

 octokit.repos.createDeployment({
owner,
repo,
ref: 'master',
description: `Deploying ${tag_name} version`
}, (error, result) => {
if (error) throw new Error()
if (result) console.log(`Created Deployment: ${JSON.stringify(result)}`)
})
复制代码

一旦发布和部署方法在事件处理程序中,代码几乎就已经设置好了。 我们使用 Node.js,所以确保运行npm initnpm install @octokit/rest 来确保环境被设置好。

在这整个设置流程中一个 repository 已经创建好了,当我们需要在代码中调用时,你可以在步骤3中找到链接。 为了实际运行代码,让我们首先配置新的 AWS IoT 按钮。

步骤2: 配置 AWS 物联网按钮

要设置按钮,请按照 AWS 快速启动指南或者下载 AWS IoT Button Dev 应用程序,可以在 iOS 或者 Android 上使用。

一旦你的按钮配置了 WiFi,请随意测试 lambda 范例函数,比如发送文本或电子邮件。 接下来我们将创建一个新的函数。

步骤3: 设置 AWS Lambda 函数

一旦我们设置好 lambda 函数,我们就可以准备发布了! 浏览到 AWS Lambda 函数控制台

步骤 3a: 创建函数

在橘色中,你会看到一个”Create Function”按钮,不管你是在查看仪表板还是函数。 下面是详细的步骤,以走访这个流程。 如果你被卡住了,试着看看这段视频

  • 点击 Create Function Author from Scratch
  • 输入一个 “Name”
  • 确认运行环境是 Node.js 6.10
  • 在”Role” 底下,选择 Create new role from template(s)
  • 输入”Role Name”。 它可以和”Name”一样
  • 在”Policy Templates”下方,选择AWS IoT Permissions

步骤 3b: 添加按钮触发器

一旦你的函数被创建,你将看到它有一些我们可以配置的不同的设置。 我们将编辑函数的 “Designer”、”Function Code”和”Environment Variables” 等方面功能。 让我们从”Designer”开始。

  • 在”Designer”中添加 AWS 物联网触发器。 应该会出现 “Configure Triggers” 方框
  • 选择 IoT Button 作为物联网类型
  • 输入位于按钮背面的设备串行号
  • 确认检查 Enable the Trigger 后,然后单击添加

步骤 3c: 上传代码

现在我们已经设置了按钮触发器,我们需要确保代码是正确的。 我们将从步骤2中获取代码并上传 zip 文件。

如果你想使用你之前写的代码,请用zip -r ShipItButton.zip ./*将文件夹的根目录打包压缩。 否则你将会收到一个cannot find /index.js error的错误,除此以外用git clone https://github.com/ani6gup/ShipItButton.git复制 repository 的内容。 确保

ShipItButtonLambda.zip

文件是这个 repository 的内容复制。

一旦你有了 zip 文件:

  • 在”Designer”中按下”Function Name”方框以显示”Function Code”方框
  • 移动到”Function Code”
  • 在”Code Entry Type”下,选择Upload a .zip file
  • 上传你的文件后,点击”Save“。 你现在应该有能力作”Edit Code Inline”

步骤 3d: 加入环境变量

  • 移动到”Environment Variables”
  • 创建GH_LOGIN, GH_REPO, 和GH_TOKEN 为你的环境变量,设置你的 GitHub login,你希望发布的 GitHub repository,以及你先前创建的 GitHub 个人访问令牌

步骤 3e: 测试

现在我们准备用下面的步骤来测试我们的按钮:

  • 点击 Test,弹出名称为”Configure Test Event”的按钮
  • 选择 Hello World Event Template (Default)
  • 输入一个 “Event Name”
  • 点击 Create

当你点击 Test 前,你应该能够在你的 github repository 中看到新的发布版本,这些新的发布版本被创建有Created DeploymentCreated Release 的日志。

注意: 只有一个既有的发布版本存在数字格式(例如1.0),这个发布版本才会发挥作用

你可以查看你的新的发布版本是否创建在你的 repositoryurl / release 目录中。 检查日志以确保没有发生错误。 如果你看到{message: not found}{message: bad credentials} 检查你的 Github 个人访问令牌。

步骤4:点击按钮

现在回到”Configure Trigger Stage”,确保你的按钮已经设置好。 你应该可以点击这个按钮,并且得到和你测试时一样的结果。

接下来我们将详细讨论如何在不同工作流程中将你所触发的 GitHub 事件合并到一起。

步骤5(可选) : 在你的工作流程中集成

点击这个按钮会触发一个发布和部署ーー但是你怎么处理这些信息呢? 此时,您可以将其配置到你的工作流程或部署流程中。 下面的图表概述了如何在按钮或”Tooling”、 GitHub 和我们的服务器之间进行通信。

Tutorial__How_to_deploy_an_app_to_production_with_an_actual_button___The_GitHub_Blog

有几个部署服务和供应商可供选择。 在 GitHub,我们使用 Heaven 直接部署我们的聊天机器人Hubot。 一些公司甚至将其调整为自己的流程。 还有一些应用程序在 GitHub Marketplace,特别是帮助开发人员快速和简单的部署。

为了部署一个应用程序,我们使用 Probot,一个创建 GitHub Apps 的工具,并以一种快速简单的方式自动化您的工作流。 在这种情况下,它充当第三方来监听部署事件,并通过创建 issues 发回部署状态。

步骤5a (可选) : 使用 Probot 自制的部署服务器

该应用程序基于 GitHub 交付部署指南,但是修改为 Node.js,以为了要使用 Probot。

在这种情境下,bot 会监听特定的 GitHub 事件,这意味着当有人按下按钮来创建部署时,应用程序知道创建和推动新的 Buildー并提供部署状态。 这个按钮部署到 heroku ー他们的 Build 和Release API 允许我们推送 GitHub 发布包并立即从一个单独的 POST 请求中部署。

如果你想看一看或者自己试试,可以在the Deployment Status Bot repository中学习更多。

结论

虽然你可能不会透过单击一个实体按钮来定期将应用程序部署到生产环境中,但你总是可以触发这些 GitHub 事件来混合重复的部署流程。

如果你需要任何额外的资源或帮助,请随意浏览 GitHub 应用程序快速启动指南。 或者注册 GitHub 开发者程序,在 GitHub 平台论坛上提问。

更多 Soft & Share 分享内容


关注下面的标签,发现更多相似文章
评论