标签: github-actions

停止 GitHub Actions 中已运行的工作流/作业

我已经使用 GitHub Actions 设置了 CI。我的一个工作流程是由push事件触发的,但它(或该工作流程的作业)不应同时在多个实例上运行。

是否可以创建一个停止其他工作流程(或作业或不允许工作流程/作业并行运行)的作业?

我宁愿取消“旧”工作,而不是需要完成“新”工作,直到“旧”工作完成。

理想情况下,我还想在最后运行一个作业来完成“旧”作业。(〜保存未完成的状态)。这可以(但不一定)与“新”作业并行运行。

[注意] 我想取消另一个工作流程中的作业,或者取消另一个工作流程,而不是同一工作流程中的另一个作业。

continuous-integration github github-actions

8
推荐指数
1
解决办法
9124
查看次数

在 github actions 中使用特定的 docker 版本

我想使用 github actions 来测试sbt-native-packager docker 集成,它从 Dockerfile 构建 docker 镜像。

问题是 github actions 似乎使用旧的或自定义的 docker 版本。3.0.8被检测为版本。查看失败的集成测试运行,其中指出

[1]检测到的Docker版本DockerVersion(3,0,8,None)与DockerPermissionStrategy.MultiStage不兼容

我想使用最新的 docker 版本 19.x,它允许我们测试所有功能。理想情况下,我能够为不同的测试场景设置不同的 docker 版本,但如果有的话那就太好了。

更新

我的调试 docker github 操作的输出

docker version
Client:
 Version:           3.0.8
 API version:       1.40
 Go version:        go1.12.10
 Git commit:        2355349d
 Built:             Wed Oct 23 17:47:59 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          3.0.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.10
  Git commit:       adfac69
  Built:            Wed Oct 23 17:54:47 2019 …
Run Code Online (Sandbox Code Playgroud)

docker sbt-native-packager github-actions

8
推荐指数
1
解决办法
4742
查看次数

使用 GitHub 操作将 Angular 应用程序部署到 beanstalk

我有一个 Angular 应用程序,需要使用 GitHub Actions 将其部署到 Elastic Beanstalk。我遵循此指南按应用程序部署到 ELB。

我收到一个错误:

未给出文件名,部署现有版本 1

  • [错误] 部署失败:类型错误 [ERR_INVALID_ARG_TYPE]:“数据”参数必须是字符串、缓冲区、TypedArray 或 DataView 类型之一。接收类型未定义
  • [错误]节点运行失败,退出代码为 2

下面是我的main.yml文件

name: CI

on:
  push:
    branches:
    - dry-run-actions

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [10.x]

    steps:
      - uses: actions/checkout@v1

      # I'm removing the intermediate steps to make this code look shorter and these steps are running correctly.
      # In these steps I'm "Caching node_module", "npm install" and "npm run build"

      - name: Cache node modules …
Run Code Online (Sandbox Code Playgroud)

github-actions

8
推荐指数
1
解决办法
544
查看次数

Github 操作 - 任何运行步骤都没有此类文件或目录

我正在尝试为一个小型 Web 项目测试 Github Actions。我在存储库中有两个项目,我只想为 Web 客户端创建一个部署脚本。

存储库如下所示:

root
|
|-src
|  |-API
|  |
|  |-WebClient
|
|-docs
Run Code Online (Sandbox Code Playgroud)

我想在 WebClient 目录中运行脚本。当我尝试 cd 进入 ./src/webclient 时,出现错误no such file or directory

root
|
|-src
|  |-API
|  |
|  |-WebClient
|
|-docs
Run Code Online (Sandbox Code Playgroud)

“打开 Web 客户端目录”步骤的输出:

total 28
drwxr-xr-x 5 runner docker 4096 Oct 17 18:05 .
drwxr-xr-x 3 runner docker 4096 Oct 17 18:05 ..
drwxr-xr-x 8 runner docker 4096 Oct 17 18:05 .git
drwxr-xr-x 3 runner docker 4096 Oct …
Run Code Online (Sandbox Code Playgroud)

continuous-integration github github-actions

8
推荐指数
3
解决办法
6284
查看次数

