Docker本地部署gitlab实践(windows,linux)

Docker本地部署 gitlab(windows&linux)

1. 版本介绍

名词解释:

ce - 社区版(免费) ee - 企业版(收费) jh - 极狐GitLab 中国发行版(包含 CE 和 EE 功能,基础功能免费)

1.1 官方

1.官方:about.gitlab.com/

2.官方ce版本deb安装包:packages.gitlab.com/gitlab/gitl...

3.官方docker镜像:hub.docker.com/r/gitlab/gi...

4.官方docker安装教程:

ps:注意此为ee版(企业版),需在拉取镜像时配置替换为gitlab-ce

5.官方配置说明:docs.gitlab.com/install/doc...

1.2 国内代理

1.中文版介绍:gitlab.cn/

  • 极狐是Gitlab的国内代理

2.国内官方安装文档:gitlab.cn/install Ubuntu存在apt install的简易安装方式

  • 未对Windows提供安装包

2. 初始化部署(windows&linux)

2.1部署

2.1.1 系统准备

windows系统需要安装ubuntu(Hyper-V资源开销大)

csharp 复制代码
网络不好的请查看:https://learn.microsoft.com/zh-cn/windows/wsl/ 下的"旧版本的手动安装步骤"
​
网络良好的流程:
        1. 控制面板->程序->启用或关闭Windows功能
            --找到'虚拟机平台'与"适用Linux的Windows子系统" 勾选后点击确定并重启电脑
        2. 管理员身份运行Powershell 
            wsl --install   下载安装wsl(从微软下载
            )
            wsl --set-default-version 2   设置默认版本WSL2
​
            wsl --list --verbose    查看版本
            #   NAME      STATE           VERSION
            # * Ubuntu    Running         2
​
            wsl 进入ubuntu
        
​

linux 系统不用管

2.1.2 安装docker

windows

rust 复制代码
docker官网安装:https://www.docker.com/products/docker-desktop/
1. 下载安装Docker Desktop     Download for Windows(版本) 
2. 无需登录打开docker软件进入setting->General
    确保 Use the WSL 2 based engine 被勾选
3. setting->Resources->WSL integration
    确保你的ubuntu已被集成
4. 配置镜像源 setting -> Docker Engine 下加入:
  "registry-mirrors": [
    "https://docker.xuanyuan.me",
    "https://docker.1ms.run",
    "https://docker.m.daocloud.io",
    "https://docker.unsee.tech",
    "https://docker.1panel.live",
    "https://hub.rat.dev",
    "https://docker.rainbond.cc"
  ]
ps:Docker Desktop 自带docker compose

linux

lua 复制代码
1.安装 docker (以及 docker compose)
    sudo wget -qo-https://get.docker.com/| sh   安装docker
    docker --version 
    
2.可选:将当前用户添加到docker用户组
    sudo usermod -aG docker <用户名>             后续执行docker命令时,不必添加sudo
    
3. GitLab镜像下载(如果.yaml文件配置了image这条便不需要)
    docker pull gitlab/gitlab-ce:latest         最新版(官方)
    "latest"可以换成指定版本号
    
4. 查看版本
    docker --version
    docker compose --version

2.1.3 docker-compose.yaml 文件编写

请选好自己指定的位置创建logs、data、config文件夹

同目录创建docker-compose.yaml文件:

yaml 复制代码
services: #服务
  gitlab: #容器
    # image: gitlab/gitlab-ce #官方社区版本
    image: registry.gitlab.cn/omnibus/gitlab-ce:latest #极狐版 镜像
    container_name: gitlab #容器名
    user: root
    restart: always
    ports: # 接口映射 宿主机端口:docker内部端口  监听外部端口映射docker内部端口
      - "9443:443"
      - "9080:80"
      - "9022:22"
    volumes: # 数据卷地址
      - "./config:/etc/gitlab"
      - "./logs:/var/log/gitlab"
      - "./data:/var/opt/gitlab"
    shm_size: 1g # 共享内存大小 能给大给大点根据各人电脑性能
    logging: #日志
      driver: json-file
      options:
        max-size: "300m" # 日志存储大小 自定义大小
        max-file: "3"

2.1.4 启动docker

在.yaml文件同级目录下执行:

docker compose up -d (-d后台运行)

docker compose ps 查看容器是否运行成功,状态为healthy则为成功

docker compose down 关闭运行并删除容器

docker compose stop 停止容器,不删除(推荐)

docker compose start 启动容器

docker compose logs -f 查看日志等待初始化

ps:gitlab初始化根据电脑性能可能需要2-10分钟之间

2.1.5 网络访问

初始化成功后访问方式 (.yaml文件监听默认80端口映射 9080)

本地访问:localhost:9080

私网访问:私网ip:9080

公网访问:需要配置

  1. 外网穿透(自行查询)

  2. SSH 隧道转发

    ssh -R 9080:localhost:9080 root@你的云服务器IP

    做好nginx代理配置

  3. 申请公网ip(收费)

2.2 初始化

2.2.1 登录

访问成功之后登录

