标签: github-actions

Github Actions 中的 If 或条件

我一直在尝试在 Github actions 中构建 CICD 管道,但我们无法在其中处理 if 和 or 条件。下面是我们的代码片段的示例,

    name: Build Non prod
    needs: [rules]    
    if: ${{ (needs.rules.outputs.branch_name != 'production') || (needs.rules.outputs.branch_name != 'staging') }}
    steps:
      - name: Checkout
        uses: actions/checkout@v2
Run Code Online (Sandbox Code Playgroud)

因此,此任务不应在分支中运行productionstaging但是当操作在staging分支中运行时,此作业也会与不适合staging环境的其他作业一起被触发。

有什么办法可以拥有ifor条件吗?

更新:

该条件将不起作用,更新后的条件将起作用。

if: ${{ (needs.rules.outputs.branch_name != 'production') && (needs.rules.outputs.branch_name != 'staging') }}
Run Code Online (Sandbox Code Playgroud)

github github-actions cicd

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

Github Actions:检查步骤状态

我在 CI 的工作中有一些可能会引发错误的步骤。我不希望在出现错误的每一步都重新启动工作流程,并希望转到检查这些步骤的最后一步并以失败的方式完成此工作。但我无法在之前的步骤中获取状态信息。

name: CI
on: [pull_request]
jobs:
  myjob:
    runs-on: ubuntu-latest
    steps:
      - name: Step 1
        id: hello
        run: <any> 
        continue-on-error: true
      - name: Step 2
        id: world
        run: <any> 
        continue-on-error: true
      - name: Check on failures
        if: job.steps.hello.status == failure() || job.steps.world.status == failure()
        run: exit 1
Run Code Online (Sandbox Code Playgroud)

当我在“if”或“run”中使用下一个构造时,将得到:steps -> {}, job.steps -> null。

如何获取状态信息?

github-actions

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

GitHub Actions CI 条件正则表达式

我正在尝试将我的 CI 工作流程从 CircleCI 转移到 GitHub Actions。我面临的最后一个主要问题是部署。

目前我的工作流程是这样的,当我将标签推送到我的 GitHub 存储库时,它将运行测试,然后运行部署。唯一的一点是CircleCI过滤如果标签的正则表达式匹配的标签,只运行作业:/v[0-9]+(\.[0-9]+)*/

在运行部署之前,如何检查以确保我推送的标签与上面的正则表达式模式匹配?

我目前有以下 GitHub 操作 yml 文件:

name: CI
on: [create]

jobs:
  # ...

  deploy:
    runs-on: ubuntu-latest
    if: github.event.ref_type == 'tag' && github.event.ref == SOMETHING HERE
    steps:
      - uses: actions/checkout@v1
      # ...
Run Code Online (Sandbox Code Playgroud)

if块下,我需要改变github.event.ref == SOMETHING HERE成为别的东西。我查看了 GitHub 操作文档页面的上下文和表达式语法。但是由于 GitHub Actions 的灵活和强大,似乎应该有一种方法或方式来做到这一点,或者至少是某种类型的解决方法。

如何确保标签 ( github.event.ref) 与正则表达式模式 ( /v[0-9]+(\.[0-9]+)*/)匹配?

github github-actions

18
推荐指数
3
解决办法
6227
查看次数

如何获取触发 GitHub 操作的事件类型?

我正在用 JavaScript 编写自定义操作。

在我的 GitHub 操作中,我想根据触发它的事件类型做出决定。例如,它是推送还是 cron 作业。

如何使用 GitHub Actions Toolkit 访问此信息?

github-actions

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

发布创建和发布之间的 Github Action 不同

由于Github Release s 实际上是一个Git Tag s,我想package.json在有新的 Release (和标签)时使用Github Action自动升级我的版本。

我知道我需要触发 a job on: release,但是根据Github Actions 文档,我不知道我是否需要触发 when createdpublished, both or all?

Github 说:

注意:发布release不会触发该事件draft

我创建了两个管道:一个on: release, type: created和一个on: release, type: published

然后我创建了一个draft版本,然后我发布了它。

只有published管道触发,而且是在我发布版本的时候。

versioning git-tag npm package.json github-actions

18
推荐指数
2
解决办法
2416
查看次数

