使用GithubAction自动构建部署项目 - 西伯利亚爱学习的狼
source link: https://www.cnblogs.com/xhj928675426/p/17269689.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
GitHub Actions 是一种持续集成和持续交付(CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。 GitHub Actions 不仅仅是DevOps,还允许您在存储库中发生其他事件时运行工作流程。
1.1 项目准备
<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选项卡:
也可以自己自定义一个工作流,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 &
远程登录服务器肯定要用户名和密码,这里不建议用明文的形式直接写在脚本中除非你的项目是private的,方式是在Setting里存放服务器IP,用户名,密码:
调用方式为:${{secrets.你的secret}}
到这里一个workflow就定义完毕了,返回到原项目会发现多了一个文件夹:
这个文件夹里存放的就是我们的workFlow.yaml文件
3.1 运行测试
我们push一下本地项目到Github,便会触发workFlow的工作条件。在Action界面能看到详细的构建过程:
可以看到每一步都是按照我们的脚本文件按序在执行。
由于我们脚本中写了启动命令,就不用再在服务器里java -jar运行了。现在我们访问项目试试:
运行成功!
4.1 小结
GithubAction的工作流程和我之前用的Jenkins大体上差不多,但是GithubAction作为第三方服务不用单独部署使用,而且与Github使用联系紧密。
这里只是简单演示如何使用GithubAction完成CI/CD的过程。官方提供了很多内置workFlow模板,开发起来相对便捷。
项目原地址:https://github.com/HiFxs/GithubActionDemo
__EOF__
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK