我正在使用 Github Action 开发部署管道。 它应该构建一个 docker 映像并将其推送到 github 容器注册表,然后在 Azure 上拉取/启动该容器。
我使用 GITHUB_TOKEN 作为我的图像注册表凭据,一切正常。 问题是 GITHUB_TOKEN 的寿命很短。这意味着,映像启动良好,但在任何情况下,如果我必须在部署后重新启动容器或扩展,则 GITHUB_TOKEN 不再有效,并且 Azure 无法从注册表中提取映像。
我该怎么办? 我认为我唯一的选择是使用 PAT,但不建议这样做。 或者,也许忘记 Github 注册表,而使用 Azure 中的容器注册表?
我的情况一模一样。
每当从 GitHub Actions 触发到 Azure 应用服务的部署时,它都会正常工作。然而,当 Azure 尝试在某个(稍后)点拉取映像时,它会失败并显示:
Pulling image: ghcr.io/{ORG}/{IMAGE-NAME}
ERROR - DockerApiException: Docker API responded with status code=InternalServerError, response={"message":"denied"}
也许有一种方法可以将 $GITHUB_TOKEN 替换为 Azure 中配置的 GitHub 密钥,且该密钥的寿命不会太短。
这是我认为目前的实现方式(如果我错了,请纠正我): 每当 main 上有拉取请求时,GitHub 操作就会执行。它构建图像并将其作为包提供。它还调用 Azure 应用服务来获取新部署。 (效果很好)
Azure 有时会尝试从 GitHub 提取新版本的映像(即升级后、从空闲状态返回、重新启动等),但未经身份验证,因此它会收到来自 GitHub 的未经授权的响应。