为了确保GitHub上的项目可以顺利制作成镜像并推送到hub.docker.com,您需要做好以下准备:
# 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}"
前面咱们编写Actions脚本会触发构建操作,实际上您对这个仓库的任何内容的改动提交都会触发Actions脚本被执行,也就是说,之后您修改这个Java项目的代码后,只要一提交,hub.docker.com中就会有最新的镜像产生;
docker pull bolingcavalry/demowebapp-docker:ae465b4
docker run --rm -p 8080:8080 bolingcavalry/demowebapp-docker:docker:ae465b4