这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
为了确保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
如果您不想自己搭建kubernetes环境,推荐使用腾讯云容器服务TKE:无需自建,即可在腾讯云上使用稳定, 安全,高效,灵活扩展的 Kubernetes 容器平台;
如果您希望自己的镜像可以通过外网上传和下载,推荐腾讯云容器镜像服务TCR:像数据加密存储,大镜像多节点快速分发,跨地域镜像同步
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。