本篇文章將會簡單講解如何使用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