Table of Contents
445 words
2 minutes
一种不错的学习型个人开发者的持续集成方案:GitHub Action
我在传统行业上班,公司的部署流程偏老旧,加上我这台 PC 性能也一般,所以最近一直在折腾自动部署。
GitHub Action 和之前写过的 Drone 挺像的:开发者写一个 yml 配置文件,服务读取后从上到下依次执行。
GitHub 设置

点击 new 之后:

图中都是预设,比如 Docker 的、Java 的,我们先随便点一个。

左边区域是编写的区域,右边是插件仓库,插件仓库提供了各种别人写好的插件,比如:FTP、SFTP、SSH、Docker。
YML 示例
1name: java CI2
3on:4 push:5 branches: [ main ]6 paths-ignore:7 - 'README.md'8
9jobs:10 build:11 runs-on: ubuntu-latest12 steps:13 - uses: actions/checkout@v214 - name: Set up JDK 1715 uses: actions/setup-java@v216 with:17 java-version: '17'18 distribution: 'adopt'19 - name: Validate Gradle wrapper20 uses: gradle/wrapper-validation-action@v1.0.421 - name: Make Gradlew Executable22 run: chmod +x ./gradlew23 - name: Build with Gradle24 uses: gradle/gradle-build-action@v2.1.425 with:26 arguments: build27 - uses: mr-smithers-excellent/docker-build-push@v528 name: Build & push Docker image29 with:30 image: inyaa/inyaa-admin31 tags: latest32 registry: ccr.ccs.tencentyun.com33 dockerfile: Dockerfile34 username: ${{ secrets.DOCKER_HUB_USERNAME }}35 password: ${{ secrets.DOCKER_HUB_PASSWORD }}36 - name: executing remote ssh commands using password37 uses: appleboy/ssh-action@master38 with:39 host: ${{ secrets.HOST }}40 username: ${{ secrets.USERNAME }}41 password: ${{ secrets.PASSWORD }}42 port: ${{ secrets.PORT }}43 script: |44 docker stop $(docker ps -a | grep "inyaa-admin" | awk '{print $1}')45 docker rm -f $(docker ps -a | grep inyaa-admin | awk '{print $1}')46 docker rmi $(docker images | grep inyaa-admin | awk '{print $3}')47 docker run -d -p 8080:8080 --name inyaa-admin --network inyaa --network-alias inyaa-admin --volume=/data/nginx/html/sitemap:/home/sitemap ccr.ccs.tencentyun.com/inyaa/inyaa-admin:latest配置逐行看
branches: [ main ] — 提交到 main 分支才会触发。paths-ignore 用来跳过不相关的文件变更,只改 README 就不会跑。
挨个说一下:
actions/checkout — 检出代码
actions/setup-java@v2 — 配 JDK 17,OpenJDK 用的 adopt 发行版
gradle/wrapper-validation-action + gradle/gradle-build-action — Gradle 打包流程,先校验 wrapper 再跑 build
mr-smithers-excellent/docker-build-push — 用 Dockerfile 打镜像,推到镜像仓库
appleboy/ssh-action — SSH 登录服务器执行部署脚本
追加说明
服务器地址、密码这些敏感信息,都用 ${{ secrets.xxx }} 从 GitHub Secrets 里读取,在仓库 Settings 里设置:

一种不错的学习型个人开发者的持续集成方案:GitHub Action
/posts/guide/github-action-ci-cd/ Some information may be outdated