使用jib-maven-plugin和GitHub Actions创建一个容器映像并将其部署到GitHub包中


我向Zenn发布了相同的内容。

概述

GitHub Actions是一种使用jib-maven-plugin创建容器映像并将其部署到GitHub Packages的方法。

使用jib-maven-plugin

构建容器映像

使用

jib-maven-plugin,可以在构建具有build目标的容器映像时进行推送(顺便说一句,如果要构建容器映像并将其保存到本地Docker,请使用dockerBuild目标) 。

build目标所需的某些值可以在系统属性中传递。

<表格>

项目

系统属性


<身体>

容器图片

jib.to.image

版本

jib.to.version

推送目标用户名

jib.to.auth.username

推送目标密码

jib.to.auth.password


命令的示例将在稍后显示。

为GitHub Actions

编写工作流程定义

源代码签出,Java设置,Maven本地存储库高速缓存等类似于典型的Java项目。

容器映像的构建和推送也使用Maven,因此它与典型的Java项目没有太大区别。
在设置上一节中描述的值的同时组装mvn命令。

按下

时的容器映像名称采用docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION格式,如配置Docker以与GitHub软件包一起使用。
推送目标用户名是GitHub帐户,密码是个人访问令牌。
正如我在有关将JAR部署到GitHub软件包的文章中所写的那样,GitHub Actions允许您从secrets上下文中以名称GITHUB_TOKEN获取个人访问令牌。

从上面开始,用于构建和推送容器映像的mvn命令如下(用户名为backpaper0,GitHub存储库名称为demorepo)。

1
2
3
4
5
mvn -B package jib:build \
    -Djib.to.image=docker.pkg.github.com/backpaper0/demorepo/demo \
    -Djib.to.version=latest \
    -Djib.to.auth.username=backpaper0 \
    -Djib.to.auth.password=${{ secrets.GITHUB_TOKEN }}

整个工作流程定义示例如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
name: Building container image with Jib

on:
  push:
    branches: [ master ]

jobs:
  build:
    name: Build container image
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - uses: actions/setup-java@v1
        with:
          java-version: 11

      - uses: actions/cache@v2
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-

      - name: Build by Jib
        env:
          CONTAINER_IMAGE: docker.pkg.github.com/backpaper0/demorepo/demo
        run: |
          mvn -B package jib:build -DskipTests \
              -Djib.to.image=$CONTAINER_IMAGE \
              -Djib.to.version=latest \
              -Djib.to.auth.username=backpaper0 \
              -Djib.to.auth.password=${{ secrets.GITHUB_TOKEN }}

这就是

的全部。