基于docker、rancher、gitlab实现自动化集成部署

基于docker快速搭建cicd学习环境
docker+gitlab+ci+rancher(k8s)
自动化集成部署实战,把你从简单重复的步骤中解放出来。

下面用到的公网ip和内网ip请自行使用你自己的ip

  1. 购买云服务器主机,选择centos7.9 64位版本。

阿里云竞价实例 4c16g,2毛钱一小时,买它两小时的玩儿。强烈推荐先用云服务来学习,本地网络各种慢,等你掌握了再探索在本地用服务器玩儿

  1. 安装docker运行环境并配置代理镜像

登陆上服务器执行下列命令安装

# 安装docker
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun

# 开启开机自启动docker
systemctl enable docker
systemctl start docker

# 添加阿里云的docker镜像代理,可以快速下载镜像
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://nj7j21cs.mirror.aliyuncs.com"],
  "insecure-registries": ["172.26.63.39:5000"]
}
EOF
# 重启docker容器
sudo systemctl daemon-reload
sudo systemctl restart docker
# 安装私有镜像仓库
docker run -d -p 5000:5000 --restart=unless-stopped registry:2

# 安装docker-compose
yum install -y docker-compose
  1. 安装gitlab

详细文档看这里 https://github.com/sameersbn/docker-gitlab

mkdir gitlab && cd gitlab

# 创建gitlab的docker-compose文件
# 注意,修改下面的 "hostIp" 为你当前主机的访问域名

sudo tee docker-compose.yml <<-'EOF'
version: '2.3'

services:
  redis:
    restart: always
    image: redis:6.2.6
    container_name: redis
    command:
    - --loglevel warning
    volumes:
    - ./redis:/var/lib/redis:Z

  postgresql:
    restart: always
    image: sameersbn/postgresql:12-20200524
    container_name: postgresql
    volumes:
    - ./posgresql:/var/lib/postgresql:Z
    environment:
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production
    - DB_EXTENSION=pg_trgm,btree_gist

  gitlab:
    restart: always
    image: sameersbn/gitlab:14.4.3
    container_name: gitlab
    depends_on:
    - redis
    - postgresql
    ports:
    - "88:80"
    - "822:22"
    volumes:
    - ./gitlab/data:/home/git/data:Z
    healthcheck:
      test: ["CMD", "/usr/local/sbin/healthcheck"]
      interval: 5m
      timeout: 10s
      retries: 3
      start_period: 5m
    environment:
    - DEBUG=false

    - DB_ADAPTER=postgresql
    - DB_HOST=postgresql
    - DB_PORT=5432
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production

    - REDIS_HOST=redis
    - REDIS_PORT=6379

    - TZ=Asia/Kolkata
    - GITLAB_TIMEZONE=Kolkata

    - GITLAB_HTTPS=false
    - SSL_SELF_SIGNED=false

    - GITLAB_HOST=hostIp
    - GITLAB_PORT=88
    - GITLAB_SSH_PORT=822
    - GITLAB_RELATIVE_URL_ROOT=
    - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
    - GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
    - GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string


    - GITLAB_ROOT_PASSWORD=
    - GITLAB_ROOT_EMAIL=

    - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
    - GITLAB_NOTIFY_PUSHER=false

    - GITLAB_EMAIL=admin@xxx.cn
    - GITLAB_EMAIL_REPLY_TO=admin@xxx.cn
    - GITLAB_INCOMING_EMAIL_ADDRESS=admin@xxx.cn

    - GITLAB_BACKUP_SCHEDULE=daily
    - GITLAB_BACKUP_TIME=01:00
    - GITLAB_BACKUP_EXPIRY=259200

    - PUMA_WORKERS=0
    - RACK_ATTACK_ENABLED=false # 修复登录登出500的bug
    - SIDEKIQ_CONCURRENCY=1
    - SIDEKIQ_MEMORY_KILLER_MAX_RSS=400000 # sidekiq 内存最大给400MB
EOF

docker-compose up -d

# 等3分钟访问 ip:88 即可
  1. 安装rancher

k8s的发行版,类似于centos是linux的发行版
文档看这里 http://docs.rancher.cn/

# 80和443留给ingress使用

docker run --privileged -d \
  --restart=unless-stopped \
  -v /mnt/data/rancher:/var/lib/rancher \
  -p 8080:80 -p 8443:443  rancher/rancher:v2.5.10
  
# 等3分钟访问 https://ip:8443 即可

登陆进去后右下角设置语言为中文,然后添加集群,创建一个自定义集群即可,这里名称填demo,其他值默认,直接点击下一步
[X]Etcd [X]Control Plane [X]Worker
这三个选项都选上,点击复制按钮,将命令复制到粘贴板,拿到服务器上执行
等到5~10分钟k8s安装组件,然后就可以在rancher的网页上启动容器了

  1. 安装gitlab-ci组件,开始搞CICD

    1. 在rancher网站上找到集群的kubeconfig配置文件,写入到有kubectl工具的机器上,这里写入在服务器”/root/.kube/config”路径下

    2. 在服务器上安装kubectl

      # 参考 https://www.kubernetes.org.cn/installkubectl
      curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
      chmod +x ./kubectl
      sudo mv ./kubectl /usr/bin/kubectl
      
    3. 可以正常使用kubectl工具查看k8s的节点信息了

      kubectl get nodes
      
    4. http://ip:88/admin/runners 可以看到runners的注册地址和注册token

    5. 创建gitlab-runner.yml文件在k8s里启动gitlab-runner

      sudo tee gitlab-runner.yml <<-'EOF'
      
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: gitlab-runner
        namespace: default
      spec:
        minReadySeconds: 15
        selector:
          matchLabels:
            app: gitlab-runner
        replicas: 3
        template:
          metadata:
            labels:
              app: gitlab-runner
          spec:
            containers:
              - name: gitlab-runner
                image: registry.cn-beijing.aliyuncs.com/guanweiming/gitlab-runner:v14.2.0
                imagePullPolicy: Always
                env:
                  - name: GITLAB_URL
                    value: http://121.89.220.75:88
                  - name: CI_TOKEN
                    value: JNsinRK_Xy-GGVyJqo-5
                  - name: TAG_NAME
                    value: prod
                volumeMounts:
                  - name: docker
                    mountPath: /usr/bin/docker
                  - name: docker-sock
                    mountPath: /var/run/docker.sock
                  - name: kubectl
                    mountPath: /usr/bin/kubectl
            volumes:
              - hostPath:
                  path: /usr/bin/docker
                name: docker
              - hostPath:
                  path: /var/run/docker.sock
                name: docker-sock
              - hostPath:
                  path: /usr/bin/kubectl
                name: kubectl
         
      ---
      EOF
      
      # 部署到k8s中
      kubectl apply -f gitlab-runner.yml
      
  2. 测试cicd效果

    https://gitlab.coding-space.cn/guange/demo-cicd
    下载demo springboot项目上传到当前的gitlab上,可以看到代码推送到gitlab上之后,gitlab自动开始编译打包代码,部署docker镜像到k8s集群中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值