使用Github Actions构建Docker并推送镜像
Github Actions
GitHub Actions 是一个持续集成和持续交付 (CI/CD) 平台,可让您自动化构建、测试和部署管道,直接从 GitHub 部署代码。您可以创建工作流来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。
GitHub Actions 不仅限于 DevOps,还允许您在存储库中发生其他事件时运行工作流。轻松实现所有软件工作流程的自动化。
Actions :登录远程服务器,发布内容到第三方服务、抓取代码、运行测试。
workflow
工作流程:持续集成一次运行的过程,就是一个 workflow。
Job
任务:一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务
Step
步骤:每个 job 由多个 step 构成,一步步完成
Actions
动作:每个 step 可以依次执行一个或多个命令(action)
参考文档:Workflow syntax for GitHub Actions - GitHub Docs
详细流程
以我的SpringBoot练手项目个人Pixiv镜像站 MyPix
为例。
Step1 编写Dockerfile
因为是要构建镜像,所以要先通过Dcokerfile描述下构建流程,由于是SpringBoot项目,所以直接将即将构建好的jar包移进容器再运行jar包即可。
Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
FROM openjdk:8
MAINTAINER leesin
VOLUME /tmp
ADD target/pixiv-0.0.1-SNAPSHOT.jar pix.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/pix.jar"]
|
直接放在根目录即可
Step2 编写提交之后的workflow
在项目 .github/workflows 文件夹中新建main.yml。编写workflow工作流程。
由于是要提交到Docker Hub所以要先去Hub注册账号,将有推送权限的用户名和token存入github仓库的secrets里待下方workflow当变量使用。
以本次为例,大概应该都知道什么意思了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| on: push: branches: [ master ] pull_request: branches: [ master ] env: IMAGE_NAME: mypix jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK 8 uses: actions/setup-java@v3 with: java-version: '8' distribution: 'zulu'
- name: Build with Maven run: mvn clean package -DskipTests - name: Login to Docker Hub uses: docker/login-action@v1 with: username: ${{ secrets.USERNAME }} password: ${{ secrets.ACCESS_TOKEN }} - name: Set up Docker Buildx id: buildx uses: docker/setup-buildx-action@v1 - name: Build and push id: docker_build uses: docker/build-push-action@v2 with: context: ./ file: ./Dockerfile push: true tags: ${{ secrets.USERNAME }}/mypix:latest - name: Upload JAR file uses: actions/upload-artifact@v2 with: name: Mypix path: target/*.jar
|
不出意外的话,每次提交项目到Github的时候会触发Actions运行workflow工作流,将项目打包成jar包,再通过Dockerfile流程将jar包构造成Docker镜像发送至DockerHub保存。
由于只是发布镜像,所以至此结束。
项目部署
顺便讲下本项目的部署方法
如果有需要的话仍可直接在上方SSH连接个人服务器进行项目部署。
需提前写好启动脚本,然后通过脚本启动,即可实现实时部署。
1 2 3 4 5 6 7 8 9
| - name: SSH uses: fifsky/ssh-action@master with: command: | sh start.sh host: ${{ secrets.HOST }} user: ${{ secrets.USER }} key: ${{ secrets.PRIVATE_KEY}}
|
由于需要配置挺多环境参数,所以使用docker-compose部署。
编写docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| version: '3' services: pixiv: image: 'kokutou/mypix:latest' environment: - globalcookie= - mycookie= - password= - guestpassword= - qqnum=xxx - pushurl=xxx ports: - '8084:8084' pull_policy: always container_name: mypix
|
进入以上yml目录运行docker-compose up -d即可