工程准备
此处使用fork自alibaba/Sentinel
的FJiayang/Sentinel
项目实践
工程地址
准备Dockerfile
该工程为标准Java项目,故准备好的Dockerfile
文件如下
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER fjy8018@gmail.com
ENV PARAM ""
ENV VERSION 1.8.0
RUN mkdir -p /sentinel
WORKDIR /sentinel
ADD ./sentinel-dashboard/target/sentinel-dashboard.jar ./app-${VERSION}.jar
# 设置时区,默认为UTC
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' > /etc/timezone
ENTRYPOINT ["java", "${PARAM}", "-jar", "app-${VERSION}.jar"]
编写GitHub工作流
GitHub DevOps工作流又叫GitHub Actions 是2019年末推出的自动化CICD持续集成工作流,有详细的样例文档
此处参考以下文档编写
安全配置
由于需要建构建后的制品推送到DockerHub中,但又不能在工作流中直接使用用户名和密码登陆,故还需要配置环境变量
在DockerHub中新增秘钥
在构建工程的设置中新增用户名和密码变量
编写后的工作流如下
name: Publish Docker image
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Maven Central Repository
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Publish package
run: mvn --batch-mode clean package -Dmaven.test.skip=true
- name: Push to Docker Hub
uses: docker/build-push-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
repository: fjy8018/sentinel
tag_with_ref: true
触发构建
当前的触发方式配置为PUSH
,修改好文件后会自动触发流水线工作
Maven打包,速度很快
打包完成
检查结果
登录到DockerHub中检查推送结果,可见成功推送
总结
整体来看,GitHub工作流效率高,文档齐全,编码上手速度快,相比GitLab CICD和DockerHub CICD来说,GitHub CICD配置更加简单、友好和高效。