前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >docker gitlab构建镜像

docker gitlab构建镜像

作者头像
诺依阁
发布2025-03-16 20:20:02
发布2025-03-16 20:20:02
4010
代码可运行
举报
运行总次数:0
代码可运行

最近在研究流水线,对于我来说,自动构建并上传镜像是非常有必要的,一方面每次都需要执行代码,一方面每次都需要找到版本号,非常的麻烦。 在此,我顺便编写文章,记录gitlab快速搭建以及ci/cd部署。

配置要求: 4H 8G (可以自己电脑开自启动的虚拟机)

首先安装docker/docker-compose,nuoyis提供了快速安装脚本,在安装docker前全是n

代码语言:javascript
代码运行次数:0
运行
复制
curl -sSO https://shell.nuoyis.net/nuoyis-init.sh;bash nuoyis-init.sh

然后将下方docker-compose复制进去(注意要修改内容)

代码语言:javascript
代码运行次数:0
运行
复制
version: '3'
services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    restart: always
    privileged: true
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://你的外网机器IP:2236'
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        # 禁用 PUMA 集群模式
        puma['worker_processes'] = 0
        puma['min_threads'] = 1
        puma['max_threads'] = 2
        # 关闭监控
        prometheus_monitoring['enable'] = false
        alertmanager['enable'] = false
        node_exporter['enable'] = false
        redis_exporter['enable'] = false
        postgres_exporter['enable'] = false
        pgbouncer_exporter['enable'] = false
        gitlab_exporter['enable'] = false
        sidekiq['metrics_enabled'] = false
      GITLAB_ROOT_PASSWORD: '修改成你的密码'
    ports:
      - "2236:2236"
      - "2238:22"
    volumes:
      - /nuoyis-server/gitlab/config:/etc/gitlab
      - /nuoyis-server/gitlab/logs:/var/log/gitlab
      - /nuoyis-server/gitlab/data:/var/opt/gitlab
    networks:
      nuoyis-net:
        aliases:
          - nuoyis-gitlab
  gitlab-runner:
    image: gitlab/gitlab-runner:latest
    container_name: gitlab-runner
    restart: always
    privileged: true
    volumes:
      - /nuoyis-server/gitlab/runner:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      nuoyis-net:
        aliases:
          - nuoyis-gitlab-runner
networks:
  nuoyis-net:
    name: nuoyis-net
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 192.168.223.0/24
          gateway: 192.168.223.1

首先docker-compose启动,然后再去编写gitlab-runner

代码语言:javascript
代码运行次数:0
运行
复制
docker-compose -f gitlab.yaml up -d

gitlab-runner 启动文件编写 首先获取token(修改链接快速访问),访问后在右边三个点内

代码语言:javascript
代码运行次数:0
运行
复制
http://IP:2236/admin/runners
{D7A859D3-157D-4245-B77F-49C726323FE6}.png
{D7A859D3-157D-4245-B77F-49C726323FE6}.png
代码语言:javascript
代码运行次数:0
运行
复制
cat > /nuoyis-server/gitlab/runner/config.toml << EOF
concurrent = 1
check_interval = 0
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "nuoyis-runner"
  url = "http://192.168.223.1:2236/"
  id = 1
  token = "gitlab生成的token"
  token_obtained_at = 2025-03-13T19:16:59Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  [runners.cache]
    MaxUploadedArchiveSize = 0
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "docker:20.10.8"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock","/cache"]
    shm_size = 0
    network_mtu = 0
EOF

在物理机上使用git上传项目

代码语言:javascript
代码运行次数:0
运行
复制
mkdir nuoyis-lnmp-np
# 把东西复制一个目录里或者提前有目录
# 有目录写法
# rm -rf .git
# 创建目录写法
# mv ./* 
# cd nuoyis-lnmp-np
git init
git config --global user.name "nuoyis"
git config --global user.email "nuoyis@nuoyis.net"
# main分支可以切换别的分支
git checkout -b main
git add .
git commit -m "初次上传"
git remote add origin http://IP地址:2236/nuoyis(用户名)/nuoyis-lnmp-np(库名).git
git pull origin main
git push -u origin main

