是否可以在我的 shell 文件中使用 GitHub 机密?

Hos*_*lah 10 shell github github-actions

这是我在 GitHub 存储库上的简单操作:

name: CI

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Get /my_account/my_infra
        run: |
          sudo mkdir /my_account
          sudo chmod -R 777 /my_account
          cd /my_account
          git clone https://github.com/my_account/my_infra

      - name: Get /my_account/my_repo
        run: |
          cd /my_account
          git clone https://github.com/my_account/my_repo

      - name: Run my build script
        run: |
          cd /my_account/my_infra
          ./build.sh /my_account/my_repo
Run Code Online (Sandbox Code Playgroud)

由于 GitHub 不提供跨多个类似存储库重用操作的方法,因此我提出了创建一个基本存储库的想法,然后将该基本存储库与当前存储库一起下载,然后从该基本存储库运行自定义 shell 脚本,传递我当前的repo 作为参数。

这很完美。这样我就可以在许多类似的存储库中重复使用我的基础存储库。我可以重用近 500 行构建脚本,而不是为 50 个存储库重复自己(这意味着 25000 行 CI/CD 代码)。

但是,现在我需要访问一些资源(例如登录我的 docker hub 帐户)来拉取和推送内容。

是否可以在我的 中使用 GitHub secrets build.sh

Ber*_*nho 10

当您env在工作流程中进行设置时,请在此处进行设置,它们将被设置为容器化工作流程中的环境变量。

这意味着,如果您在存储库中设置了一个秘密,可以在settings=>下找到secrets,然后将其分配给env您的工作流程中的一个,然后可以在您的build.sh

例子:

name: CI

on:
  push:
    branches: [ main ]

env:
  super_secret: ${{ secrets.my_secret }}

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Get /my_account/my_infra
        run: |
          sudo mkdir /my_account
          sudo chmod -R 777 /my_account
          cd /my_account
          git clone https://github.com/my_account/my_infra

      - name: Get /my_account/my_repo
        run: |
          cd /my_account
          git clone https://github.com/my_account/my_repo

      - name: Run my build script
        run: |
          cd /my_account/my_infra
          ./build.sh /my_account/my_repo
Run Code Online (Sandbox Code Playgroud)

在这种情况下你build.sh可以这样做:

#!/bin/bash

npm run build $super_secret

Run Code Online (Sandbox Code Playgroud)


kof*_*ann 2

是的,你只需要把它们分配给一个变量,比如

env:
      ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
run: build.sh
Run Code Online (Sandbox Code Playgroud)

然后你可以在shell脚本中引用ACCESS_TOKEN变量。