docker-compose+gitlab部署CICD过程

 更新时间:2026年05月11日 09:43:26   作者:叮当~~~  
这篇文章主要介绍了docker-compose+gitlab部署CICD过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1.概念

CICD,顾名思义就是持续集成(Continuous Integration)和持续部署(Continuous Deployment)简称,指在开发过程中自动执行一系列脚本来减低开发引入 bug 的概率,在新代码从开发到部署的过程中,尽量减少人工的介入。

CICD,其实可以使用jenkinsfile,就象gitlab的 .gitlab-ci.yaml文件,把CICD的流程控制和步骤也作为开发的一部分,由开发去维护。并且可以很快的部署到多个环境。

持续集成:

持续集成指在和向远程仓库 push 代码后,在这次提交合并入主分支前进行一系列测试,构建等流程。

持续部署:

持续部署在持续集成的基础上更进一步,指将推送指仓库默认分支的部署至产品环境。如果这部分需要手动触发,这就是一个持续交付(Continuous Delivery)环节。

2.需要准备环境

192.168.78.129:docker、docker-compose、gitlab

192.168.78.130:docker、docker-compoe、gitrunner

每台服务器的CPU至少要4G及以上

3.部署过程

  • 两台机器都要执行的脚本:stop_safe.sh,docker_install.sh 
  • 两台机器都要部署 docker-compose

清理Centos7环境

[root@gitlab ~]# mkdir /data/
[root@gitlab data]# vim stop_safe.sh
#!/bin/bash
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

rpm -qa | grep ntpdate &>/dev/null || yum install ntpdate -y
ntpdate ntp1.aliyun.com   #同步时间

systemctl stop  NetworkManager && systemctl disable  NetworkManager
systemctl stop firewalld && systemctl disable firewalld  #关闭防火墙
grep -x "SELINUX=disabled"  /etc/selinux/config &>/dev/null
if [[  $? != 0 ]];then
        sed -i 's/=enforcing/=disabled/' /etc/selinux/config && setenforce 0
fi

grep swap /etc/fstab | grep ^# &>/dev/null
if [[ $? != 0  ]];then
        sed -i '/swap/s/^/#/g' /etc/fstab &&  swapoff -a
fi

sed -i 's/^GSSAPIAuthentication/#GSSAPIAuthentication/g' /etc/ssh/sshd_config
echo 'GSSAPIAuthentication no' >> /etc/ssh/sshd_config
grep "UseDNS *no"  /etc/ssh/sshd_config &>/dev/null || echo 'UseDNS no' >> /etc/ssh/sshd_config
systemctl restart sshd

yum install -y wget epel-release bash-completion.noarch net-tools
yum install -y python3-3.6.8-18.el7.x86_64
[root@gitlab data]# bash  stop_safe.sh

部署docker

[root@gitlab data]# cat docker_install.sh 
#!/bin/bash
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'ABC'
{
  "registry-mirrors": ["https://hiz48418.mirror.aliyuncs.com"]
}
ABC

# 获取本机IP
ETH_NAME=`route -n  | awk '($1 ~ "0.0.0.0"){print $NF}'`
IP=`ifconfig $ETH_NAME |  awk 'NR==2{print $2}'`

# 清空yum环境
rm -f /var/lib/rpm/__*
rpm --rebuilddb -v -v  &>/dev/null
 
yum clean dbcache
yum clean metadata
yum clean rpmdb
yum clean headers
yum clean all
 
