我正在使用以下工作流代码(在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,如何实时检索这些值?
以上工作流程中有两个作业:
- "构建并推送图像">
- "部署">
第一个使用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 }}