错误:获取存储源时出错:generic::unknown... 当通过 GitHub Actions 部署 GCP Cloud Function 时

我正在通过此 GitHub Action部署 Firebase Cloud Function 。当我使用服务帐户从我自己的机器部署时,它工作正常。使用相同的服务帐户运行操作时,我遇到了以下错误。

最终错误:

错误:错误获取存储源:通用::未知:重试预算用尽(3次尝试):获取gcs源:从gcs解包源:源提取容器以非零状态退出:9

之前的日志:

未找到中央目录结尾签名。该文件不是一个 zipfile,或者它构成了一个多部分存档的磁盘。在后一种情况下,将在此存档的最后一个磁盘上找到中央目录和 zipfile 注释。解压缩:在 /tmp/source-archive.zip 或 /tmp/source-archive.zip.zip 之一中找不到 zipfile 目录,并且找不到 /tmp/source-archive.zip.ZIP,句号。

这是我的操作 yml:

name: Deploy
on:
  pull_request:
    branches: 
        - master

jobs:
  integration-test:
    name: Run tests
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: checkout repo and set up Node.js v12.x
      uses: actions/setup-node@v1
      with:
        node-version: 12.x
    - name: Install dependencies
      run: cd ./functions/ && npm install
    - id: deploy
      name: Deploy my_function to Cloud Functions
      uses: google-github-actions/deploy-cloud-functions@v0.1.2
      with:
        name: …
Run Code Online (Sandbox Code Playgroud)

github firebase google-cloud-platform google-cloud-functions github-actions

8
推荐指数
3
解决办法
2144
查看次数

在 GitHub Actions 中,如何在推送时触发,但前提是 PR 处于活动状态?

假设我有 2 个分支,一个功能分支和一个开发分支。

功能分支上通常没有 SLA,这意味着我可以整天将损坏的代码推送到它,并且不应触发 CI 构建。

然后我打开一个 PR 进行开发。我在 pull_request: created 上触发 CI 构建操作。假设这个构建失败了。默认情况下我无法合并 PR,这是正确的。

现在我想将编辑推送到功能分支以更新 PR。我希望这些推送触发 CI 构建(因为我们现在正在一个开放的 PR 中工作)。在这些 push-CI 通过之前,我不想让 PR 继续/合并。

我如何在 GitHub Actions 中做到这一点?我试过了,on pull_request: edited但这对我不起作用。

我正在寻找功能等价物:

on:
  push:
    if: inside_open_pr
Run Code Online (Sandbox Code Playgroud)

github github-actions

8
推荐指数
1
解决办法
3096
查看次数

使用 Compose 和 Github Actions 部署 Docker 容器

我正在使用GitHub Actions来触发我的dockerfile构建,它将容器上传GitHub Container Registry。在最后一步中,我通过SSH连接到我的远程DigitalOcean Droplet 并执行脚本以从 GHCR拉取安装新映像。这个工作流程对我很有用,因为我只在项目中构建了一个容器现在我正在使用docker compose,因为除了 API 之外我还需要 NGINX。我想保持在一个容器单滴,因为该项目目前对资源的要求不高。

在单个 VM 上使用 Github Actions 和 Docker Compose 自动部署到 DigitalOcean 的正确方法是什么?

我目前已知的选项是:

  • 跳过在 GHCR 上构建容器并通过 ssh 获取 repo 以通过执行生产组合文件从源开始构建远程
  • 在 GHCR 上构建每个容器,在远程复制生产撰写文件以从 GHCR 拉取和安装

如果您知道更多选择,这可能更清洁或更高效,请告诉我!

不幸的是,我找到了一个docker-compose with Github Actions for CI 问题以供参考。

单个容器的 GitHub 操作

name: Github Container …
Run Code Online (Sandbox Code Playgroud)

github docker digital-ocean docker-compose github-actions

8
推荐指数
1
解决办法
1369
查看次数

防止计划的 GitHub 操作被禁用

我是一些 Julia GitHub 存储库的维护者,这些存储库通过 cron 使用 GitHub Actions 进行夜间 CI 运行。其中一些软件包几个月都没有得到维护,但在生态系统中使用,我想让它们保持活跃。GitHub 的当前政策是在 60 天内没有发生存储库活动时禁用这些操作。

