我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

Creating and using encrypted secrets

Encrypted secrets allow you to store sensitive information, such as access tokens, in your repository.

GitHub 操作 is available with GitHub Free, GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. GitHub 操作 is unavailable for per-repository plans, which are legacy billing plans. For more information, see "GitHub's products."

Anyone with write access to a repository can create, read, and use secrets.

本文内容

About encrypted secrets

密码是仓库中创建的加密环境变量,只能被 GitHub 操作 使用。 GitHub 使用公钥验证的加密和 Poly1305 密码算法对 web 浏览器中的密码进行加密。 更多信息请参阅“TweetNaCl.js”文档。 为使密码用于操作,必须将密码设置为工作流程文件中的输入或环境变量。

GitHub 自动将密码编写到日志,但您应避免有意将密码打印到日志。

Creating encrypted secrets

密码名称不能包含任何空格。 To ensure that GitHub redacts your secret in logs, avoid using structured data as the values of secrets. For example, avoid creating secrets that contain JSON or encoded Git blobs.

  1. On GitHub, navigate to the main page of the repository.

  2. Under your repository name, click Settings.

    Repository settings button

  3. 在左侧边栏中,单击 Secrets(密码)

  4. 在 "Name"(名称)输入框中输入密码的名称。

  5. 输入密码的值。

  6. 单击 Add secret(添加密码)

要将密码传递给操作,请将该密码设置为工作流程中的输入或环境变量。 查看操作的自述文件以了解操作预期的输入和环境变量。 更多信息请参阅“GitHub 操作 的工作流程语法”。

Using encrypted secrets in a workflow

除了 GITHUB_TOKEN 以外,从复刻的仓库触发工作流程时密码不会传递给运行程序。

To provide an action with a secret as an input or environment variable, you can use the secrets context to access secrets you've created in your repository. For more information, see "Contexts and expression syntax for GitHub 操作" and "Workflow syntax for GitHub 操作."

steps:
  - name: Hello world action
    with: # Set the secret as an input
      super_secret: ${{ secrets.SuperSecret }}
    env: # Or as an environment variable
      super_secret: ${{ secrets.SuperSecret }}

密码的限制

Your workflow can have up to 100 secrets. The names of secret environment variables must be unique in a repository.

密码大小限于 64 KB。 要使用大于 64 KB 的密码,可以将加密的密码存储在仓库中,并将解密短语在 GitHub 上存储为密码。 例如,在将文件检入您在 GitHub 上的仓库之前,可以使用 gpg 在本地对您的凭据加密。 更多信息请参阅“gpg manpage”。

警告:请注意,您的密码在操作运行时不会印出。 使用此解决方法时,GitHub 不会编写日志中印出的密码。

  1. 从终端运行以下命令,以使用 gpg 和 AES256 密码算法对 my_secret.json 文件加密。

    $ gpg --symmetric --cipher-algo AES256 my_secret.json
  2. 将会提示您输入密码短语。 请记住该密码短语,因为需要在使用该密码短语作为值的 GitHub 上创建新密码。

  3. 在仓库中创建新密码来存储密码短语。 例如,使用名称 LARGE_SECRET_PASSPHRASE 创建新密码,并将密码的值设为上一步所选的密码短语。

  4. 将加密的文件复制到仓库并提交。 在本例中,加密的文件是 my_secret.json.gpg

  5. 创建 shell 脚本对密码解密。 将此文件另存为 decrypt_secret.sh

    #!/bin/sh
    
    # Decrypt the file
    mkdir $HOME/secrets
    # --batch to prevent interactive command --yes to assume "yes" for questions
    gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" \
    --output $HOME/secrets/my_secret.json my_secret.json.gpg
  6. 确保 shell 脚本在检入仓库之前可执行。

    $ chmod +x decrypt_secret.sh
    $ git add decrypt_secret.sh
    $ git commit -m "Add new decryption script"
    $ git push
  7. 从工作流程使用 step 调用 shell 脚本并对密码解密。 要在工作流程运行的虚拟环境中创建仓库的副本,需要使用 actions/checkout 操作。 使用与仓库根目录相关的 run 命令引用 shell 脚本。

    name: Workflows with large secrets
    
    on: push
    
    jobs:
      my-job:
        name: My Job
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v1
          - name: Decrypt large secret
            run: ./.github/scripts/decrypt_secret.sh
            env:
              LARGE_SECRET_PASSPHRASE: $
          # This command is just an example to show your secret being printed
          # Ensure you remove any print statements of your secrets. GitHub does
          # not hide secrets that use this workaround.
          - name: Test printing your secret (Remove this step in production)
            run: cat $HOME/secrets/my_secret.json

问问别人

找不到要找的内容?

联系我们