我一直在尝试在 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)
因此,此任务不应在分支中运行production,staging但是当操作在staging分支中运行时,此作业也会与不适合staging环境的其他作业一起被触发。
有什么办法可以拥有if和or条件吗?
更新:
该条件将不起作用,更新后的条件将起作用。
if: ${{ (needs.rules.outputs.branch_name != 'production') && (needs.rules.outputs.branch_name != 'staging') }}
Run Code Online (Sandbox Code Playgroud) 我在 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。
如何获取状态信息?
我正在尝试将我的 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]+)*/)匹配?
我正在用 JavaScript 编写自定义操作。
在我的 GitHub 操作中,我想根据触发它的事件类型做出决定。例如,它是推送还是 cron 作业。
如何使用 GitHub Actions Toolkit 访问此信息?
由于Github Release s 实际上是一个Git Tag s,我想package.json在有新的 Release (和标签)时使用Github Action自动升级我的版本。
我知道我需要触发 a job on: release,但是根据Github Actions 文档,我不知道我是否需要触发 when created,published, both or all?
Github 说:
注意:发布
release不会触发该事件draft。
我创建了两个管道:一个on: release, type: created和一个on: release, type: published。
然后我创建了一个draft版本,然后我发布了它。
只有published管道触发,而且是在我发布版本的时候。
我有多个环境(dev、qa、prod),我使用 .env 文件来存储机密等......现在我要切换到 GitHub Actions,我想使用我的 .env 文件并将它们声明到env部分github 操作 yml。
但从我目前所见,似乎我无法设置文件路径,我必须手动重新声明所有变量。
作为最佳实践,我应该如何进行?
你能否给出一个明确的解释,也许是一个例子,github当说一个计划包括时是什么意思2000 actions minutes/month?如果我执行 agit pull这算作一个动作吗?行动如何与分钟联系起来?我从 repo 中提取一些提交所花费的时间会计入我拥有的分钟数吗?
我知道 SO 答案(像这样)可能会告诉某人如何计算剩余时间,但我真的不明白什么是动作。
例如,假设我有一个包含一些 python/js 代码的存储库,并且我开始在一个新系统上工作。当我git pull在这个新系统中克隆我的存储库时,后台是否有任何操作被消耗?我是否会消耗我的计划中的任何时间?这是我没有澄清的,可能需要一些简单的例子来演示。谢谢!
在“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 验证器检查时)?
现在我想在 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) 我有一个用例,其中每次针对开发分支提出拉取请求时,都需要向 slack 通道发送一条通知,其中包含 PR 链接以及可能有关哪个用户打开它的信息。
我很困惑该走哪条路
在浏览完https://github.com/integrations/slack#configuration后,我看到了仅订阅拉取请求的选项/github subscribe org/repo pulls,但这不允许自定义(例如,仅通知 PR 开发,而不是每个 PR)
Github actions 有方法指定仅在为开发提出拉取请求时运行,但由于它是特定于存储库的,我必须将工作流文件推送到 100 多个存储库
当 PR 被提升(未合并)到特定分支并可自定义(例如添加打开 PR 的用户信息)时,是否有更好的解决方案/自动化发布到 slack?
github-actions ×10
github ×6
cicd ×1
dependabot ×1
docker ×1
git-tag ×1
npm ×1
package.json ×1
pull-request ×1
python ×1
slack ×1
versioning ×1
yaml ×1