标签: github-actions

如何在 Github Actions 中回显多行变量?

感谢github docs ,我已经存储了多行环境变量。

- name: copy
  run: |
     echo 'CONTENT_ENV<<EOF' >> $GITHUB_ENV
     cat README.md >> $GITHUB_ENV
     echo 'EOF' >> $GITHUB_ENV
Run Code Online (Sandbox Code Playgroud)

我想得到它,但是这段代码给出了一行:

 - name: paste
   run: echo $CONTENT_ENV > index.md
Run Code Online (Sandbox Code Playgroud)

工作流程显示变量正确存储在 env 中(带空格):

工作流程

variables github-actions

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

如何以安全的方式将 Github Secret 传递给 Dockerfile

我想在 github 操作的 docker 构建中设置 gcloud sdk。因此我需要将 service-account.json 传递给 dockerfile。

我知道我可以将构建参数传递给 dockerfile,当然我可以在这里传递 Github 秘密。但现在我听说了 Docker 秘密,它阻止了在 docker 日志中读取秘密。真的必须为秘密提供一条道路吗?我不想将秘密保存在存储库中,我更愿意使用 github 秘密。

那么,有什么想法可以将 gh 操作中的 github 秘密传递给 dockerfile 进行构建的最佳和最安全的方法吗?

docker docker-secrets github-actions

7
推荐指数
0
解决办法
2964
查看次数

如何在自己的 docker 容器内使用 github actions/checkout@v2

我有自己的 php 图像,我想将其用于我的项目来运行测试。

container: rela589n/doctrine-event-sourcing-php:latest

services:
  test_db:
    image: postgres:13-alpine
    env:
      POSTGRES_DB: des
      POSTGRES_USER: des_user
      POSTGRES_PASSWORD: p@$$w0rd

steps:
  - uses: actions/checkout@v2

  - whatever_needed_to_run_tests_inside_container
Run Code Online (Sandbox Code Playgroud)

结帐操作失败并出现以下错误:

EACCES: permission denied, open '/__w/doctrine-event-sourcing/doctrine-event-sourcing/6977c4d4-3881-44e9-804e-ae086752556e.tar.gz'
Run Code Online (Sandbox Code Playgroud)

这是合乎逻辑的,因为在新的 docker 容器中没有这样的文件夹结构。我想做的是在提供的虚拟机内运行结帐操作runs-on: ubuntu-20.04并为 docker 配置卷,以便它可以访问代码。但是我不知道这样做不是一个好的做法,也不知道如何实施。我想即使可以这样做,它也不适用于其他操作。

php containers github docker github-actions

7
推荐指数
1
解决办法
1549
查看次数

使用 docker/build-push-action 和 GitHub Actions 的生产 ENV 文件

docker/build-push-action创建发布标签时,我的 GitHub 操作中会运行以下作业。

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      -
        name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      -
        name: Login to DockerHub
        uses: docker/login-action@v1 
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_TOKEN }}
      -
        name: Build and push
        id: docker_build
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: user/repo:latest
      -
        name: Image digest
        run: echo ${{ steps.docker_build.outputs.digest }}
Run Code Online (Sandbox Code Playgroud)

在我的工作中Dockerfile,我有一项任务,需要完成.env.production并完成它.env

COPY .env.production .env
Run Code Online (Sandbox Code Playgroud)

这显然失败了,因为 .env.Production 不包含在 Git 中。

我的问题是,如何在我的 GitHub …

environment-variables docker dockerhub dotenv github-actions

7
推荐指数
1
解决办法
5282
查看次数

为什么我的 github 操作没有在正则表达式标签上触发

对于我第一次尝试 Github Actions,我需要基于 git 标签(例如 )来触发1.2.3-RELEASE,这似乎是很常见的事情。我可以找到这样的例子:

on:
  push:
    tags:        
      - v1             # Push events to v1 tag
      - v1.*           # Push events to v1.0, v1.1, and v1.9 tags
Run Code Online (Sandbox Code Playgroud)

所以我创建了这样的 yaml 文件:

on:
  push:
    tags: 
      - '[1-9]+.[0-9]+.[0-9]+\-RELEASE'

Run Code Online (Sandbox Code Playgroud)

但它永远不会着火。我使用在线工具验证了正则表达式,并尝试使用v1.1第一个示例设置的标签,无论带或不带引号都可以。我的表达需要引号,这很好,但不起作用。有人知道我在这里做错了什么吗?

