首页 > 其他分享 >使用GithubAction自动构建部署项目

使用GithubAction自动构建部署项目

时间:2023-06-11 10:02:09浏览次数:43  
标签:GitHub run name 部署 GithubAction jar 构建 Action root

目录

  • 1.1 项目准备
  • 2.1 GithubAction设置
  • 3.1 运行测试
  • 4.1 小结

GitHub Actions 是一种持续集成和持续交付(CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。 GitHub Actions 不仅仅是DevOps,还允许您在存储库中发生其他事件时运行工作流程。

1.1 项目准备

这里以一个javaWEB项目作为演示:

使用GithubAction自动构建部署项目_服务器

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>GithubActionDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>GithubActionDemo</name>
    <description>GithubActionDemo</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>

这里注意一下SpringBoot 2.x 的话最好就用JDK1.8 如果要用Springboot 3.X版本必须使用JDK17。Springboot 3.x已经废弃JDK1.8了。

2.1 GithubAction设置

当然首先应该把该项目上传至Github,点击Action选项卡:

使用GithubAction自动构建部署项目_java_02


这里可以选择Github提供的诸多工作流模板:

使用GithubAction自动构建部署项目_java_03


也可以自己自定义一个工作流,new workflow因为该项目是一个JavaWeb项目这里随便找了一个maven打包构建的模板:

# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

name: Java CI with Maven

on:    
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

jobs:
  develop_build:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取最新提交的代码
        uses: actions/checkout@v3

      - name: 设置jdk
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '17'
          cache: 'maven'

      - name: 项目打包
        run: mvn -B package

      - name: 删除旧的jar包以及运行脚本
        run: sshpass -p ${{secrets.CHAOYUEPASSWORD}} ssh -o StrictHostKeyChecking=no root@${{secrets.CHAOYUEIP}} "cd /root/GitHub_Action && rm -rf ./*"

      - name: 上传jar包和启动脚本到服务器中
        run: sshpass -p ${{secrets.CHAOYUEPASSWORD}} scp -r -o StrictHostKeyChecking=no ./target/GithubActionDemo-0.0.1-SNAPSHOT.jar ./run.sh root@${{secrets.CHAOYUEIP}}:/root/GitHub_Action

      - name: 启动项目
        run: sshpass -p ${{secrets.CHAOYUEPASSWORD}} ssh -o StrictHostKeyChecking=no root@${{secrets.CHAOYUEIP}} "cd /root/GitHub_Action && chmod +x run.sh && ./run.sh"

以下为该脚本的说明:

workFlow

说明

name

自定义workFlow名字

on

触发器,指定该工作流什么时候生效,这里是在push和pull_request的时候触发生效

job

一个任务,可以有多个

runs-on

构建部署过程可以在本地也可以使用github提供的虚拟机服务

steps

构建步骤,可以有多个

sshpass是一个远程登录服务器的一个插件工具,这里我现在服务器里创建了一个目录/root/GitHub_Action用于存放构建后的项目。run.sh为启动脚本内容如下:

# run.sh
# 切换到jar包目录下
cd /root/GitHub_Action
# 杀死之前的项目进程。这里的cut -c9-14是截取进程id,不一定都是-c9-14
# 可以先运行ps -ef|grep java|grep GitHub_Action-0.0.1-SNAPSHOT.jar看一下进程id是第几位到第几位
ps -ef|grep java|grep GithubActionDemo-0.0.1-SNAPSHOT.jar|cut -c9-14|xargs kill -9
# 停5秒
sleep 5s
# 使环境变量生效
source /root/.bash_profile
# 运行项目
nohup java -jar GithubActionDemo-0.0.1-SNAPSHOT.jar >/root/cicd.log 2>&1 &

run.sh直接存放在项目根目录:

使用GithubAction自动构建部署项目_java_04

远程登录服务器肯定要用户名和密码,这里不建议用明文的形式直接写在脚本中除非你的项目是private的,方式是在Setting里存放服务器IP,用户名,密码:

使用GithubAction自动构建部署项目_java_05


调用方式为:${{secrets.你的secret}}

到这里一个workflow就定义完毕了,返回到原项目会发现多了一个文件夹:

使用GithubAction自动构建部署项目_java_06


这个文件夹里存放的就是我们的workFlow.yaml文件

3.1 运行测试

我们push一下本地项目到Github,便会触发workFlow的工作条件。在Action界面能看到详细的构建过程:

使用GithubAction自动构建部署项目_服务器_07

使用GithubAction自动构建部署项目_服务器_08

使用GithubAction自动构建部署项目_java_09

可以看到每一步都是按照我们的脚本文件按序在执行。

执行完毕后jar包会上传至服务器:

使用GithubAction自动构建部署项目_java_10


由于我们脚本中写了启动命令,就不用再在服务器里java -jar运行了。现在我们访问项目试试:

使用GithubAction自动构建部署项目_java_11


运行成功!

4.1 小结

GithubAction的工作流程和我之前用的Jenkins大体上差不多,但是GithubAction作为第三方服务不用单独部署使用,而且与Github使用联系紧密。
这里只是简单演示如何使用GithubAction完成CI/CD的过程。官方提供了很多内置workFlow模板,开发起来相对便捷。
项目原地址:https://github.com/HiFxs/GithubActionDemo



标签:GitHub,run,name,部署,GithubAction,jar,构建,Action,root
From: https://blog.51cto.com/u_15474793/6457066

相关文章

  • nas使用docker部署alist​
    一、下载镜像xhofe/alist:latest二、创建容器第一行:文件/文件夹:此处填写在nas上事先创建好的目录位置装载路径:/opt/alist/data类型选读写启动容器,检查日志是否有报错项。如没有报错,容器应该为运行中的状态。三、打开alist页面点击快捷方式查看应用网址打开alist登录页面http://192......
  • 4、第一次构建项目报错处理
     翻译如下:编译错误此项目包含Java编译错误,可能导致自定义视图呈现失败。先修复编译问题。解决方案如下:找到File->InvalidateCaches/Restart清除缓存及重启Studio 点击InvalidateCaches/Restart清除缓存及重启Studio 解决了哦,没有报错了 ......
  • nginx-clojure-0.6.0 集成nginx 1.25.0 构建的解决方法
    今天也说过关于nginx-clojure-0.6.0集成nginx1.2.50构建是有问题的,以下是解决方法实际问题staticdeclarationof‘ngx_http_close_request’followsnon-staticdeclaration原因nginx-clojure复制了nginx源码中对于nginx的处理函数(ngx_http_clojure_mem.c文件)......
  • 3、构建第一个项目
           ......
  • 流量传感器-使用部署
    天眼-流量传感器目录天眼-流量传感器1.设备简介2.部署拓扑3.标品3.1S52产品配置4.一体化4.1一体化硬件配置5.功能介绍5.1状态监听5.2网页漏洞利用5.3规则配置5.4自定义威胁情报5.5威胁检测5.6流量记录5.7文件还原5.8抓包检测5.9常规配置5.10网络管理5.11传输设......
  • 构建高效互联网医院系统:源码开发技巧
    目前来看,互联网医院系统源码的构建成为了医院信息化建设的一个重要方向。在构建高效互联网医院系统的过程中,源码开发技巧显得尤为重要。本篇文章,小编将为大家着重讲述一下,希望对您有一定的帮助。一、系统整体架构设计理论上来讲,整体架构的开发就是互联网医院系统的核心之一,在这个过......
  • 【React工作记录九十六】docker部署前后端项目在云服务器
    前言大家好我是歌谣最近开始前端和后端的学习需要部署项目在服务器上面命令部分目前只会部署的部分前端前彻底端的目录是在/ngng/html下面dockerrestartngng重新启动容器前端文件放置后端后端的文件在project下面步骤1dockerstopgeo2dockerrm-fgeo3dockerrmi-fgg......
  • nginx及常用部署方式与性能优化
    nginx做反向代理服务器nginx配置:upstreambackend_server{server123.34.34.34weight=1server123.34.34.35weight=1}server{location/{proxy_passhttp://backend_server;proxy_set_headerHost$http_hosti:$http_host:$proxy_port;......
  • redis集群部署(运维笔记)
    Redis是一个高性能的NoSQL数据库,由于其高性能和可靠性,越来越多的企业开始使用Redis。在生产环境中,Redis集群是必不可少的,因为它可以提供高可用性和可扩展性。本文将介绍如何在Linux环境下部署Redis集群。1.安装Redis首先,需要在每个节点上安装Redis。可以使用以下命令从Redis官方......
  • IDEA编译和构建JavaWeb项目时,项目中没有target目录,且out目录下classes文件下main包下
    问题如下:1.我们在添加web框架时,如图:2.在添加完框架,和配置完Tomcat我们开始运行项目,发现没有target文件和out文件下classes文件下什么都没有原因:出现这种情况,很可能是因为未加载的模块出现在了iml文件中,导致生成taget的时候出错,进而导致out文件内class文件的......