我正在学习本课程的 CI 部分,在学习过程中我无法弄清楚 main.yml 文件的以下部分是如何工作的:
- name: Log in to GitHub Packages
run: echo ${GITHUB_TOKEN} | docker login -u ${GITHUB_ACTOR} --password-stdin docker.pkg.github.com
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
我有这些参数,如 GITHUB_ACTOR 和 GITHUB_TOKEN,我没有将它们定义为代码的任何部分,也没有写入 GitHub 内的面板。
它们是 GitHub 自动填写的吗?
如果我更改令牌,此代码仍然有效吗?
这记录在“自动令牌身份验证”
在每个工作流程运行开始时,GitHub 会自动创建一个唯一的
密钥以在您的工作流程中使用。GITHUB_TOKEN
您可以使用在工作流程运行中进行身份验证。GITHUB_TOKEN
当您启用 GitHub Actions 时,GitHub 会在您的存储库上安装 GitHub 应用程序。
秘密是 GitHub 应用程序安装访问令牌。您可以使用安装访问令牌代表存储库上安装的 GitHub 应用程序进行身份验证。令牌的权限仅限于包含您的工作流程的存储库GITHUB_TOKEN
您有默认环境变量,包括:
:启动工作流程的人员或应用程序的名称。GITHUB_ACTOR
例如,。octocat
+-------------------------------------------------------------------------+
| Updated Workflow |
| |
| +----------------------+ +--------------------------------------+ |
| | main.yml | | GitHub | |
| | | | | |
| | | | +---------+ +--------+ +--------+ | |
| | | | | Secrets | | Tokens | | Actors | | |
| | - name: Log in to | | +---------+ +--------+ +--------+ | |
| | GitHub Packages | | | |
| | run: echo |<----| Automatically provided by GitHub | |
| | ${GITHUB_TOKEN} | | | |
| | | docker login | | | |
| | -u ${GITHUB_ACTOR} | | | |
| | --password-stdin | | | |
| | docker.pkg.github | | | |
| | .com | | | |
| | env: | | | |
| | GITHUB_TOKEN: | | | |
| | ${{ secrets | | | |
| | .GITHUB_TOKEN }} | | | |
| +----------------------+ +--------------------------------------+ |
+-------------------------------------------------------------------------+`
GITHUB_TOKEN
和其他秘密安全地存储在 GitHub 的服务器上。具体来说,它们在静态时被加密,并且只能由 GitHub Actions 运行者在工作流程执行期间访问。这些秘密在安全的环境中解密,这对于保护 CI/CD 流程中使用的敏感数据至关重要。您可以在“秘密”部分下的存储库设置中定义和管理自己的秘密。一旦设置,这些秘密将被加密,无法查看或编辑,只能删除或替换。
gh secret set
更新密钥的示例命令,然后将其加密存储在 GitHub 的服务器上:
gh secret set GITHUB_TOKEN -b "new-token-value"
如果我更改令牌,此代码仍然有效吗?
是的,如果您更改令牌,只要新令牌具有必要的权限,代码将继续工作。
GITHUB_TOKEN
文件中的 main.yml
引用将自动从 GitHub 机密中获取更新后的令牌。GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
行的结构是在每次工作流程运行时从 GitHub 机密中提取 GITHUB_TOKEN
的当前值。因此,如果您更新 GitHub 机密中的令牌,新值将在后续工作流程运行中使用。