应届生面试被问 AI 工具使用,怎样回答才不空泛
2026/6/10 3:44:35
本文详解如何自建GitLab代码仓库,配置CI/CD自动化流水线,打造完整的团队协作开发环境。
代码托管平台的选择:
对于企业或有隐私需求的团队,自建GitLab是最好的选择:
今天来搭建一套完整的GitLab + CI/CD环境。
| 配置 | 最低 | 推荐 |
|---|---|---|
| CPU | 2核 | 4核+ |
| 内存 | 4GB | 8GB+ |
| 磁盘 | 50GB | 100GB+ SSD |
注意:GitLab比较吃资源,4GB内存勉强能跑,8GB以上才流畅。
# docker-compose.ymlversion:'3.8'services:gitlab:image:gitlab/gitlab-ce:latestcontainer_name:gitlabrestart:alwayshostname:'gitlab.example.com'environment:GITLAB_OMNIBUS_CONFIG:|external_url 'http://gitlab.example.com' gitlab_rails['gitlab_shell_ssh_port'] = 2222 # 邮件配置(可选) gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.example.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "gitlab@example.com" gitlab_rails['smtp_password'] = "password" gitlab_rails['smtp_domain'] = "example.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'ports:-'80:80'-'443:443'-'2222:22'volumes:-'./gitlab/config:/etc/gitlab'-'./gitlab/logs:/var/log/gitlab'-'./gitlab/data:/var/opt/gitlab'shm_size:'256m'# 启动docker compose up -d# 等待启动完成(第一次需要几分钟)docker logs -f gitlab# 获取初始root密码dockerexec-it gitlabgrep'Password:'/etc/gitlab/initial_root_password1. 访问 http://服务器IP 2. 用户名:root 3. 密码:上一步获取的初始密码 4. 登录后修改密码 建议配置: - Admin Area → Settings → Sign-up restrictions → 关闭注册 - Admin Area → Settings → Visibility → 设置默认私有1. Admin Area → Users → New User 2. 创建项目组:Groups → New Group 3. 创建项目:Projects → New Project 4. 添加SSH Key:User Settings → SSH KeysRunner是执行CI/CD任务的执行器,可以部署在:
# Docker方式安装docker run -d --name gitlab-runner --restart always\-v /var/run/docker.sock:/var/run/docker.sock\-v gitlab-runner-config:/etc/gitlab-runner\gitlab/gitlab-runner:latest# 获取注册Token# GitLab → Admin Area → Runners → 复制Token# 注册Runnerdockerexec-it gitlab-runner gitlab-runner registerEnter the GitLab instance URL: http://gitlab.example.com Enter the registration token: [粘贴Token] Enter a description: my-runner Enter tags: docker,build Enter an executor: docker Enter the default Docker image: docker:latest# 编辑配置dockerexec-it gitlab-runnernano/etc/gitlab-runner/config.toml[[runners]] name = "my-runner" url = "http://gitlab.example.com" token = "xxx" executor = "docker" [runners.docker] tls_verify = false image = "docker:latest" privileged = true # 允许Docker in Docker disable_cache = false volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]# .gitlab-ci.yml 结构stages:# 阶段定义-build-test-deployvariables:# 全局变量APP_NAME:"my-app"job_name:# 任务定义stage:build# 所属阶段script:# 执行脚本-echo "Building..."only:# 触发条件-main# .gitlab-ci.ymlstages:-build-test-package-deployvariables:MAVEN_OPTS:"-Dmaven.repo.local=.m2/repository"cache:paths:-.m2/repository/build:stage:buildimage:maven:3.8-jdk-11script:-mvn compileonly:-main-developtest:stage:testimage:maven:3.8-jdk-11script:-mvn testonly:-main-developpackage:stage:packageimage:maven:3.8-jdk-11script:-mvn package-DskipTestsartifacts:paths:-target/*.jarexpire_in:1 weekonly:-maindeploy:stage:deployimage:docker:latestservices:-docker:dindscript:-docker build-t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .-docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHAonly:-main# .gitlab-ci.ymlstages:-install-test-build-deploycache:paths:-node_modules/install:stage:installimage:node:18script:-npm ciartifacts:paths:-node_modules/expire_in:1 hourtest:stage:testimage:node:18script:-npm run testdependencies:-installbuild:stage:buildimage:node:18script:-npm run buildartifacts:paths:-dist/expire_in:1 weekdependencies:-installonly:-maindeploy:stage:deployimage:alpine:latestscript:-apk add rsync openssh-client-rsync-avz--delete dist/ user@server:/var/www/app/only:-mainwhen:manual# 手动触发# .gitlab-ci.ymlbuild-image:stage:packageimage:docker:latestservices:-docker:dindvariables:DOCKER_TLS_CERTDIR:""before_script:-docker login-u $CI_REGISTRY_USER-p $CI_REGISTRY_PASSWORD $CI_REGISTRYscript:-docker build-t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .-docker build-t $CI_REGISTRY_IMAGE:latest .-docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA-docker push $CI_REGISTRY_IMAGE:latestonly:-mainmain ──●───────────●───────────●──→ 生产环境 ↑ ↑ ↑ release ──●───────────●───────────●──→ 预发布 ↑ ↑ develop ──●───●───●───●───●───●───●──→ 开发主线 ↑ ↑ ↑ feature ──●───● ●───● ●───●───→ 功能分支Settings → Repository → Protected Branches main分支: - Allowed to merge: Maintainers - Allowed to push: No one - Require approval: 1人以上<!-- .gitlab/merge_request_templates/default.md --> ## 变更描述 <!-- 描述这个MR做了什么 --> ## 变更类型 - [ ] 新功能 - [ ] Bug修复 - [ ] 重构 - [ ] 文档更新 ## 测试说明 <!-- 如何测试这个变更 --> ## Checklist - [ ] 代码已自测 - [ ] 更新了相关文档 - [ ] 添加了必要的测试团队分布: - 开发A:公司内网 - 开发B:家里远程 - 开发C:出差酒店 - GitLab:公司内网服务器 问题:开发B、C无法访问公司内网的GitLab方案1:GitLab暴露公网
❌ 风险高,容易被攻击 ❌ 需要公网IP和域名方案2:VPN接入
⚠️ 需要VPN服务器 ⚠️ 配置复杂方案3:组网软件(推荐)
使用组网软件(如星空组网)将团队成员和GitLab服务器组成虚拟局域网:
┌──────────────┐ │ GitLab │ │ 10.10.0.1 │←─┐ └──────────────┘ │ │ 虚拟局域网 ┌──────────────┐ │ │ 开发A │←─┤ │ 10.10.0.2 │ │ └──────────────┘ │ │ ┌──────────────┐ │ │ 开发B │←─┤ │ 10.10.0.3 │ │ └──────────────┘ │ │ ┌──────────────┐ │ │ 开发C │←─┘ │ 10.10.0.4 │ └──────────────┘配置步骤:
# 1. GitLab服务器安装组网客户端# 2. 所有开发者电脑安装组网客户端# 3. 登录同一账号# 4. 修改git remote地址为组网IP# 原地址gitremote set-url origin http://192.168.1.100/group/project.git# 改为组网IPgitremote set-url origin http://10.10.0.1/group/project.git效果:
# ~/.ssh/configHost gitlab HostName10.10.0.1# 组网IPPort2222UsergitIdentityFile ~/.ssh/gitlab_key# 克隆使用gitclone gitlab:group/project.git# 手动备份dockerexec-t gitlab gitlab-backup create# 备份文件位置./gitlab/data/backups/# 定时备份(crontab)03* * * dockerexec-t gitlab gitlab-backup createCRON=1# 停止相关服务dockerexec-it gitlab gitlab-ctl stop puma dockerexec-it gitlab gitlab-ctl stop sidekiq# 恢复备份(BACKUP为备份时间戳)dockerexec-it gitlab gitlab-backup restoreBACKUP=11493107454_2018_04_25_10.6.4-ce# 重启docker restart gitlab# 备份到远程服务器(通过组网)rsync-avz ./gitlab/data/backups/ user@10.10.0.5:/backup/gitlab/# 减少Sidekiq并发gitlab_rails['sidekiq_concurrency']=5# 减少Puma workerspuma['worker_processes']=2# 禁用Prometheus(省内存)prometheus_monitoring['enable']=false# 启用Git LFS存储大文件gitlfsinstallgitlfs track"*.psd"gitlfs track"*.zip"# 通常是启动未完成或内存不足# 查看日志docker logs gitlab# 重启docker restart gitlabGitLab + CI/CD搭建要点:
我的团队配置:
- GitLab服务器:公司内网,8GB内存 - Runner:单独一台4GB服务器 - 远程访问:星空组网 - 备份:每天自动备份,rsync到另一台机器自建GitLab虽然需要维护,但完全掌控数据的感觉真的很好。
💡建议:先在测试服务器上搭建,熟悉流程后再部署到生产环境。数据迁移GitLab有完善的备份恢复机制。