近年来,我一直在使用jenkins 来部署自己的项目,发现太耗内存了,

因此将自动化部迁的操作改为使用github action。

初始化action配置

选择一个合适的action类型,比如webpack、gitPage、Nodejs等等。

比如我这里选择了webpack,选择完成后 可以看到在仓库里多了一个文件 .github/workflows/webpack.yml

由此可以推得:“参与自动化,其实就是编写一个yml工作流文件”,所以其实你也可以不选择,纯手建,麻烦些而已。

创建一些变量

后续涉及到部署的时候,服务器的ip、密钥什么的不适合直接编码在yml中,因此 git action允许你创建一些变量在仓库的设置中定义,在yml中引用

进入setting > secrets and variables > Actions的目录下,比如设置如下三个配置项

最后在yml中使用即可

#...
- name: Deploy to Staging server
uses: easingthemes/ssh-deploy@main
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_PORT: ${{ secrets.REMOTE_PORT}}

部署到私有服务器

如果你不想将项目部署到gitPage,而是想部署到自己服务器上,我们可以编写shell脚本来调用ssh+rsync等来完成部署操作!

不过已经有现有action插件 ssh-deploy供使用,简化了我们自己编码的麻烦。

需要注意的是,这个插件有点坑:

  • 一致提示没有权限 Permission denied,经过特意的学习了一番 ssh和rsync后才知道,我的问题是---作者已经提醒过的 “手动将公钥添加到authorized_keys中”

前端项目-webpack

一个较完整的前端项目配置

name: NodeJS with Webpack

on:
push:
branches: ["main"]
jobs:
build:
runs-on: ubuntu-latest steps:
- name: 迁出代码
uses: actions/checkout@main - name: 安装Node
uses: actions/setup-node@main
with:
node-version: "20.x" - name: 安装依赖
run: yarn - name: 打包
run: npm run build - name: 发布到服务器
uses: easingthemes/ssh-deploy@main
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-avzr --delete --mkpath"
SOURCE: "build/"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_PORT: ${{ secrets.REMOTE_PORT }}
REMOTE_USER: root
TARGET: /home/apps-root/book-fe

后端项目-java

