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

📅 2026/7/2 12:56:12
实操教程!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{nodejsnode18//NodeJS是你在系统设置中配置的Node.js环境名称}environment{GITLAB_API_URLhttps://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{shnode-vnpm-vnpx--registryhttp://npmmirrors.devxxx.cn/-yclx-vue-clilatest create${params.gitlabAppName}}}}stage(Create GitLab Project){steps{script{withCredentials([string(credentialsId:gitlab-token-id, variable:GITLAB_TOKEN)]){// 获取完整的 API 响应 def groupApiResponsesh(script:curl -s --header PRIVATE-TOKEN:${GITLAB_TOKEN} ${GITLAB_API_URL}/groups?search${gitlabGroupName}, returnStdout:true).trim()// 打印完整响应echoGitLab API response:${groupApiResponse}// 解析 groupId def groupIdsh(script:echo ${groupApiResponse} | jq -r .[0].id, returnStdout:true).trim()// 打印解析后的 groupIdechoRetrieved GitLab group ID:${groupId}// 判断群组是否存在if(!groupId||groupIdnull){errorGitLab group${groupName}not found.}def createProjectResponsesh(script:curl-s--requestPOST${GITLAB_API_URL}/projects\--headerPRIVATE-TOKEN: ${GITLAB_TOKEN}\--headerContent-Type: application/json\--data{ name: ${params.gitlabAppName}, namespace_id: ${groupId}, initialize_with_readme: true }, returnStdout:true).trim()echoCreate project response:${createProjectResponse}}}}}stage(Initialize Git Repository){steps{script{withCredentials([usernamePassword(credentialsId:gitlab-credentials-id, usernameVariable:GIT_USERNAME, passwordVariable:GIT_PASSWORD)]){dir(${params.gitlabAppName}){shls-lagitinitgitconfig user.namexxxxgitconfig user.emailxxxxxxxxx.cngitremoteaddorigin https://xxxxx.cn/${params.gitlabGroupName}/${params.gitlabAppName}.gitgitadd.gitcommit-mInitial commitgitpush-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_URLhttps://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保证所有新项目架构完全统一-DinteractiveModefalse#非交互式执行适配流水线自动化场景根据传入参数自动生成完整、可直接开发的后端标准化项目结构stages{stage(Generate Project){steps{script{sh /var/lib/jenkins/maven/maven-3.6.2/bin/mvn archetype:generate\-DarchetypeGroupIdcom.msl.archetype\-DarchetypeArtifactIdarchetype-web-archetype\-DarchetypeVersion0.0.2\-DgroupId${params.groupId}\-DartifactId${params.artifactId}\-Dpackage${params.package}\-DinteractiveModefalse}}}#读取Jenkins加密存储的GitLab私人令牌安全鉴权无硬编码密钥风险#通过分组名称动态查询分组ID适配多团队、多分组场景#内置异常拦截分组不存在直接报错终止避免无效执行#自动调用GitLab API创建同名仓库自动初始化README文件stage(Create GitLab Project){steps{script{withCredentials([string(credentialsId:gitlab-token-id, variable:GITLAB_TOKEN)]){// 获取完整的 API 响应 def groupApiResponsesh(script:curl -s --header PRIVATE-TOKEN:${GITLAB_TOKEN} ${GITLAB_API_URL}/groups?search${gitlabGroupName}, returnStdout:true).trim()// 打印完整响应echoGitLab API response:${groupApiResponse}// 解析 groupId def groupIdsh(script:echo ${groupApiResponse} | jq -r .[0].id, returnStdout:true).trim()// 打印解析后的 groupIdechoRetrieved GitLab group ID:${groupId}// 判断群组是否存在if(!groupId||groupIdnull){errorGitLab group${groupName}not found.}def createProjectResponsesh(script:curl-s--requestPOST${GITLAB_API_URL}/projects\--headerPRIVATE-TOKEN: ${GITLAB_TOKEN}\--headerContent-Type: application/json\--data{ name: ${params.gitlabAppName}, namespace_id: ${groupId}, initialize_with_readme: true }, returnStdout:true).trim()echoCreate 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}){shgitinitgitconfig user.namexxxxgitconfig user.emailxxxxxxxxxgitremoteaddorigin https://xxxxxx.cn/${params.gitlabGroupName}/${params.gitlabAppName}.gitgitadd.gitcommit-mInitial commitgitpush-uhttps://${GIT_USERNAME}:${GIT_PASSWORD}xxxxx.cn/${params.gitlabGroupName}/${params.gitlabAppName}.git master}}}}}stage(Clean Workspace){steps{deleteDir()}}}}五、总结GitLab Jenkins 脚手架方案完美适配团队前后端项目标准化建设前端采用手动模板复用轻量化、易维护后端采用Maven Archetype流水线自动化生成规范化、高效率。统一团队开发标准、解放重复劳动力。区别于 CI/CD 自动化部署脚手架聚焦项目初始化与架构标准化一次搭建、全员复用彻底解决团队项目目录混乱、代码规范不一、初始化低效的问题是团队规范化开发的基础必备配置整套方案彻底告别重复新建项目、手动配置架构的低效工作统一团队代码规范与项目架构是企业研发规范化的核心基础配置。