密码在宿主机上查询

docker exec -it gitlab cat /etc/gitlab/initial_root_password

2.2.2 其他操作

设置时区

汉化程度

仓库头设置(ssh)

ps: 都在web页面里设置

CI/CD自动化部署

1. 注册gitlab-runner

1.1在docker-compose.yaml 配置

yaml 复制代码
#如果是和gitlab写一起那就相当于是 两个容器放一个服务里,这个"services:" 可以不写
services:
  gitlab-runner:
    image: gitlab/gitlab-runner:latest
    # image: registry.gitlab.cn/runner/gitlab-runner:latest
    container_name: gitlab-runner
    restart: always
    volumes:
      - /srv/gitlab-runner/config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Asia/Shanghai  # 设置时区,可选
    logging:
      driver: json-file
      options:
        max-size: "10m" # 日志存储大小
        max-file: "3"

PS:同服务内的容器相互通信端口是docker容器的端口不是外部端口,这点在runner注册时会用到

运行 docker compose up -d

1.1.2 获取gitlab token令牌

确定Runner的作用范围

  • 项目级Runner(最常用):进入你的项目 → 左侧菜单 设置 → CI/CD → 展开"Runners"部分 → 点击 "新建项目Runner"。
  • 群组级Runner:进入群组 → 设置 → CI/CD → Runners → "新建群组Runner"。
  • 实例级Runner(需要管理员权限):点击左侧边栏底部 "管理员" → CI/CD → Runners → "新建实例Runner"。

填写配置并创建

  • 在弹出的窗口中,填写Runner的描述(例如 docker-runner)、标签(例如 docker, build)等信息。
  • 点击 "创建Runner"。

获取身份验证令牌

  • 创建成功后,页面会显示一条命令,其中包含一个以 glrt- 开头的令牌,这就是身份验证令牌 (Authentication Token)。请立即保存好这个令牌,因为关闭页面后就无法再查看。

1.1.3 注册runner

  1. 进入已运行的 gitlab-runner 容器

docker exec -it gitlab-runner sh

  1. 执行注册命令

    gitlab-runner register

  2. 录入信息

    提示信息 录入内容 说明
    GitLab URL http://gitlab:80 容器间通信 不是外部端口号9080
    Registration token glrt-开头的 获取的token令牌
    Runner description 例:docker-runner runner描述 名称
    Executor docker 选择Docker执行器

一键式命令:

arduino 复制代码
docker exec -it gitlab-runner gitlab-runner register \
  --non-interactive \
  --url "http://gitlab:80" \
  --token "你的glrt-xxxxx令牌" \
  --executor "docker" \
  --docker-image "alpine:latest" \
  --description "docker-runner" \
  --tag-list "docker,build"

看到:

Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"

则为成功注册

2 流水线runner

2.1 创建项目&配置

关于ssh配置,项目上传不做过多赘述

1.2.2 .gitlab-ci.yml文件

yaml 复制代码
stages: # 生命一共几个步骤
- build
- test
- deploy
build: # 这是job名称 可以随便写
  stage: build # 这个对应上面的stages
  tags:
  - myProject # tags指定的runner来做这步工作
  script: # 执行代码
  - echo "代码编译..."
test:
  stage: test
  tags:
  - myProject
  script:
  - echo "测试代码..."
deploy:
  stage: deploy
  tags:
  - myProject
  script:
  - echo "测试部署项目..."
  - echo "测试部署完成..."
​
  #将当前的index.html推送发布到上线的服务器上(需要做免交互ssh配置:自行查询)
  # - scp index.html root@127.0.0.1:/usr/share/nginx/html/    
​

ps:更复杂的配置请查看

docs.gitlab.cn/docs/jh/ci/...

相关推荐
牛奶咖啡131 天前
DevOps自动化运维实践_使用再生龙对Linux系统进行备份还原
运维·自动化·devops·linux系统的备份还原·linux系统克隆备份·再生龙
觅特科技-互站2 天前
告别手动微调Prompt:DevOps用陌讯Skills重构AI运维工作流
运维·prompt·线性回归·kmeans·devops
加农炮手Jinx2 天前
Flutter for OpenHarmony: Flutter 三方库 icon_font_generator 自动化将 SVG 图标集转化为字体文件(鸿蒙矢量资源全自动管理)
运维·flutter·华为·自动化·harmonyos·devops
codingWhat2 天前
手把手系列之——前端工程化
ci/cd·devops·前端工程化
何以不说话2 天前
DevOps、Git 和 GitLab
git·gitlab·devops
RoyLin4 天前
你的 nginx 在扼杀 AI 服务——为什么需要重新设计流量层
人工智能·devops
henry1010104 天前
Ansible自动化运维全攻略(AI生成)
linux·运维·python·ansible·devops
henry1010105 天前
传统IT运维向DevOps转型的路径分析
运维·devops·系统管理
科济管线制药IPD咨询7 天前
从IPD实践者到研发体系架构师(四):在经典IPD阶段关卡基础上,如何融入敏捷迭代、DevOps循环和客户共创触点?
运维·devops