news 2026/7/2 12:56:08

实操教程!GitLab 搭建通用前后端项目脚手架

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
实操教程!GitLab 搭建通用前后端项目脚手架

在日常开发测试中,开发同事会经常找你去创建git项目,每次新建项目都要重复搭建目录结构,初始化配置 统一代码规范 登录平台创建有些繁琐,不仅耗时还容易出现格式不统一问题 我们不妨自己去定义一下规则,让jenkins去实现 包括项目初始化 都让jenkins去完成 。通过GitLab 脚手架模板项目,可以提前封装标准化的前端、后端项目基础架构,实现一键新建项目、统一团队代码规范、规避重复初始化工作

今天这篇实操干货,手把手教你在 GitLab 搭建通用前后端项目脚手架,团队所有新项目直接复用,统一项目架构!

一、什么是 GitLab 项目脚手架?

很多人会混淆 GitLab 脚手架与 CI/CD 自动部署,这里先明确核心定义:GitLab 项目脚手架(模板仓库):是提前搭建好的、包含完整标准化目录结构、配置文件、基础代码的模板项目,核心作用是快速初始化新项目,而非自动化构建部署。

核心价值:

  • 告别重复新建文件、配置环境、编写基础代码的低效操作

  • 统一团队所有前后端项目的目录结构、代码规范、配置规则

  • 新人上手直接使用标准化模板,降低学习和适配成本

  • 支持一键基于模板生成全新项目,保留模板配置,可快速迭代开发

二、前期准备工作

搭建 GitLab 脚手架前,需满足基础环境和权限要求,保证模板创建、复用功能正常使用:

1. 环境与权限

  • 可用的 GitLab 服务(自建 GitLab / 官方云端 GitLab)

  • 拥有项目创建权限、仓库管理权限(管理员/团队负责人权限最佳)

  • 本地安装 Git 工具,用于初始化模板项目、提交代码

2. 技术栈适配规划

提前确定团队通用技术栈,搭建对应脚手架模板,本文适配主流版本:

  • 前端脚手架:Vue3 / React 通用模板

  • 后端脚手架:SpringBoot Java 通用模板

三、搭建GItlab 前端项目脚手架

使用参数化构建过程(项目名称及项目组)

pipline模板如下

