簡體   English   中英

在 github 操作中從 ghcr.io 拉取 docker 映像

[英]pull docker image from ghcr.io in github actions

我正在使用以下工作流代碼(在github 文檔中找到)來構建 docker 映像並將其發布到 Github Container Registry。

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 repo 的“Packages”下看到了一個公共 docker 圖像。 當我單擊圖像時,我會被定向到一個 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-action檢索標簽名稱ghcr.io/OWNER/IMAGE_NAME:pr-75 ,在下一步使用 docker /build-push-action時,該標簽名稱將用於命名圖像。

我在第二個工作中再次使用了 docker/metadata-action:

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 }}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM