在github上使用workflow构建docker镜像并推送阿里云
本篇文章将会简单讲解如何使用github Actions功能构建workflow并且打包java程序docker镜像,最后推送到阿里免费的docker镜像仓库中。
一、注册阿里云账号,使用容器镜像服务
注册阿里云账号完成之后,在dashboard中搜索“容器镜像服务”关键字
打开该页面,默认页面是这样
个人版是免费的,点进去
根据官网描述,可以免费创建3个命名空间和300个镜像仓库,对于个人开发者而言,这绝对是足够用的。
点击“访问凭证”按钮,设置固定密码
记住账号密码待会儿会在github中用到。接下来创建命名空间。
自动创建仓库选项:当开启自动创建后,可以在控制台仓库不存在的情况下,直接推送,系统会自动创建对应的仓库。
默认仓库类型:命名空间可以选择公开或者私有,当你开启“自动创建仓库”功能时,这个配置才有作用。这个配置将决定系统帮你创建的仓库默认是公开还是私有。
最后一步:创建仓库,这一步很重要,要特别注意
在这一步中会确定下来仓库的类型是公开还是私有,填完相关信息点击下一步进入“代码源”页面,这里使用的是github,所以要先进行github授权,授权完成后选定github对应的项目,最后取消“代码变更自动构建镜像”选项框,勾选“海外机器构建”选项框(因为github在海外,如果不选择这个,我尝试了下,推送镜像的时候会非常慢)。
这样,就完成了阿里云上相关的设置。
我用以上步骤创建了"xxl-job-admin"公开的镜像仓库
二、github创建workflow
https://github.com/kdyzm/xxl-job 这个项目是我克隆的xxljob的官方项目,基于2.3.0版本修改了些东西最终新增了2.4.1版本,相关的修改可以参考我之前的文章:xxl-job滥用netty导致的问题和解决方案。我计划打包docker镜像并且以容器方式运行,所以第一步,就是要将程序打包并且构建docker镜像,最终推送阿里云。
1.创建workflow
在项目根目录创建.github目录,然后在里面创建workflows子目录,子目录中创建docker-image.yml文件,文件内容如下
name: Docker Image CI
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build with Maven
run: mvn clean package -DskipTests
- name: Build the Docker image
run: |
docker version
# 登录阿里云镜像仓库
docker login --username=${{ secrets.DOCKER_USERNAME }} --password=${{ secrets.DOCKER_PASSWORD }} registry.cn-hangzhou.aliyuncs.com
cd xxl-job-admin
# 使用Dockerfile构建镜像
docker build . --file Dockerfile --tag registry.cn-hangzhou.aliyuncs.com/kdyzm/xxl-job-admin:2.4.1
# 推送镜像到镜像仓库
docker push registry.cn-hangzhou.aliyuncs.com/kdyzm/xxl-job-admin:2.4.1
其中有两个环境变量secrets.DOCKER_USERNAME
和secrets.DOCKER_PASSWORD
,之前提到的账号密码,需要在运行workflow之前就设置好。设置方式如下
2.运行workflow
点击项目的Actions按钮,选中对应的workflow,并运行即可
点进去可以看到具体的构建日志
构建完成之后返回阿里云控制台
可以看到镜像已经推送成功。
点击基本信息可以看到阿里贴心的小提示:如何拉取镜像和推送镜像
以我的镜像为例,只需要docker pull registry.cn-hangzhou.aliyuncs.com/kdyzm/xxl-job-admin:2.4.1
即可拉取镜像
参考文档
《使用github actions实现自动将镜像推送到自己的镜像仓库》
《GitHub Actions: Manual triggers with workflow_dispatch》
https://docs.github.com/en/actions/reference/events-that-trigger-workflows#workflow_dispatch