最近在研究流水线,对于我来说,自动构建并上传镜像是非常有必要的,一方面每次都需要执行代码,一方面每次都需要找到版本号,非常的麻烦。
在此,我顺便编写文章,记录gitlab快速搭建以及ci/cd部署。
配置要求: 4H 8G (可以自己电脑开自启动的虚拟机)
首先安装docker/docker-compose,nuoyis提供了快速安装脚本,在安装docker前全是n
1
| curl -sSO https://shell.nuoyis.net/nuoyis-init.sh;bash nuoyis-init.sh
|
然后将下方docker-compose复制进去(注意要修改内容)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| 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
1
| docker-compose -f gitlab.yaml up -d
|
gitlab-runner 启动文件编写
首先获取token(修改链接快速访问),访问后在右边三个点内
1
| http://IP:2236/admin/runners
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| 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上传项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 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
1 2 3 4
| { "name": "nuoyis-lnmp-np", "version": "0.1.3" }
|
然后获取token并填入(修改后访问快速到达)
1 2
| http://IP:2236/用户/库名/-/settings/access_tokens http://IP:2236/用户/库名/-/settings/ci_cd#js-cicd-variables-settings
|
再在根目录下创建.gitlab.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| 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
|
流水线执行检测

流水线发布
