标签: github-actions

使用 github 操作从 monorepo 部署单个服务

我有大约 10 个单独的微服务,它们主要是用于各种数据处理作业的云功能,它们都位于一个 github 存储库中。

目标是在推送到分支时触发将这些服务有选择地部署到 Google Cloud Functions - 当单个功能已更新时。

我必须避免单个服务更新导致部署所有云功能的情况。

我当前的存储库结构:

/repo
--/service_A
----/function
----/notebook
--/service_B
----/function
----/notebook
Run Code Online (Sandbox Code Playgroud)

附带说明一下,使用 Github Actions VS Google Cloud Build 进行此类自动化的优缺点是什么?

continuous-integration github continuous-deployment google-cloud-build github-actions

22
推荐指数
3
解决办法
7653
查看次数

获取 github 操作中特定步骤的输出

我有这个运行测试的 GitHub 操作文件,但现在我正在其中集成松弛通知。我想获取该Run tests步骤的输出并将其作为消息发送到 slack 步骤

  - name: Run tests
    run: |
      mix compile --warnings-as-errors
      mix format --check-formatted
      mix ecto.create
      mix ecto.migrate
      mix test
    env:
      MIX_ENV: test
      PGHOST: localhost
      PGUSER: postgres

  - name: Slack Notification
    uses: rtCamp/action-slack-notify@master
    env:
      SLACK_MESSAGE: Run tests output
      SLACK_TITLE: CI Test Suite
      SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
Run Code Online (Sandbox Code Playgroud)

任何帮助都感激不尽。谢谢

github elixir github-actions

22
推荐指数
3
解决办法
2万
查看次数

github-action:IF 有 ELSE 吗?

在 github 操作中,我有一个 if,但如果我处于 else 情况下,我仍然需要运行其他东西。有没有一种干净的方法来做到这一点,或者我是否必须在 false 的相同条件下执行另一个步骤?

 - if: contains(['SNAPSHOT'],env.BUILD_VERSION)
   name:IF
   run: echo ":)"
 - if: false == contains(['SNAPSHOT'], env.BUILD_VERSION)
   name: Else
   run: echo ":("
Run Code Online (Sandbox Code Playgroud)

github-actions

22
推荐指数
5
解决办法
2万
查看次数

github-actions 中的 for、foreach 和其他循环

github-actions 中有一个“if”可用。

有什么办法可以使用循环吗?(对于、foreach、同时、...)

就像是

- foreach val in ['val1', 'val2']
Run Code Online (Sandbox Code Playgroud)

github-actions

22
推荐指数
2
解决办法
2万
查看次数

如何在 GitHub Actions 中缓存 yarn 包

我正在使用 GitHub Actions 来构建我的 TypeScript 项目。每次运行操作时,我都会等待 3 分钟以安装所有依赖项。

有没有办法缓存纱线依赖项,所以构建时间会更快?

我试过这个:

     - name: Get yarn cache directory path
       id: yarn-cache-dir-path
       run: echo "::set-output name=dir::$(yarn cache dir)"

     - uses: actions/cache@v1
       id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
       with:
         path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
         key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
         restore-keys: |
           ${{ runner.os }}-yarn-

    - name: Install yarn
      run: npm install -g yarn

    - name: Install project dependencies
      run: yarn
Run Code Online (Sandbox Code Playgroud)

但构建时间仍然相同。

typescript yarnpkg github-actions

22
推荐指数
4
解决办法
9992
查看次数

仅对非草稿拉取请求运行操作

我已将 Github 操作设置为在创建草稿拉取请求时跳过,但当拉取请求准备好供审核时不会触发它。当我起草 PR 从草稿更改为准备审查时,有什么方法可以运行该操作吗?

pull_request:
  types: ['opened', 'edited', 'reopened', 'synchronize', 'ready_for_review']

jobs:
 build:
    if: github.event.pull_request.draft == 'false'
    runs-on: ubuntu-latest
Run Code Online (Sandbox Code Playgroud)

pull-request github-actions

22
推荐指数
1
解决办法
1万
查看次数

如何在 github 复合操作步骤中动态设置环境变量?

我确实需要它作为一个环境变量,这是专门针对复合操作的。

在复合操作中,我尝试了许多不同的设置环境变量的方法。我发现做到这一点的唯一方法是在env步骤本身内部使用:

runs:
  using: "composite"
  steps:
    - name: "A step"
      env:
        BRANCH_REF: "${{ github.ref }}"
      run: echo "The branch is $BRANCH_REF"
      shell: bash
Run Code Online (Sandbox Code Playgroud)

不幸的是,我需要动态设置这个变量。在常规操作中,我会做类似的事情:

    env:
      FOO: "${{ secrets.FOO }}"
    #...
    - run: echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENV
      if: ${{ github.event.inputs.foo != '' }}
Run Code Online (Sandbox Code Playgroud)

因为我做不到,所以我尝试了很多其他方法,但都不起作用。这是我最近的尝试,但也不起作用:

    - name: "A step"
      run: |
        if ${{ github.event.inputs.foo != '' }}
        then
          echo "Set from manual input: ${{ github.event.inputs.foo }}"
          echo "FOO=${{ github.event.inputs.foo }}" >> $GITHUB_ENV
        else
          echo "Use FOO …
Run Code Online (Sandbox Code Playgroud)

github composite environment-variables github-actions

22
推荐指数
1
解决办法
3万
查看次数

Github 操作,在分支上调度操作

我正在尝试配置一个 github 工作流,我已经设法在推送事件上配置它。但是,如果我需要它在一段时间过去后继续运行怎么办?

我从文档中了解到,它可以使用时间表来实现。

name: Release Management

on: 
  schedule:
   - cron: "*/5 * * * *"
Run Code Online (Sandbox Code Playgroud)

如何指定操作将在哪个分支上运行?

我的最终目标是自动化发布。

git workflow github github-actions

21
推荐指数
1
解决办法
5460
查看次数

Github Actions - 在一个动作完成后触发另一个动作

我有一个操作(一个yaml文件)用于将 docker 映像部署到 Google Cloud Run。

我想接收通知构建和推送结果的 Slack 或电子邮件消息。

构建操作完成后如何触发消息操作?

是否有可能获得构建操作的结果?

github github-actions

21
推荐指数
4
解决办法
1万
查看次数

GitHub 操作 获取提交消息

所以我正在构建一个动作,为一个将进入 Netlify 的项目进行构建。在操作中,我可以传递部署消息。在该部署消息中,我想传入触发构建的提交的提交消息。我正在查看文档,但找不到这是否可行。谢谢

github-actions

21
推荐指数
5
解决办法
9246
查看次数