当前位置:   article > 正文

使用GithubAction自动构建部署项目_github action部署web服务

github action部署web服务

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

1.1 项目准备

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

highlighter- HTML

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.7.1</version>
  5. <relativePath/> <!-- lookup parent from repository -->
  6. </parent>
  7. <groupId>com.example</groupId>
  8. <artifactId>GithubActionDemo</artifactId>
  9. <version>0.0.1-SNAPSHOT</version>
  10. <name>GithubActionDemo</name>
  11. <description>GithubActionDemo</description>
  12. <properties>
  13. <java.version>1.8</java.version>
  14. </properties>

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

2.1 GithubAction设置

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

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

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

  1. # This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
  2. # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
  3. # This workflow uses actions that are not certified by GitHub.
  4. # They are provided by a third-party and are governed by
  5. # separate terms of service, privacy policy, and support
  6. # documentation.
  7. name: Java CI with Maven
  8. on:
  9. push:
  10. branches: [ "master" ]
  11. pull_request:
  12. branches: [ "master" ]
  13. jobs:
  14. develop_build:
  15. runs-on: ubuntu-latest
  16. steps:
  17. - name: 拉取最新提交的代码
  18. uses: actions/checkout@v3
  19. - name: 设置jdk
  20. uses: actions/setup-java@v3
  21. with:
  22. distribution: 'temurin'
  23. java-version: '17'
  24. cache: 'maven'
  25. - name: 项目打包
  26. run: mvn -B package
  27. - name: 删除旧的jar包以及运行脚本
  28. run: sshpass -p ${{secrets.CHAOYUEPASSWORD}} ssh -o StrictHostKeyChecking=no root@${{secrets.CHAOYUEIP}} "cd /root/GitHub_Action && rm -rf ./*"
  29. - name: 上传jar包和启动脚本到服务器中
  30. 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
  31. - name: 启动项目
  32. run: sshpass -p ${{secrets.CHAOYUEPASSWORD}} ssh -o StrictHostKeyChecking=no root@${{secrets.CHAOYUEIP}} "cd /root/GitHub_Action && chmod +x run.sh && ./run.sh"

以下为该脚本的说明:

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

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

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

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

调用方式为:${{secrets.你的secret}}到这里一个workflow就定义完毕了,返回到原项目会发现多了一个文件夹:

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

3.1 运行测试

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

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

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

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

运行成功!

4.1 小结

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

文章转载自: 西伯利亚爱学习的狼

原文链接:https://www.cnblogs.com/xhj928675426/p/17269689.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/580401
推荐阅读
相关标签
  

闽ICP备14008679号