GitHub Actions:如何根据部署步骤输出动态设置环境 url?

2024-03-04

我发现关于一个非常好的 GitHub Actions 功能,称为环境 https://docs.github.com/en/actions/reference/environments。使用适当的语法也可以在 GitHub Action 中创建环境workflow.yml https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idenvironment像这样:

environment:
  name: test_environment
  url: https://your-apps-url-here.com

正如文档所述 https://docs.github.com/en/actions/reference/environments#creating-an-environment这是创建 GitHub Action 环境的有效方法:

运行引用不存在的环境的工作流 将使用引用的名称创建一个环境。

但在我当前的 GitHub Action 工作流程中,有一种方法可以动态设置url基于部署步骤输出?我有一个由 AWS 部署过程产生的动态 URL,我无法预先定义该 URL。


作业工作流程文档告诉我们还有一种在内部使用表达式的方法url field https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idenvironment:

environment:
  name: test_environment
  url: ${{ steps.step_name.outputs.url_output }}

现在想象一个ci.yml该工作流程文件使用 AWS CLI 将静态网站部署到 S3,其中我们使用 Pulumi 等工具在我们的 AWS 账户内动态创建 S3 存储桶。我们可以使用以下命令读取动态创建的S3 urlpulumi stack output bucketName。里面的部署步骤ci.yml那么可能看起来像这样:

  - name: Deploy Nuxt.js generated static site to S3 Bucket via AWS CLI
    id: aws-sync
    run: |
      aws s3 sync ../dist/ s3://$(pulumi stack output bucketName) --acl public-read
      echo "s3_url=http://$(pulumi stack output bucketUrl)" >> $GITHUB_OUTPUT
    working-directory: ./deployment

这里有两个关键点:首先我们应该使用id在部署步骤中定义一个步骤名称,我们可以通过以下方式轻松访问step_name反了environment:url。第二我们需要定义一个步骤输出 https://stackoverflow.com/a/57989070/4964553 using echo "s3_url=http://$(pulumi stack output bucketUrl)" >> $GITHUB_OUTPUT。在这个例子中我创建了一个变量s3_url。你可以更换pulumi stack output bucketUrl与您想要的任何其他命令或您使用的工具一起使用,它会响应您的动态环境 url。

还请务必添加一个http:// or https://为了防止出现这样的错误消息:

Environment URL 'microservice-ui-nuxt-js-hosting-bucket-bc75fce.s3-website.eu-central-1.amazonaws.com' is not a valid http(s) URL, so it will not be shown as a link in the workflow graph.

Now the environment定义在我们的顶部ci.yml可以访问s3_url我们的部署步骤的输出变量如下所示:

jobs:
  ci:
    runs-on: ubuntu-latest

    environment:
      name: microservice-ui-nuxt-js-deployment
      url: ${{ steps.aws-sync.outputs.s3_url }}

    steps:
      - name: Checkout
        ...

Using steps.aws-sync我们直接引用部署步骤,因为我们使用id。所附的.outputs.s3_url然后直接引用包含我们的 S3 url 的变量。如果您正确定义了所有内容,GitHub Actions UI 将在已完成的作业正下方呈现环境 URL:

这里还有嵌入示例项目中的完整工作流程 https://github.com/jonashackt/microservice-ui-nuxt-js/blob/main/.github/workflows/static-site-pulumi-aws-s3-deploy.yml.

Update: The set-output name=VARNAME::VALUE符号已弃用 https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/并产生以下输出(感谢 Rob 指出这一点!):