rm -rf /var/cache/yum/timedhosts.txt
rm -rf /var/cache/yum/*


install_docker() {
        yum install -y yum-utils
       #使用阿里的下载地址
        yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
	sed -i 's/gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/docker-ce.repo	
	yum --enablerepo=docker-ce-stable clean metadata
	yum makecache
        yum install -y docker-ce docker-ce-cli containerd.io
        systemctl start docker
        systemctl enable docker
        echo -e "\033[32m######## docker version ########\033[0m"
	echo -n "$IP"
        docker --version
        echo -e "\033[32m############# END ##############\033[0m"
}
rpm -qa | grep docker-ce &>/dev/null && echo -e "\033[32m$IP docker already installed......\033[0m" || install_docker

[root@gitlab data]# bash docker_install.sh

[root@gitlab data]# systemctl status docker

部署docker-compose

[root@gitlab ~]# pip3 install docker-compose   #Centos7默认的python版本是2.7,本次部署需要python3以上的
#出现以下错误
 =============================DEBUG ASSISTANCE==========================
            If you are seeing an error here please try the following to
            successfully install cryptography:
    
            Upgrade to the latest pip and try again. This will fix errors for most
            users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
            =============================DEBUG ASSISTANCE==========================
    
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-cfg40vu0/cryptography/setup.py", line 14, in <module>
        from setuptools_rust import RustExtension
    ModuleNotFoundError: No module named 'setuptools_rust'
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-cfg40vu0/cryptography/

#以上错误的解决方法
[root@gitlab ~]# python3 -m pip install --upgrade --force pip
[root@gitlab ~]# pip3 install docker-compose
[root@gitlab ~]# docker-compose --version
docker-compose version 1.29.2, build unknown

部署gitlab

在192.168.78.129主机上使用docker 创建docker-compose.yml文件

[root@gitlab data]# cat docker-compose.yml 
version: '3'
services:
 gitlab:
  image: 'gitlab/gitlab-ce:latest' 
  restart: always
  container_name: "gitlab"
  privileged: true
  hostname: "192.168.78.129"
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://192.168.78.129'  #切记要改成自己主机的IP
      gitlab_rails["time_zone"] = "Asia/Shanghai"
      gitlab_rails["gitlab_shell_ssh_port"] = 1222
      nginx["listen_port"] = 80

  ports:
    - "80:80"
    - "8443:443"
    - "1222:22"

  volumes:
    - /data/gitlab/config:/etc/gitlab
    - /data/gitlab/data:/var/opt/gitlab
    - /data/gitlab/logs:/var/log/gitlab
    - "/etc/localtime:/etc/localtime:ro"

[root@gitlab data]# docker-compose up -d  #创建并后台运行所有容器
[root@gitlab data]# docker ps
CONTAINER ID   IMAGE                     COMMAND             CREATED       STATUS                 PORTS                                                                                                               NAMES
d3049dd0a779   gitlab/gitlab-ce:latest   "/assets/wrapper"   2 hours ago   Up 2 hours (healthy)   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:1222->22/tcp, :::1222->22/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp   gitlab
  • 等待gitab加载完成,就可以在浏览器上输入IP 访问
  • [root@gitlab data]# docker logs -f gitlab  #查看gitlab的日志
  • 首次访问如下,需要设置密码即可登入gitlab管理界面
  • 地址:http://IP
  • 账号:root
  • 密码:首次登入设置

非首次登入:

非首次登入,忘记密码的,需要修改用户、密码方法如下:
[root@localhost ~]# docker exec -it gitlab bash
root@192:/# cd /opt/gitlab/bin/
root@192:/opt/gitlab/bin# gitlab-rails console -e production
--------------------------------------------------------------------------------
 Ruby:         ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux]
 GitLab:       14.6.1 (661d663ab2b) FOSS
 GitLab Shell: 13.22.1
 PostgreSQL:   12.7
--------------------------------------------------------------------------------
Loading production environment (Rails 6.1.4.1)
irb(main):001:0> u=User.where(id:1).first
=> #<User id:1 @root>
irb(main):002:0> u.password='12345678'
=> "12345678"
irb(main):003:0> u.password_confirmation='12345678'
=> "12345678"
irb(main):004:0> u.save
=> true
irb(main):005:0> exit

安装gitlab-runner

在192.168.78.130主机上创建docker-compose.yml

[root@runner data]# cat docker-compose.yml 
version: '3'
services:
  gitlab-runner:

    container_name: gitlab-runner
    restart: always  
    privileged: true
    image: 'gitlab/gitlab-runner'      
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "/data/gitlab-runner/config:/etc/gitlab-runner"
      - "/etc/localtime:/etc/localtime:ro"
[root@runner data]# docker-compose up -d
[root@runner data]# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED             STATUS             PORTS     NAMES
462973a1c654   gitlab/gitlab-runner   "/usr/bin/dumb-init …"   About an hour ago   Up About an hour             gitlab-runner

获取注册token

在项目的settings-CI/CD-RUNNER中找到token

注册gitlab-runner

[root@runner data]# docker run --rm -t -i -v /data/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=8 revision=5316d4ac version=14.6.0
Running in system-mode.                            
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.78.129/                             
Enter the registration token:
9jT_yH5aK_HTBGgTyQX-
Enter a description for the runner:
[3f4049807752]: 
Enter tags for the runner (comma-separated):
docker    
Registering runner... succeeded                     runner=9jT_yH5a
Enter an executor: docker, docker-ssh, parallels, ssh, docker+machine, docker-ssh+machine, custom, shell, virtualbox, kubernetes:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

查看注册信息

docker exec gitlab-runner  cat /etc/gitlab-runner/config.toml

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • docker没有错误日志,镜像服务却启动不成功的问题以及排查方式

    docker没有错误日志,镜像服务却启动不成功的问题以及排查方式

    这篇文章主要介绍了docker没有错误日志,镜像服务却启动不成功的问题以及排查方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • docker-compose命令如何删除image的镜像

    docker-compose命令如何删除image的镜像

    这篇文章主要介绍了docker-compose命令如何实现删除image的镜像方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • Docker 修改docker存储位置 修改容器镜像大小限制操作

    Docker 修改docker存储位置 修改容器镜像大小限制操作

    这篇文章主要介绍了Docker 修改docker存储位置 修改容器镜像大小限制操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker Compose最常用命令(直接复制用)

    Docker Compose最常用命令(直接复制用)

    Docker Compose是Docker官方提供的一个用于管理多个容器的工具,可以使用docker-compose.yml文件定义和运行多容器应用,这篇文章主要介绍了Docker Compose最常用命令的相关资料,需要的朋友可以参考下
    2025-11-11
  • Docker使用Calico网络模式配置及问题处理方法

    Docker使用Calico网络模式配置及问题处理方法

    这篇文章主要介绍了Docker使用Calico网络模式配置及问题处理,设计思想是Calico不使用隧道或者NAT来实现转发,而是巧妙的把所有二三层流量转换成三层流量,并通过host上路由配置完成跨host转发,需要的朋友可以参考下
    2022-11-11
  • docker安装mysqld-exporter的实现

    docker安装mysqld-exporter的实现

    本文主要介绍了docker安装mysqld-exporter的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-05-05
  • Docker rocketmq部署的实现示例

    Docker rocketmq部署的实现示例

    最近学习使用 rocketmq,需要搭建 rocketmq 服务端,本文主要记录 rocketmq 搭建过程以及这个过程踩到的一些坑,感兴趣的可以了解一下
    2021-12-12
  • 镜像仓库 Harbor搭建和使用教程

    镜像仓库 Harbor搭建和使用教程

    本文给大家介绍镜像仓库 Harbor搭建和使用教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-01-01
  • Docker容器使用方法详解

    Docker容器使用方法详解

    容器是基于镜像创建的,容器中的进程依赖于镜像中的文件,那么本篇文章我们就来深入学习容器的基本操作方法,通过示例来加深各位看官对docker容器操作的理解以及记忆,需要的朋友可以参考下
    2022-07-07
  • win7下docker安装与报错问题的解决方法

    win7下docker安装与报错问题的解决方法

    这篇文章主要为大家详细介绍了win7下docker安装与报错问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06

最新评论