我想知道是否有定义什么存储库活动是为了防止操作被禁用。这是评论一个问题那么简单吗?还是需要将提交推送到主分支?

其次,有没有人找到保持存储库活跃的好解决方案?我正在考虑创建一个每 59 天运行一次的 Lambda 函数,并执行某种形式的存储库活动以保持活动状态。我只找到了这个HackerNews帖子,它提出了这个问题,但是没有评论:

默认情况下,在公共存储库的分支和连续 60 天没有活动的公共存储库中,计划工作流将被禁用。我们对 GitHub Actions 的使用政策进行了两项更改。这些变化将使 GitHub Actions 能够随着我们从 GitHub 社区看到的令人难以置信的采用而扩展。这是一个快速概述:

  1. 从今天开始,默认情况下将在公共存储库的新分支中禁用计划工作流。

  2. 在连续 60 天没有活动的公共存储库中,计划工作流将被禁用。

github github-api github-actions

8
推荐指数
2
解决办法
202
查看次数

如何在每次推送提交时在 GitHub 工作流中运行 commitlint

我有一个 Github 存储库,在本地安装了commitlint 和 husky,并希望在验证拉取请求时设置一个在每次推送提交时运行 commitlint 的工作流。在主分支上,较旧的提交不遵循传统的提交规则。

我根据此评论创建了一个单独的分支

https://github.com/conventional-changelog/commitlint/issues/586#issuecomment-657226800

我从这个工作流程开始

name: Run commitlint on pull request

on: pull_request

jobs:
  run-commitlint-on-pull-request:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0

      - name: Setup Node
        uses: actions/setup-node@v2
        with:
          node-version: 14.x

      - name: Install dependencies
        run: npm install

      - name: Validate all commits from PR
        run: npx commitlint --from HEAD~${{ github.event.pull_request.commits }} --to HEAD --verbose
Run Code Online (Sandbox Code Playgroud)

我按照传统的提交规则又做了两次提交并开始了拉取请求

  • 我预计工作流不会运行,因为我还不存在于主分支上。
    • 实际上它运行
  • 我期望工作流程只检查 PR 提交
    • 工作流失败,因为它开始验证主分支中的每个提交。而且因为我知道较旧的提交不遵守规则,所以这永远不会通过。

我想到的第一个解决方案是重新设置所有内容并重命名每个提交以遵循规则,但这需要付出巨大的努力。

我不确定我是否必须在这里改进这条线

npx commitlint --from HEAD~${{ github.event.pull_request.commits }} …

git push pull-request github-actions conventional-commits

8
推荐指数
1
解决办法
549
查看次数

使用带有 github 操作的 flutter web 时如何访问机密

我有一个flutter web应用程序,为了访问数据库,我在secrets.dart文件中硬编码了一个APIKey ,这工作得很好。我已将此文件添加到.gitignore以防止它推送到版本控制。但是当涉及到使用 GitHub 操作部署应用程序时,脚本失败,因为它没有检测到机密文件。

我确实从 Github上查看了关于Encrypted secrets的文档,它基本上允许存储机密。但似乎这些机密只能在 yml 文件中访问。

我想知道如何在我的应用程序中使用这个秘密,以便我的脚本成功运行并部署应用程序。这是我的文件夹结构

lib/
  services/
     database.dart /// this file uses the APIkey from secrets.dart
  secrets.dart /// contains the APIkey
Run Code Online (Sandbox Code Playgroud)

我能想到的解决这个问题的一种方法是使用.env文件,但我不太熟悉如何通过 CI 脚本在 .env 文件中添加密钥。我相信这也能解决我的问题。

这是我的 CI 脚本

# This file was auto-generated by the Firebase CLI
# https://github.com/firebase/firebase-tools

name: Deploy to Firebase Hosting on merge
"on":
  push:
    branches:
      - master
jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-java@v1
        with:
          java-version: "12.x" …
Run Code Online (Sandbox Code Playgroud)

secret-key web flutter github-actions

8
推荐指数
2
解决办法
1343
查看次数