前言
我本身在传统行业和产品型公司工作,公司比较偏向传统的部署和更新方式让我很苦恼,外加上不是很好的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 ]
是指提交到mian这个分支,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中读取,设置的地方如下图所示。