在github操作中从ghcr.io中提取docker图像



我正在使用以下工作流代码(在github文档中找到)来构建一个docker映像并将其发布到github容器注册表。

name: Create and publish a Docker image
on:
push:
branches: ['release']
pull_request: 
branches: ['release'] 
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build-and-push-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Log in to the Container registry
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build and push Docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

这是有效的,我现在在";"包装";关于github回购。当我点击图片时,我会被引导到一个github页面,其中包含有关图片的更多信息(此处为官方文档):"从命令行安装:">docker pull ghcr.io/OWNER/IMAGE_NAME:pr-75

及其摘要sha:sha256:04ea7757e34c4fae527bbe6fb56eb984f54543f2313775572f0817d696ecf48a

我想向相同的工作流添加一个新作业,该作业使用ssh将映像拉到虚拟机。

deploy:
- name: Deploy to Digital Ocean droplet via SSH action
uses: appleboy/ssh-action@v0.1.4
with:
host: ${{ secrets.DO_HOST }}
username: root
key: ${{ secrets.DO_PRIVATE_SSHKEY }}
port: 22
script: |
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

失败的原因如下:err: invalid reference format: repository name must be lowercase(下降是不够的,继续读取)

当然,我不能硬编码docker pull ghcr.io/OWNER/IMAGE_NAME:pr-75或Digest sha,因为每个新分支的PR号都会增加,所以pr-75标签会更改。

如何部署刚刚发布的映像?似乎我可以使用标记值或sha,如何实时检索这些值?

以上工作流程中有两个作业:

  1. "构建并推送图像">
  2. "部署">

第一个使用docker/metadata操作来检索标签名称ghcr.io/OWNER/IMAGE_NAME:pr-75,该名称在使用docker/build推送操作时的下一步中用于命名图像。

我只是在第二个作业中再次使用了docker/metadata操作:

deploy:
needs: build-and-push-image
runs-on: ubuntu-latest
steps:
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@69f6fc9d46f2f8bf0d5491e4aabe0bb8c6a4678a
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Deploy to Digital Ocean droplet via SSH action
uses: appleboy/ssh-action@v0.1.4
with:
host: ${{ secrets.DO_HOST }}
username: root
key: ${{ secrets.DO_PRIVATE_SSHKEY }}
port: 22
script: |
docker pull ${{ steps.meta.outputs.tags }}

最新更新