Warning: The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GitHub Actions:如何根据部署步骤输出动态设置环境 url? 的相关文章

  • git 仅克隆具有特定扩展名的文件

    有没有办法只克隆具有特定扩展名的文件 例如 只克隆 sh 文件 我知道我可以克隆整个文件 然后删除剩余的文件 但我不想浪费 谢谢 None
  • Github API:过早获取超出速率限制的问题

    我正在构建一个应用程序来获取问题和拉取请求 https developer github com v3 超过 1K 的 github 存储库 就像这样 curl i https api github com repos user repo
  • 通过 HTTP Post-Commit Hook 将 Github 连接到安全的 Jenkins

    我已经在我的测试服务器上使用 Github 插件设置了 Jenkins 我通过仅允许经过身份验证的用户 匿名用户没有任何权限 和安全连接来保护 Jenkins 不幸的是 Github 提供的提交后挂钩似乎不适用于我的情况 我尝试访问以下网址
  • 仅当上一步已运行时才运行 GitHub Actions 步骤

    我已经在 GitHub actions 中设置了一个工作流程来运行我的测试并创建测试覆盖率的工件 我的 YAML 文件的精简版本如下所示 name Build on pull request jobs build runs on ubunt
  • Github v3 API 让所有组织超过 100

    我正在尝试让所有组织项目通过 默认大小似乎是 30 而 100 似乎是每个请求的最大限制 但上面的链接仍然只返回前 100 项 即不是第 101 200 项 我也尝试过 http host api v3 organizations page
  • GitHub Atom - 删除编辑器中的中心线

    我刚刚下载了 GitHub Atom Editor 正在对其进行自定义 但我无法删除编辑器中间的那行 有人帮我看看如何删除那条线吗 该行由wrap guide 包提供 您可以使用以下选项来删除该行 Option 1 禁用换行指南包裹 去At
  • 合并/其他提交交错后的交互式变基

    我典型的 git 工作流程是从 master 分支中创建一个功能分支 进行小的提交 同时定期从 master 合并以跟上 然后我在 github 上打开一个拉取请求 当它被接受时我将删除该分支 我想以交互方式进行更多变基 但是当我这样做时
  • 如何使用多个 ssh 密钥 [重复]

    这个问题在这里已经有答案了 GitHub 用户 我是 github 的新手 并且在 git 设置方面遇到一些问题 我在 github 上有 2 个不同用户的帐户 并且我在系统上设置了 git 2 次 First ssh文件夹 像往常一样 包
  • GitHub Actions 使用从 shell 设置的变量

    Goal 在 GitHub Actions 中 从 shell 动态定义我的提交消息 name Commit changes uses EndBug add and commit v7 with message added on date
  • 通过 Github 桌面应用程序 (Windows) 推送到 Github 的提交未显示

    大约几个小时前 我通过 Github 网站创建了两个存储库 然后我转到 Github 桌面应用程序 并对这两个存储库分别进行了多次提交 我遵循的过程是 在 Github 网站上创建存储库 转到 Github 桌面应用程序 然后针对所选存储库
  • 在比较分支时,有没有办法在 GitHub 中“隐藏”合并提交? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我的 10
  • “此拉取请求包含必须解决的合并冲突。”

    我在 PR 中遇到了这个错误 但是当我git status它说nothing to commit working directory clean 那是在 PR 的分支上 On branch pr12 nothing to commit wo
  • github 存储库的本地缓存?

    我们使用 github 来管理我们的大量软件环境 我敢打赌 像许多其他组织一样 该存储库的绝大多数流量来自我们的办公室 考虑到这一点 有没有一种方法可以构建给定 github 存储库的本地缓存 但仍然具有云版本的保护 我在缓存代理服务器的模
  • 在 Eclipse (Spring Source) 中,Grails 始终以生产模式构建

    当在 Grails 项目中使用 Eclipse 时 战争的构建似乎陷入了生产模式 如果您想部署到附加的 tcServer 您只需右键单击您的项目 然后选择 运行方式 gt 在服务器上运行 如果您将 grails 项目设置为 dev 右键单击
  • 应用程序日志保存在哪里? [复制]

    这个问题在这里已经有答案了 可能的重复 Windows 上应用程序日志文件的存储位置 https stackoverflow com questions 1572934 where to store an application log f
  • 基于github仓库的本地仓库创建本地git仓库并保持更新

    我有一些基本的 git 知识 但我不知道如何实现这一点 我正在尝试克隆 github WordPress 入门主题下划线 https github com automattic s 这个想法是创建一个基本框架based 经过一些修改 在该存
  • 如何克隆 GitHub wiki?

    如何克隆 GitHub 存储库的 wiki 我知道它保存为单独的 Git 存储库 但我不记得路径了 我试过了 reponame wiki git and reponame git wiki 但两者都不正确 Append wiki git到存
  • 是否可以在我的 shell 文件中使用 GitHub 机密?

    这是我在 GitHub 存储库上的简单操作 name CI on push branches main jobs build runs on ubuntu latest steps name Get my account my infra
  • 运行 BFG Repo Cleaner 后如何更新/缩小 github 存储库的大小

    我已经清理了我的仓库BFG 回购清理器 https rtyley github io bfg repo cleaner 使用以下内容程序 https rtyley github io bfg repo cleaner usage git c
  • Github 下载文件夹为 zip

    如何为我的 Github 存储库的访问者提供一个链接 以将我的存储库的 builds 文件夹下载为 zip 文件 该文件夹包含应用程序所需的可执行文件 着色器和纹理 当然 我可以手动构建该目录的 zip 文件并将其添加到存储库中 但这会导致

随机推荐