name: Java CI with Maven

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ] jobs:
build: runs-on: ubuntu-latest steps:
- name: 迁出代码
uses: actions/checkout@main - name: 安装 JDK
uses: actions/setup-java@main
with:
java-version: '17'
distribution: 'temurin'
cache: maven - name: 构建
run: mvn -B package --file pom.xml - name: 发布到服务器
uses: easingthemes/ssh-deploy@main
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-avzr --delete --mkpath"
SOURCE: "target/blog-server-0.0.1-SNAPSHOT.jar"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_PORT: ${{ secrets.REMOTE_PORT }}
REMOTE_USER: root
TARGET: /home/apps-root/blog-server - name: 启动服务
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.REMOTE_HOST }}
port: ${{ secrets.REMOTE_PORT }}
username: root
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
source /etc/profile
cd /home/apps-root/blog-server
nohup java -jar ./*.jar &
  1. 打包完成后 手动将制品 也就是打包后的文件 xxx.jar,通过 ssh-deploy 发送到目标服务器
  2. 然后再通过ssh-action 来远程控制服务器, 执行启动jar文件命令

遇到的坑,ssh执行shell时,发现找不到java环境变量,可我明明配置了呀(在/etc/profile 里)。

后来查阅各种资料,才知道 shell分为两种,SSH 命令执行 shell 是非交互式 shell,而普通 shell 是登录 shell 或交互式 shell。

非交互式shell获取到的环境变量是不全的,官方文档说:

当 bash 作为交互式登录 shell 或使用,它首先
从文件 /etc/profile 读取并执行命令(如果
该文件存在)。读取该文件后,它会按顺序查找
~/.bash_profile、~/.bash_login 和 ~/.profile 启动非登录 shell 的交互式 shell 时
,bash 会从 ~/.bashrc(
如果该文件存在)中读取并执行命令...

所以我通过在script中,添加了额外一行(source /etc/profile),使其生效 。

参考:

https://stackoverflow.com/questions/216202/why-does-an-ssh-remote-command-get-fewer-environment-variables-then-when-run-man/216204#216204

https://github.com/appleboy/ssh-action/issues/31#issuecomment-1006565847

推荐

https://juejin.cn/post/7396933333492793396

github action的使用的更多相关文章

  1. GitHub Action一键部署配置,值得拥有

    最近由于自己的个人应用增加,每次都需要在服务器手动发布,觉得特别麻烦,所以想通过代码控制自动发布,直接选择了GitHub Action. GitHub Action持续集成服务,目前已经免费开放使用, ...

  2. 编写自己的 GitHub Action,体验自动化部署

    本文将介绍如何使用 GitHub Actions 部署前端静态页面,以及如何自己创建一个 Docker 容器 Action. 简介 Actions GitHub Actions 是 GitHub 官方 ...

  3. 你知道什么是 GitHub Action 么?

    本文是 GitHub Action 的入门教程,如您已有相关使用经验可以直接关掉. GitHub Action 是 GitHub 于 2018 年 10 月推出的一个 CI\CD 服务. 之前一直都是 ...

  4. 用 GitHub Action 构建一套 CI/CD 系统

    ​ 缘起 Nebula Graph 最早的自动化测试是使用搭建在 Azure 上的 Jenkins,配合着 GitHub 的 Webhook 实现的,在用户提交 Pull Request 时,加个 r ...

  5. Github Action 快速上手指南

    前言 各位读者,新年快乐,我是过了年匆忙赶回上海努力搬砖的蛮三刀. Github之前更新了一个Action功能(应该是很久以前了),可以实现很多自动化操作.用来替代用户自己设置的自动化脚本(比如:钩子 ...

  6. 【Azure Developer】Github Action部署资源(ARM模板)到Azure中国区时,遇见登录问题的解决办法

    问题描述 在参考文档"使用 GitHub Actions 部署 ARM 模板"一文中,由于是在中国区Azure上操作,所以生产的部署凭证为中国区凭证.当创建工作流时,在登录到Azu ...

  7. 使用CI/CD工具Github Action发布jar到Maven中央仓库

    之前发布开源项目Payment Spring Boot到Maven中央仓库我都是手动执行mvn deploy,在CI/CD大行其道的今天使用这种方式有点"原始".于是我一直在寻求一 ...

  8. 两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库

    两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ...

  9. hexo配合github action 自动构建(多种形式)

    已经使用HEXO正常构建GitHub页面 根据github action 给hexo配置自动部署github page 前往墨抒颖的个人网站查看纯净版 1. 为仓库设置访问密钥 第一步先生成密钥,打开 ...

  10. 使用GitHub Action进行打包并自动推送至OSS

    GitHub Action 是 GitHub 于 2018 年 10 月推出的一个 CI\CD 服务. 官方文档:https://docs.github.com/cn/actions CI\CD 持续 ...

随机推荐

  1. 配置springmvc的springmvc.xml

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  2. Avalonia跨平台实战(二),Avalonia相比WPF的便利合集(一)

    本话讲的是Avalonia中相比于WPF更方便的一些特性 布局 布局方面没什么好说的,和WPF没什么区别,Grid,StckPanel...这些,不熟悉的话可以B站上找一下教程 xml树 在WPF中我 ...

  3. 🎀B站-网页优化插件BewlyBewly

    简介 一个开源的B站网页优化浏览器插件,对B站网页进行了调整和优化,页面更具视觉吸引力和用户友好性. 源码 https://github.com/BewlyBewly/BewlyBewly 支持 插件 ...

  4. 康谋方案 | 康谋BRICK2与车载以太网设备轻松集成

    导读:在当下,汽车行业在安全性.舒适性.智能和万物互联等方面彻底改变了传统车辆的定义.随着这一趋势,汽车行业逐渐开始采用车载以太网来进行车内数据通讯,比如100Base-T1.1000Base-T1, ...

  5. 如何在 Java 中进行内存泄漏分析?

    如何在 Java 中进行内存泄漏分析? 内存泄漏是指程序中无法访问的对象仍然被占用内存,导致内存无法回收,最终导致内存不足.程序崩溃等问题.Java 中的内存泄漏通常与垃圾回收机制的工作方式相关,虽然 ...

  6. STM32真的是很落后吗?

    STM32真的是很落后吗? 作为一名嵌入式开发老兵,我不止一次听到有人说"STM32已经过时了",尤其是那些刚入门或者看了几篇文章的新手.每当听到这样的言论,我都忍不住想笑,但又有 ...

  7. GPFS并行文件系统部署实践

    环境 ubuntu22.04 试用版下载链接 https://www.ibm.com/cn-zh/products/storage-scale 我的版本:Storage_Scale_Developer ...

  8. mysql 5.7等保2.0安全配置

    一.安装密码校验插件validate_password 在使用服务器插件之前,必须将它们加载到服务器中.MySQL支持在服务器启动和运行时加载插件.还可以在启动时控制加载插件的激活状态,并在运行时卸载 ...

  9. maven setting.xml文件配置

    官网文档:http://maven.apache.org/ref/3.2.5/maven-settings/settings.html 下面是我个人的配置 <?xml version=" ...

  10. [随记]-SpringMVC中的handler到底是什么东西

    HandlerMapping 初始化时候的 HandlerMapping 有,按顺序排列: requestMappingHandlerMapping beanNameHandlerMapping -& ...