写点什么

使用 GithubAction 自动构建部署项目

作者:EquatorCoco
  • 2023-07-12
    福建
  • 本文字数:2130 字

    阅读完需:约 7 分钟

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


1.1 项目准备


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



highlighter- HTML


    <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 了。体验地址:http://www.jnpfsoft.com/?from=infoq


2.1 GithubAction 设置


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



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



也可以自己自定义一个工作流,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"
复制代码


以下为该脚本的说明:



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 直接存放在项目根目录:



远程登录服务器肯定要用户名和密码,这里不建议用明文的形式直接写在脚本中除非你的项目是 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


用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
使用GithubAction自动构建部署项目_前端_EquatorCoco_InfoQ写作社区