论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
开源技术
›
开源技术
›
从代码到部署:GitHub Actions实现Java项目CI/CD的完整 ...
从代码到部署:GitHub Actions实现Java项目CI/CD的完整实践 ...
大连全瓷种植牙齿制作中心
论坛元老
|
2024-10-12 18:46:13
|
显示全部楼层
|
阅读模式
楼主
主题
1404
|
帖子
1404
|
积分
4227
从代码到部署:GitHub Actions实现Java项目CI/CD的完整实践
在当代软件
开发
中,连续集成和连续部署(CI/CD)已经成为了团队高效交付代码的关键计谋。通过GitHub Actions,可以轻松配置CI/CD流水线,实现从代码提交到部署的主动化工作流。本文将基于英语听力网站(studytool.site)项目先容如何基于一个真实的GitHub Actions脚本,通过连续集成和连续部署实现对应用步伐的主动化管理。
1. 项目背景
该实践使用了GitHub Actions来实现CI/CD,包含以下重要功能:
主动构建Java项目。
使用Maven打包项目。
部署到远程ECS服务器。
通过Telegram通知
开发
者最新的提友爱况。
2. GitHub Actions配置详解
以下是完整的GitHub Actions配置文件:
name: CI/CD Pipeline
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Build with Maven
run: mvn clean package -DskipTests
- name: Deploy to ECS
env:
ECS_IP: ${{ secrets.SERVER_HOST }}
ECS_USER: ${{ secrets.SERVER_USER }}
ECS_SSH_KEY: ${{ secrets.SERVER_SSH_KEY }}
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SERVER_SSH_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
scp -o StrictHostKeyChecking=no target/*.jar ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}:/project/smartwork.jar
ssh -o StrictHostKeyChecking=no ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} << 'EOF'
if pgrep -f "java.*smartwork.jar"; then
pkill -f "java.*smartwork.jar"
fi
nohup java -jar /project/smartwork.jar > /project/app.log 2>&1 &
EOF
- name: Get commit information
id: commit_info
run: |
COMMIT_MESSAGE=$(git log -1 --pretty=%B)
echo "COMMIT_MESSAGE=${COMMIT_MESSAGE}" >> $GITHUB_ENV
- name: Send Telegram notification
run: |
COMMIT_URL="https://github.com/${{ github.repository }}/commit/${{ github.sha }}"
curl -s -X POST https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage -d chat_id=${{ secrets.TELEGRAM_CHAT_ID }} -d parse_mode="HTML" -d text=$'✅ <b>New commit to</b> <code>${{ github.repository }}</code> <b>on branch</b> <code>${{ github.ref_name }}</code>\n\n<b>Commit Author</b>: <code>${{ github.actor }}</code>\n<b>Commit Message</b>: <code>${{ env.COMMIT_MESSAGE }}</code>\n<b>Commit SHA</b>: <a href="'${COMMIT_URL}'">${{ github.sha }}</a>'
复制代码
3. CI/CD流程分析
3.1 检出代码
第一步是使用 actions/checkout@v3 将当前仓库代码检出到运行环境中。这一步可以确保我们操作的是最新提交的代码。
- name: Checkout code
uses: actions/checkout@v3
复制代码
3.2 设置Java环境
接下来,使用 actions/setup-java@v3 设置JDK 17的
开发
环境,以确保Java项目可以或许在构建服务器上正常编译运行。
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
复制代码
3.3 构建和打包
项目通过Maven构建,并打包成 .jar 文件。-DskipTests 用于跳过测试,以加快打包速率。
- name: Build with Maven
run: mvn clean package -DskipTests
复制代码
3.4 部署到ECS
通过 scp 和 ssh 将打包好的 .jar 文件传输到远程ECS服务器,并通过SSH远程执行下令来部署应用。此步骤确保:
制止之前的应用。
启动新的应用。
- name: Deploy to ECS
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SERVER_SSH_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
scp -o StrictHostKeyChecking=no target/*.jar ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}:/project/smartwork.jar
ssh -o StrictHostKeyChecking=no ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} << 'EOF'
if pgrep -f "java.*smartwork.jar"; then
pkill -f "java.*smartwork.jar"
fi
nohup java -jar /project/smartwork.jar > /project/app.log 2>&1 &
EOF
复制代码
3.5 获取提交信息
使用 git log 获取最新的提交信息,并将其存储到环境变量中,供后续使用。
- name: Get commit information
id: commit_info
run: |
COMMIT_MESSAGE=$(git log -1 --pretty=%B)
echo "COMMIT_MESSAGE=${COMMIT_MESSAGE}" >> $GITHUB_ENV
复制代码
3.6 发送Telegram通知
最后,通过调用Telegram的API,向
开发
者发送一条包含提交信息、提交SHA和仓库信息的通知。这个功能可以让
开发
团队实时掌握每次部署的状态。
- name: Send Telegram notification
run: |
COMMIT_URL="https://github.com/${{ github.repository }}/commit/${{ github.sha }}"
curl -s -X POST https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage -d chat_id=${{ secrets.TELEGRAM_CHAT_ID }} -d parse_mode="HTML" -d text=$'✅ <b>New commit to</b> <code>${{ github.repository }}</code> <b>on branch</b> <code>${{ github.ref_name }}</code>\n\n<b>Commit Author</b>: <code>${{ github.actor }}</code>\n<b>Commit Message</b>: <code>${{ env.COMMIT_MESSAGE }}</code>\n<b>Commit SHA</b>: <a href="'${COMMIT_URL}'">${{ github.sha }}</a>'
复制代码
推送通知如下图,点击commit SHA链接可以直接跳转到当次提交页。
4. 关键点回首
主动化部署
:通过GitHub Actions和SSH,将应用主动部署到远程服务器,极大地减少了人工干预。
通知机制
:通过Telegram的通知功能,
开发
者可以实时了解部署的状态和提交信息。
安全性
:使用GitHub Secrets存储敏感信息,如服务器的SSH密钥和Telegram的Bot Token,确保了数据的安全。
5. 总结
通过这一CI/CD实践,我们展示了如何利用GitHub Actions实现从代码提交到主动部署的完整流水线。这一主动化流程可以显著进步
开发
服从,并且通过通知机制加强了团队协作的透明度。希望这篇文章能为各人的CI/CD实践提供参考和帮助。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
大连全瓷种植牙齿制作中心
论坛元老
这个人很懒什么都没写!
楼主热帖
初识C语言
记一次 .NET 某汽贸店 CPU 爆高分析 ...
浅入浅出 1.7和1.8的 HashMap
Net core中使用System.Drawing对上传的 ...
业务安全发展的三个阶段
前后端分离项目(八):后端报错Field ...
java学习第二天
计算数学算式的值
Docker三种自定义网络(bridge、macvla ...
7.1 实现进程内存块枚举
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
移动端开发
linux
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表