tags github-actions

7
推荐指数
1
解决办法
3914
查看次数

如何获取用户名,负责触发 github actions 中的工作流程

我们有有关部署的通知,这些通知会发送到公司聊天室。当用户在本地运行代码时,会有一些信息来识别“谁运行代码”($USER、$HOSTNAME 等)。

当从 CI 触发相同的代码时,我想了解有关此工作流程的“原因是谁”的信息。可能是用户点击`workflow_dispatch'的github账户名,也可能是git中commit的author,也可能是author或PR等。

Github Actions 中的工作流程是否有此类信息?

github-actions

7
推荐指数
1
解决办法
9295
查看次数

你能暂停、禁用 Github Action 吗?

有没有办法将参数放入 GitHub 操作定义中,以便当您将其推送到 GitHub 时该操作不会运行?

\n

我有一个包模板,我想包含某些操作,但我不希望模板的用户必须执行某些操作才能运行这些操作(不会自动运行 \xe2\x80\x93 并失败 \xe2\当他们推送到 GitHub 时为 x80\x93)

\n

我希望有一个配置字段run_automatically: false或类似的东西。

\n

github github-actions

7
推荐指数
1
解决办法
3589
查看次数

如何在 github actions 中的作业之间共享 docker 镜像

我最近转向了 GitHub Action。尝试了几天,但可以找到合适的解决方案。

在此输入图像描述

  • JOB1我正在构建Image A并使用Image A作为基础图像来构建Image B.
  • 现在Image B将充当Image C在 JOB2 和Image DJob3 中构建的基础映像。

我已经尝试过这两种解决方案,但它们不起作用。

  1. https://github.com/docker/build-push-action/issues/225#issuecomment-727639184
  2. https://evilmartians.com/chronicles/build-images-on-github-actions-with-docker-layer-caching

尝试上述解决方案时遇到的一些错误:

Error: buildx failed with: error: failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
Run Code Online (Sandbox Code Playgroud)

github-actions

7
推荐指数
0
解决办法
1539
查看次数

github 操作排除来自分支的拉取请求

假设我有一个在每个要掌握的 PR 上运行的工作流程,其开头为:

on:
  pull_request:
    branches:
      - master
Run Code Online (Sandbox Code Playgroud)

如果 PR 来自分支机构,我想跳过所有工作depbot。就像是:

on:
  pull_request:
    branches:
      - master
    head_ref-ignore:
      - depbot

Run Code Online (Sandbox Code Playgroud)

我认为您可以使用跳过所有步骤(一次一个)

 if: startsWith(github.head_ref, 'depbot') == false
Run Code Online (Sandbox Code Playgroud)

但这不是我想要的,因为它仍然会启动这项工作。我怎样才能在启动阶段实现这一目标?

github pull-request github-actions

7
推荐指数
1
解决办法
6220
查看次数

如何将 Terraform 输出变量保存到 Github Action 的环境变量中

我的项目使用 Terraform 来设置 CI/CD 的基础设施和 Github Actions。运行后,terraform apply我想将 Terraform 输出变量的值保存为 Github Action 环境变量,以供工作流程稍后使用。

根据 Github Action 的文档,是使用工作流命令创建或更新环境变量的方法。

这是我简化的 Github Action 工作流程:

name: Setup infrastructure
jobs:
  run-terraform:
    name: Apply infrastructure changes
    runs-on: ubuntu-latest
    steps:
      ...
      - run: terraform output vm_ip
      - run: echo TEST=$(terraform output vm_ip) >> $GITHUB_ENV
      - run: echo ${{ env.TEST }}
Run Code Online (Sandbox Code Playgroud)

当本地运行时,命令echo TEST_VAR=$(terraform output vm_ip)输出准确TEST="192.168.23.23",但从 Github Action CLI 输出中我得到一些非常奇怪的东西:

在此输入图像描述

我尝试过使用单引号、双引号。在某些时候我改变了策略并尝试使用jq. 因此,我添加了以下步骤,以便将所有 Terraform 输出导出到 json 文件并使用以下命令解析它jq

- …
Run Code Online (Sandbox Code Playgroud)

continuous-integration json environment-variables terraform github-actions

7
推荐指数
2
解决办法
8213
查看次数