如何在 GitHub Actions 中使用 env 文件?

我有多个环境(dev、qa、prod),我使用 .env 文件来存储机密等......现在我要切换到 GitHub Actions,我想使用我的 .env 文件并将它们声明到env部分github 操作 yml。

但从我目前所见,似乎我无法设置文件路径,我必须手动重新声明所有变量。

作为最佳实践,我应该如何进行?

github environment-variables github-actions

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

什么是 github 操作分钟/月?

你能否给出一个明确的解释,也许是一个例子,github当说一个计划包括时是什么意思2000 actions minutes/month?如果我执行 agit pull这算作一个动作吗?行动如何与分钟联系起来?我从 repo 中提取一些提交所花费的时间会计入我拥有的分钟数吗?

我知道 SO 答案(像这样)可能会告诉某人如何计算剩余时间,但我真的不明白什么是动作。

例如,假设我有一个包含一些 python/js 代码的存储库,并且我开始在一个新系统上工作。当我git pull在这个新系统中克隆我的存储库时,后台是否有任何操作被消耗?我是否会消耗我的计划中的任何时间?这是我没有澄清的,可能需要一些简单的例子来演示。谢谢!

github github-actions

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

如何自动合并 dependentabot 更新(配置版本 2)?

在“Dependabot 正在原生迁移到 GitHub!”之后,我必须更新我的 dependentabot 配置文件以使用版本 2 格式。

我的.dependabot/config.yaml确实看起来像:

version: 1
update_configs:
  - package_manager: "python"
    directory: "/"
    update_schedule: "live"
    automerged_updates:
      - match:
          dependency_type: "all"
          update_type: "all"
Run Code Online (Sandbox Code Playgroud)

我有以下工作:

version: 2
updates:
- package-ecosystem: pip
  directory: "/"
  schedule:
    interval: daily
Run Code Online (Sandbox Code Playgroud)

但我似乎无法再次添加自动合并选项(在使用dependentabot 验证器检查时)?

python yaml github github-actions dependabot

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

使用 Github 注册表中的 Docker 镜像未经授权

  • 我在本地创建了 Docker 镜像
  • 将其标记为 Github Docker 注册表
  • 将其推送到 Github Docker 注册表

现在我想在 Github 操作中使用它来在FROM现场创建 Docker 映像,但它总是失败并出现unauthorized错误 - 为什么?

步骤如下:

docker tag my_image:1.0 ghcr.io/<github_user>/<organization>/<repo_name>/my_image:1.0

docker push ghcr.io/<github_user>/<organization>/<repo_name>/my_image:1.0
a4f566342e89: Pushed
0378d9143186: Pushed
...
f337026e7d90: Pushed
Run Code Online (Sandbox Code Playgroud)

如您所见,一切都成功完成,我什至可以docker pull在我的计算机上完成

然后我设置 Github 操作并将其设置为启动 Powershell 脚本,该脚本从此 Dockerfile 创建 Docker 映像:

所以Github动作设置为:

...
...
jobs:

  build:

    runs-on: windows-2019

    steps:
    - uses: actions/checkout@v2
    - name: Package with Docker and push to Github packages
      id: build_and_push_docker_image    
      env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}    
      run: | …
Run Code Online (Sandbox Code Playgroud)

docker github-actions

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

自定义 Github 拉取请求的松弛通知

我有一个用例,其中每次针对开发分支提出拉取请求时,都需要向 slack 通道发送一条通知,其中包含 PR 链接以及可能有关哪个用户打开它的信息。

我很困惑该走哪条路

  1. 发布到 Slack 的 Github 操作
  2. slack 的 Github 应用程序(https://github.com/integrations/slack#configuration

在浏览完https://github.com/integrations/slack#configuration后,我看到了仅订阅拉取请求的选项/github subscribe org/repo pulls,但这不允许自定义(例如,仅通知 PR 开发,而不是每个 PR)

Github actions 有方法指定仅在为开发提出拉取请求时运行,但由于它是特定于存储库的,我必须将工作流文件推送到 100 多个存储库

当 PR 被提升(未合并)到特定分支并可自定义(例如添加打开 PR 的用户信息)时,是否有更好的解决方案/自动化发布到 slack?

github pull-request slack github-actions

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