pipeline{agent any tools{nodejs'node18'//'NodeJS'是你在系统设置中配置的Node.js环境名称}environment{GITLAB_API_URL='https://xxxxxxx.cn/api/v4'}parameters{string(name:'gitlabAppName', defaultValue:'my-app', description:'The name of the application')string(name:'gitlabGroupName', defaultValue:'my-group', description:'The name of the GitLab group')}stages{stage('Generate Project'){steps{script{sh"""node-vnpm-vnpx--registryhttp://npmmirrors.devxxx.cn/-yclx-vue-cli@latest create${params.gitlabAppName}"""}}}stage('Create GitLab Project'){steps{script{withCredentials([string(credentialsId:'gitlab-token-id', variable:'GITLAB_TOKEN')]){// 获取完整的 API 响应 def groupApiResponse=sh(script:"curl -s --header 'PRIVATE-TOKEN:${GITLAB_TOKEN}' '${GITLAB_API_URL}/groups?search=${gitlabGroupName}'", returnStdout:true).trim()// 打印完整响应echo"GitLab API response:${groupApiResponse}"// 解析 groupId def groupId=sh(script:"echo '${groupApiResponse}' | jq -r '.[0].id'", returnStdout:true).trim()// 打印解析后的 groupIdecho"Retrieved GitLab group ID:${groupId}"// 判断群组是否存在if(!groupId||groupId=='null'){error"GitLab group${groupName}not found."}def createProjectResponse=sh(script:"""curl-s--requestPOST'${GITLAB_API_URL}/projects'\--header'PRIVATE-TOKEN: ${GITLAB_TOKEN}'\--header'Content-Type: application/json'\--data'{ "name": "${params.gitlabAppName}", "namespace_id": "${groupId}", "initialize_with_readme": true }'""", returnStdout:true).trim()echo"Create project response:${createProjectResponse}"}}}}stage('Initialize Git Repository'){steps{script{withCredentials([usernamePassword(credentialsId:'gitlab-credentials-id', usernameVariable:'GIT_USERNAME', passwordVariable:'GIT_PASSWORD')]){dir("${params.gitlabAppName}"){sh"""ls-lagitinitgitconfig user.name"xxxx"gitconfig user.email"xxxxxxx@xx.cn"gitremoteaddorigin https://xxxxx.cn/${params.gitlabGroupName}/${params.gitlabAppName}.gitgitadd.gitcommit-m"Initial commit"gitpush-uhttps://${GIT_USERNAME}:${GIT_PASSWORD}@xxxxxx.cn/${params.gitlabGroupName}/${params.gitlabAppName}.git master"""}}}}}stage('Clean Workspace'){steps{deleteDir()}}}}

这段pipline适配了我司内部一些规则比如需要私服镜像源配置团队私有脚手架模板 我就不做详细解释了 道友自行研习

四、手把手搭建Gitlab后端项目脚手架

以企业主流SpringBoot 后端模板为例,搭建标准化后端脚手架,统一Java项目架构。

同样配置参数化构建参数

piplene 配置如下

pipeline{agent any environment{GITLAB_API_URL='https://xxxxxx/api/v4'}parameters{string(name:'groupId', defaultValue:'com.example', description:'The groupId for the new project')string(name:'artifactId', defaultValue:'my-app', description:'The artifactId for the new project')string(name:'package', defaultValue:'com.example.myapp', description:'The base package for the new project')string(name:'gitlabAppName', defaultValue:'my-app', description:'The name of the application')string(name:'gitlabGroupName', defaultValue:'my-group', description:'The name of the GitLab group')}#调用团队自定义Maven脚手架骨架(archetype-web-archetype),#内置统一的SpringBoot分层架构、配置文件、工具类、#代码规范指定固定脚手架版本0.0.2,保证所有新项目架构完全统一-DinteractiveMode=false:#非交互式执行,适配流水线自动化场景根据传入参数,自动生成完整、可直接开发的后端标准化项目结构stages{stage('Generate Project'){steps{script{sh""" /var/lib/jenkins/maven/maven-3.6.2/bin/mvn archetype:generate\-DarchetypeGroupId=com.msl.archetype\-DarchetypeArtifactId=archetype-web-archetype\-DarchetypeVersion=0.0.2\-DgroupId=${params.groupId}\-DartifactId=${params.artifactId}\-Dpackage=${params.package}\-DinteractiveMode=false"""}}}#读取Jenkins加密存储的GitLab私人令牌,安全鉴权,无硬编码密钥风险#通过分组名称动态查询分组ID,适配多团队、多分组场景#内置异常拦截,分组不存在直接报错终止,避免无效执行#自动调用GitLab API创建同名仓库,自动初始化README文件stage('Create GitLab Project'){steps{script{withCredentials([string(credentialsId:'gitlab-token-id', variable:'GITLAB_TOKEN')]){// 获取完整的 API 响应 def groupApiResponse=sh(script:"curl -s --header 'PRIVATE-TOKEN:${GITLAB_TOKEN}' '${GITLAB_API_URL}/groups?search=${gitlabGroupName}'", returnStdout:true).trim()// 打印完整响应echo"GitLab API response:${groupApiResponse}"// 解析 groupId def groupId=sh(script:"echo '${groupApiResponse}' | jq -r '.[0].id'", returnStdout:true).trim()// 打印解析后的 groupIdecho"Retrieved GitLab group ID:${groupId}"// 判断群组是否存在if(!groupId||groupId=='null'){error"GitLab group${groupName}not found."}def createProjectResponse=sh(script:"""curl-s--requestPOST'${GITLAB_API_URL}/projects'\--header'PRIVATE-TOKEN: ${GITLAB_TOKEN}'\--header'Content-Type: application/json'\--data'{ "name": "${params.gitlabAppName}", "namespace_id": "${groupId}", "initialize_with_readme": true }'""", returnStdout:true).trim()echo"Create project response:${createProjectResponse}"}}}}#进入本地生成的脚手架目录,初始化Git仓库、统一提交用户信息、绑定远程企业GitLab仓库,最后将标准化脚手架代码自动推送至远程仓库,直接完成项目初始化。stage('Initialize Git Repository'){steps{script{withCredentials([usernamePassword(credentialsId:'gitlab-credentials-id', usernameVariable:'GIT_USERNAME', passwordVariable:'GIT_PASSWORD')]){dir("${params.artifactId}"){sh"""gitinitgitconfig user.name"xxxx"gitconfig user.email"xxxxxxxxx"gitremoteaddorigin https://xxxxxx.cn/${params.gitlabGroupName}/${params.gitlabAppName}.gitgitadd.gitcommit-m"Initial commit"gitpush-uhttps://${GIT_USERNAME}:${GIT_PASSWORD}@xxxxx.cn/${params.gitlabGroupName}/${params.gitlabAppName}.git master"""}}}}}stage('Clean Workspace'){steps{deleteDir()}}}}

五、总结

GitLab + Jenkins 脚手架方案,完美适配团队前后端项目标准化建设:

前端采用手动模板复用,轻量化、易维护;后端采用Maven Archetype流水线自动化生成,规范化、高效率。统一团队开发标准、解放重复劳动力。

区别于 CI/CD 自动化部署,脚手架聚焦项目初始化与架构标准化,一次搭建、全员复用,彻底解决团队项目目录混乱、代码规范不一、初始化低效的问题,是团队规范化开发的基础必备配置

整套方案彻底告别重复新建项目、手动配置架构的低效工作,统一团队代码规范与项目架构,是企业研发规范化的核心基础配置。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 12:55:42

HTML 的 <col> 元素

1. 引言 在 HTML 表格开发中&#xff0c;我们经常需要对表格的列进行统一的样式控制。虽然 CSS 提供了强大的选择器&#xff0c;但针对表格列的样式设置有时会显得繁琐。这时&#xff0c;HTML 的 <col> 元素就成为了一个非常有用的工具。本文将深入探讨 <col> 元素…

作者头像 李华
网站建设 2026/7/2 12:55:21

基于LARA-R6001与PIC18F86J16的VoLTE通信平台开发指南

1. 4G LTE VoLTE平台开发概述 在物联网和移动通信技术快速发展的今天&#xff0c;构建自主可控的4G LTE VoLTE通信平台成为许多开发者的实际需求。LARA-R6001作为一款成熟的4G LTE模块&#xff0c;配合PIC18F86J16微控制器的强大处理能力&#xff0c;可以搭建出性能稳定、功能完…

作者头像 李华
网站建设 2026/7/2 12:53:01

跨境仓储系统架构实战|基于SpringBoot实现恒温仓储精细化分区管理

摘要&#xff1a;针对跨境海淘仓储货品混放、温湿度失控、品相损耗等行业痛点&#xff0c;本文基于SpringBootMyBatisRedis实现北极星跨境恒温仓储管理系统&#xff0c;设计货品分区托管、温湿度实时监控、仓位绑定管理核心模块&#xff0c;附带完整核心源码&#xff0c;解决传…

作者头像 李华
网站建设 2026/7/2 12:52:40

本地电脑跑 AI,Ryzen AI 搭配 Ollama 快速上手

为什么选择本地跑大模型 以前想在本机跑个大语言模型&#xff0c;门槛高得吓人&#xff1a;要么得买昂贵的 NVIDIA 显卡&#xff0c;要么就得在 Linux 下折腾半天的驱动和依赖库。但随着 AMD Ryzen AI 处理器和 Radeon GPU 的普及&#xff0c;尤其是 ROCm 生态在 7.x 版本后的成…

作者头像 李华
网站建设 2026/7/2 12:50:07

手机变身万能键盘鼠标:无需安装软件的跨设备输入方案

手机变身万能键盘鼠标&#xff1a;无需安装软件的跨设备输入方案 【免费下载链接】android-hid-client Android app that allows you to use your phone as a keyboard and mouse WITHOUT any software on the other end (Requires root) 项目地址: https://gitcode.com/gh_m…

作者头像 李华
网站建设 2026/7/2 12:49:18

跨次元贴贴!走路摇与天选7 Pro系列游戏本高清同框美图惊喜掉落!

✦♥♥♥✦这一次我要带友友们沉浸式接收一波双重颜值暴击当华硕天选7 Pro游戏本与走路摇一同出镜我的心动信号就已经满格啦&#xff01;话不多说高清美图奉上&#xff01;友友们长按保存哦~快把这份养眼大片抱回家吧&#xff01;华硕天选7 Pro游戏本华硕天选7 Pro Max游戏本友…

作者头像 李华