用GitHub Actions制作Docker镜像

  • 不提那些伤心事了,穷很难改变,习惯了就好,但是GitHub Actions还是要掌握的…

  • 本篇文章由以下章节顺序组成:

  1. 介绍用于制作镜像的java项目

  2. 说明如何编写GitHub Actions的脚本文件

  3. 在GitHub上执行GitHub Actions

  4. 验证结果,看镜像是否构建成功,能不能正常使用

前提

为了确保GitHub上的项目可以顺利制作成镜像并推送到hub.docker.com,您需要做好以下准备:

  1. 可用的GitHub帐号;

  2. 可用的hub.docker.com帐号,也可以用其他镜像仓库如阿里云;

关于java项目

  • 用于本次实战的项目,是个典型的父子结构的gradle工程,有一个模块是springboot工程,咱们今天要做的就是将此工程编译构建制作成docker镜像;

  • 这个java工程的详细内容请参考《SpringBoot(2.4)应用制作Docker镜像(Gradle版官方方案)》,这里不再赘述,只挑出几个关键地方说一下;

  • 如下图,demowebapp是个springboot应用,内部已经准备好了Dockerfile文件,只要用此文件即可将编译结果做成docker镜像:

在这里插入图片描述

  • demowebapp项目内部有个controller类,提供web接口,用于验证功能是否正常;

设置环境变量

  • 在推送镜像到hub.docker.com时,需要用到该网站的帐号和密码,这些信息自然不能写在GithHub仓库的代码中,如下图,在页面上按照下面红框的顺序新增两个secret类型的环境变量,稍后在GitHub Actions脚本中用变量名就能使用具体的帐号和密码了:

在这里插入图片描述

编写GitHub Actions脚本

  • 这里我选择了在线编辑GitHub Actions脚本(您也可以在本地编辑后提交推送到GitHub),如下图红框,在Github项目页面上点击Actions:

在这里插入图片描述

  • 如果该项目未曾添加过Actions脚本,您会看到一些脚本模板的推荐,如下图,选择红框中的Gradle模板:

在这里插入图片描述

  • 如下图,此时出现在线编辑脚本的页面,可见GitHub已在线生成了一些脚本:

在这里插入图片描述

  • 将脚本内容替换为以下内容,已添加了详细的注释,就不多赘述了,唯一要提醒的是镜像的TAG等于每次GitHub提交的commid:

This workflow will build a Java project with Gradle

For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle

name: 构建docker镜像

on:

main分支的push操作会触发当前脚本的执行

push:

branches: [ main ]

main分支的pr操作会触发当前脚本的执行

pull_request:

branches: [ main ]

jobs:

build:

当前脚本是在容器中运行的,对应的镜像是ubuntu-latest

runs-on: ubuntu-latest

steps:

下载源码

  • uses: actions/checkout@v2

  • name: Set up JDK 1.8

设置jdk环境

uses: actions/setup-java@v1

with:

java-version: 1.8

  • name: Dump GitHub context

env:

GITHUB_CONTEXT: ${{ toJSON(github) }}

将GTIHUB的信息都打印出来,后面的脚本可以使用这些信息,例如后面的镜像TAG用的就是这里面的commitid

run: echo “Hello ${{ github.event.commits[0].id }}”

  • name: Grant execute permission for gradlew

给gradlew可执行权限

run: chmod +x gradlew

  • name: Build with Gradle

执行build命令

run: ./gradlew build

  • name: Extract files from jar

从构建好的jar中提取制作镜像所需的内容,例如依赖jar、class、配置文件等

run: mkdir -p demowebapp/build/dependency && (cd demowebapp/build/dependency; jar -xf …/libs/*.jar)

  • name: Login docker hub

env:

DOCKER_USERNAME: ${{secrets.DOCKER_USERNAME}}

DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}

指定login命令登录hub.docker.com,帐号和密码已经在GitHub网页中配置好了

run: |

echo “${DOCKER_PASSWORD}” | docker login --username ${DOCKER_USERNAME} --password-stdin

  • name: Set up Docker Buildx

使用buildx来构建镜像,这个工具功能很丰富

uses: crazy-max/ghaction-docker-buildx@v1

with:

buildx-version: latest

  • name: Build dockerfile (with push)

构建镜像,用buildx可以同时构建X86和ARM架构的镜像,然后推送到hub.docker.com

run: |

cd demowebapp && \

fullCommit=“${{ github.event.commits[0].id }}” && \

docker buildx build \

–platform=linux/amd64,linux/arm/v7,linux/arm64 \

–output “type=image,push=true” \

–file ./Dockerfile . \

–tag bolingcavalry/demowebapp-docker:“${fullCommit: 0: 7}”

  • 脚本写完后点击右上角的Start commit按钮,将脚本提交到GitHub上,此时页面上会提示正在构建:

在这里插入图片描述

  • 点击上图红框,可以看到执行状态,如下图:

在这里插入图片描述

  • 点击上图红框中的build,可以看到咱们写的actions脚本的执行详情,如下图:

在这里插入图片描述

  • 正常情况下actions脚本可以执行成功,记下这次提交的id是ae465b4,登录hub.docker.com网站,可以见到新增的docker镜像已经就绪,tag就是ae465b4

在这里插入图片描述

Actions操作何时被触发?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值