在服务器部署自己项目的时候,最麻烦的就是每次更新完代码需要把代码复制到服务器上,编译,然后再部署。
最近发现github提供了CICD的能力,可以在我push代码后自动复制到阿里云并完成编译。
下面简单介绍一下使用方式
github action
Github Actions是由Github创建的 CI/CD服务。 它的目的是使所有软件开发工作流程的自动化变得容易。 直接从GitHub构建,测试和部署代码。CI(持续集成)由很多操作组成,比如代码合并、运行测试、登录远程服务器,发布到第三方服务等等。GitHub 把这些操作就称为 actions。
很多操作在不同项目里面是类似的,完全可以共享。GitHub 允许开发者把每个操作写成独立的脚本文件,存放到代码仓库,使得其他开发者可以引用。
GitHub 做了一个GitHub Marketplace ,可以搜索到他人提交的 actions。
也可以自己写一个简单的CICD的ation,步骤也很简单
1、在项目下创建./github/workflow/release.yml文件
# This workflow will build a golang project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go
name: release
on:
push:
branches: [ "main" ] # master 分支提交时触发
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Go #配置GO 环境
uses: actions/setup-go@v3
with:
go-version: 1.18
- name: Build # 编译项目
run: go build -v ./...
- name: 发布到阿里云
uses: easingthemes/ssh-deploy@v2.1.5
env:
#私钥
SSH_PRIVATE_KEY: ${{ secrets.ALIYUN_SERVER_PRIVATE_KEY }}
#SCp参数
ARGS: "-rltgoDzvO --delete"
#源目录
SOURCE: "./"
#服务器Ip:换成你的服务器iP
REMOTE_HOST: ${{ secrets.ALIYUN_SERVER_HOST }}
#用户
REMOTE_USER: "root"
#目标地址
TARGET: "/root/university-selection_Backend"
Github Action 有下面这些概念
-
workflow(工作流程):指整个持续集成的流程,包含执行脚本任务、执行触发事件等
-
Events (事件):触发流程的钩子,例如提交代码触发,新建 Issues 触发等等。
-
Jobs (任务):每一个工作流程包含一个或多个任务,任务按顺序执行,每一个任务都会执行 shell 脚本。
-
Steps (步骤):每一个
Job
包含一个或多个Step
, Step 按顺序执行。 -
Actions(动作): 每一个
Step
包含一个或多个Action
, 按顺序执行。 -
Runners(执行环境):
workflow
运行时的服务器,每一个Runner
可以运行一个Job
.
release.yml 就指定了一个workflow,其中 :
name
是workflow的名字,
on
指定了触发事件,在拉取和推代码到main分支的时候会触发workflow
jobs
下面我们自定义了我们个工作任务,任务指定了运行环境是 ubuntu
, 同时,任务的执行步骤,第一个 任务uses
表示使用公共 actions/checkout@v2 签出代码,这一步就相当于把 github 仓库的代码拉到当前环境磁盘中,第二个任务是配置Go环境,第三个任务是编译我们的项目代码,最后使用easingthemes/ssh-deploy@v2.1.5(别人提供的action) 复制代码到阿里云服务器上。
如果要执行脚本,可以再加下面这段配置注意这里的PWD是密码不是密钥
- name: Deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.ALIYUN_SERVER_HOST }}
username: "root"
#私钥
password: ${{ secrets.ALIYUN_SERVER_PWD }}
script: |
cd /root/university-selection_Backend
./admin_project
exit
其中最后一个模块中host和key的配置是从setting中取的,可以参考下一节
ssh 密钥配置
进入你的云服务器,执行以下命令生成密钥
cd /root/.ssh
ssh-keygen -m PEM -t rsa -b 4096 -C "你的git邮箱地址"
不断点空格完成密钥生成,会生成私钥id_rsa
,公钥id_rsa.pub
复制公钥到以下文件
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
然后在github->setting->ssh 里创建你的公钥,title无所谓
然后进入你的项目setting,配置域名和私钥,私钥记得全部复制过来,包括(-----BEGIN RSA PRIVATE KEY-----)
然后就可以看到你的action开始执行了
如果有报错,permission denied,到服务器上执行
chmod 700 /root/.ssh/authorized_keys
如果报可执行文件无法执行,可以把go build操作放到后面ssh过去的脚本中操作。