gitlab docker构建 .gitlab.yml 编写示范 首先在库的根目录创建build.json

代码语言:javascript
代码运行次数:0
运行
复制
{
  "name": "nuoyis-lnmp-np",
  "version": "0.1.3"
}

然后获取token并填入(修改后访问快速到达)

代码语言:javascript
代码运行次数:0
运行
复制
http://IP:2236/用户/库名/-/settings/access_tokens
http://IP:2236/用户/库名/-/settings/ci_cd#js-cicd-variables-settings

再在根目录下创建.gitlab.yml

代码语言:javascript
代码运行次数:0
运行
复制
stages:
  - build
  - deploy

nuoyis_image_tag:
  image: ubuntu:20.04
  stage: build
  except:
    - build.json
    - README.md
  script:
    - echo "Changing to domestic mirrors for faster package installation"
    - cp /etc/apt/sources.list /etc/apt/sources.list.bak  # 备份原始源列表
    - sed -i 's/http:\/\/archive.ubuntu.com/https:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list  # 更换为阿里云镜像源
    - sed -i 's/http:\/\/security.ubuntu.com/https:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list  # 更换为阿里云镜像源
    - apt-get -o Acquire::https::Verify-Peer=false -o Acquire::https::Verify-Host=false update -y && apt-get -o Acquire::https::Verify-Peer=false -o Acquire::https::Verify-Host=false upgrade -y && apt-get -o Acquire::https::Verify-Peer=false -o Acquire::https::Verify-Host=false install -y ca-certificates  # 更新源列表
    - apt-get install -y git curl build-essential jq  # 安装常用工具,如 git, curl 等
    - current_version=$(jq -r '.version' build.json)
    - IFS='.' read -ra version_parts <<< "$current_version"
    - ((version_parts[2]++))
    - new_version="${version_parts[0]}.${version_parts[1]}.${version_parts[2]}"
    - jq ".version = \"$new_version\"" build.json > temp.json
    - mv temp.json build.json
    - git config user.name "nuoyis"
    - git config user.email "nuoyis@nuoyis.net"
    - git remote rm origin
    - git remote add origin http://oauth2:$GitLab_Access_Tokens@你的IP:2236/nuoyis/nuoyis-lnmp-np.git
    - git add build.json
    - git commit -m "use to $new_version"
    - git push origin HEAD:main -o ci.skip
    - echo "VERSION=$new_version" > nuoyis.env
  artifacts:
    paths:
      - nuoyis.env
  only: 
    - main

nuoyis_image_build:
  image: docker:20.10.8
  timeout: 10 hours
  stage: deploy
  dependencies:
    - nuoyis_image_tag
  services:
    - name: docker:20.10.8-dind
      alias: docker
      command: ["--insecure-registry=0.0.0.0/0"]
  variables:
    DOCKER_DRIVER: overlay2  # 使用 overlay2 存储驱动
  script:
    - export $(cat nuoyis.env | xargs)
    - echo $VERSION
    - echo "Building Docker image..."
    - docker build --no-cache -t "nuoyis-lnmp-np:$VERSION" -f ./dockerfile/dockerfile .
    - docker tag "nuoyis-lnmp-np:$VERSION" "registry.cn-hangzhou.aliyuncs.com/nuoyis/nuoyis-lnmp:$VERSION"
    - docker tag "nuoyis-lnmp-np:$VERSION" "registry.cn-hangzhou.aliyuncs.com/nuoyis/nuoyis-lnmp:latest"
    - 'docker login --username=$DOCKER_USERNAME --password=$DOCKER_PASSWORD registry.cn-hangzhou.aliyuncs.com'
    - docker push registry.cn-hangzhou.aliyuncs.com/nuoyis/nuoyis-lnmp:latest
    - docker push registry.cn-hangzhou.aliyuncs.com/nuoyis/nuoyis-lnmp:$VERSION
  only:
    - main

流水线执行检测

2025-03-15T11:11:47.png
2025-03-15T11:11:47.png

流水线发布

2025-03-15T11:09:58.png
2025-03-15T11:09:58.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档