一种不错的学习型个人开发者的持续集成方案:GitHub Action
前言
我本身在传统行业和产品型公司工作,公司比较偏向传统的部署和更新方式让我很苦恼,外加上不是很好的 PC 性能,所以最近一直都在研究自动部署。
而 GitHub Action 是 GitHub 本身推出的服务,它和我之前写过的 Drone 非常类似,由开发者提供 yml 配置文件,然后部署服务通过读取 yml,由上到下顺序执行。
GitHub 设置

点击 new 之后:

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

左边区域是编写的区域,右边是插件仓库,插件仓库提供了各种别人写好的插件,比如:FTP、SFTP、SSH、Docker。
YML 示例
name: java CI
on: push: branches: [ main ] paths-ignore: - 'README.md'
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up JDK 17 uses: actions/setup-java@v2 with: java-version: '17' distribution: 'adopt' - name: Validate Gradle wrapper uses: gradle/wrapper-validation-action@v1.0.4 - name: Make Gradlew Executable run: chmod +x ./gradlew - name: Build with Gradle uses: gradle/gradle-build-action@v2.1.4 with: arguments: build - uses: mr-smithers-excellent/docker-build-push@v5 name: Build & push Docker image with: image: inyaa/inyaa-admin tags: latest registry: ccr.ccs.tencentyun.com dockerfile: Dockerfile username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_PASSWORD }} - name: executing remote ssh commands using password uses: appleboy/ssh-action@master with: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} password: ${{ secrets.PASSWORD }} port: ${{ secrets.PORT }} script: | docker stop $(docker ps -a | grep "inyaa-admin" | awk '{print $1}') docker rm -f $(docker ps -a | grep inyaa-admin | awk '{print $1}') docker rmi $(docker images | grep inyaa-admin | awk '{print $3}') 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 是指如果跳过,不执行部署的文件。
从上到下,我们可以解释一下:
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 打包,然后发布到 Docker 仓库。
appleboy/ssh-action 最后这个是 SSH 登陆到服务器部署。
追加说明
以上就是 Java 部署的部分了。可以看到,经常会有类似 ${{ secrets.DOCKER_HUB_USERNAME }} 这样的配置。这个的意思是,服务器相关的配置,从 GitHub 的 Secrets 中读取,设置的地方如下图所示。

支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!