GitHub Actions自动化部署+Idea远程Debug

GitHub Actions自动化部署+Idea远程Debug

GitHub Actions

简介

"CI/CD" 是指持续集成(Continuous Integration)和持续交付(Continuous Delivery)的缩写。它是一种软件开发实践方法,旨在通过自动化构建、测试和部署的流程来加快软件交付的速度和质量。
GitHub Actions 是 GitHub 提供的一种自动化工作流程的功能。当我写完代码推送到GitHub后,他可以自动帮我们构建打包并部署到服务器上,自动完成繁琐的部署上线的步骤。

实践

首先你要有一个代码的仓库,这里我演示的是SpringBoot的一个仓库,里面只有一个Controller验证是否部署成功。

 @RestController
@RequestMapping("/")
public class Controller {

    @GetMapping
    public String get() throws InterruptedException {
        System.out.println("111");
        return "ok";
    }
}

GitHub Actions 创建工作流 workflows

20231026204808

20231026204844

修改自动部署的文件名,我这里填的是deploy.yml,一个简单的示例如下:

# 部署工作流的名称
name: grpc-deploy

# 你要监听哪个分支的变动
on:
  push:
    branches: 
      - main

  workflow_dispatch:

# 运行环境,一般填这个即可
jobs:
  build:
    runs-on: ubuntu-latest

#关键配置,下面是你自定义的步骤
    steps:
    # 自定义的步骤名称,检查
      - name: Checkout Repository
    # 这些是一些模板,照抄即可
        uses: actions/checkout@v3
    # maven打包部署
      - name: Build JAR file
        run: mvn clean package -DskipTests

    # 将jar包通过scp上传到你的服务器中
      - name: copy file via ssh key
        uses: appleboy/scp-action@master
    # 你包的位置
        with:
            source: 'target/grpc-runner.jar'
    # SSH address  服务器地址
            host: ${{ secrets.HOST }}
    # Remote dir path  服务器下部署文件存放路径
            target: /www/jar/grpc/
    # SSH Port  服务器端口
            port: 22
    # SSH User name   用户名
            username: ${{ secrets.USERNAME }}
    # SSH User password  用户密码
          #  password: ${{ secrets.PASSWORD }}
    # key  密匙
            key: ${{ secrets.DEPLOY_KEY }}
    # 这个是进入的服务器终端,然后执行的命令
      - name: SSH into remote server and deploy
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          password: ${{ secrets.PASSWORD }}
          script: |
            cd /www/jar/grpc
            java -jar grpc-runner.jar

一个大致的模板就差不多是这样,如果你有别的需求,请尽情提问ChatGPT。
然后接下来就是这个yml文件中的一些变量了,需要我们进行设置,给一个权限去进入到服务器上。

首先我们需要生成ssh公钥和密钥,我们在你的服务器上进行生成.

# 1. 进入~/.ssh文件夹中
cd ~/.ssh
# 2. 生成密钥对
ssh-keygen -t rsa -C "你的邮箱即可"
# 查看公钥,复制并追加到authorized_keys中
cat id_ed25519.pub
vim authorized_keys
# 查看秘钥,复制,---begin都需要复制,GitHub填的Deploy_key
cat id_ed25519

20231026205428

依次填入你的服务器登录用户名、密码、ip地址、ssh秘钥。

那么,接下来就可以尽情享受CI/CD的快乐啦。我们只需要写完代码,在Idea中push代码。

20231026210237

20231026210305

如果有报错,点进去查看即可
20231026210334

Idea远程Debug

简介

那么当我们使用了自动化部署,那如果当线上出现了Bug,我们要如何及时地发现问题呢?那么远程Debug就出现了。
那么这里我们介绍一下容器里面服务的远程Debug,相对于直接部署的坑更多一点。

实践

首先,我们要让JVM能接受远程调试,我们在JVM参数上加上这个参数。

# -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:39601 
# port你指定即可,记住,防火墙、安全组,都需要放行端口,然后记住,很多博客都是address=port,没有了前面的*:,那么在容器部署中就会有问题,他会绑定不到ip地址。
nohup java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:39601  ./target/grpc-runner.jar > logs/nohup.out 2>&1 &

然后我们需要开启docker的远程访问的功能。

vim /usr/lib/systemd/system/docker.service
# 注释掉上面的一句,然后添加下面一句,记住9527的端口,防火墙、安全组都需要开启!!
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:9527 -H unix:///var/run/docker.sock

# 保存并退出,通知docker服务做出的修改
systemctl daemon-reload
# 重启docker
systemctl restart docker

做到这里就基本差不多啦,这里列出docker-compose.yml的代码,主要是注意java运行的参数,docker容器的暴露并映射端口。

version: '3'
services:
 grpc-vedio:
    image: openjdk:11
    ports:
      - "39600:39600"
      - "39601:39601"
    volumes:
      - /www/jar/grpc/logs:/app/logs
      - /www/jar/grpc:/app
    working_dir: /app
    command: bash -c "nohup java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:39601  ./target/grpc-runner.jar > logs/nohup.out 2>&1 & tail -f /dev/null"

然后Idea如此配置即可。

20231026211654

点击调试按钮,接下来就可以尽情享受远程Debug的乐趣啦!

20231026211742

20231026212525

20231026212617

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