minikube对接gitlab+drone

2,037 阅读1分钟

为什么要搭建gitlab+drone

为实现devops的自动化部署,这里采用了gitlab+dronoe(服务器资源允许的情况下,可采用jenkins)的模式。后续会介入minikube中

gitlab

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务

  • 安装
    • docker pull gitlab/gitlab-ce:13.7.1-ce.0
    • 为了能修改gitlab的external_url,修改出口80端口
    • docker run -it -d --detach --restart unless-stopped -p 13080:13080 -p 13443:443 -p 13022:22 --name gitlab gitlab/gitlab-ce:13.7.1-ce.0
  • 配置
    • 配置nginx反向代理
    upstream gitlab {
    	server xxxx:13080;
    }
    
    server {
        listen       80;
        listen  [::]:80;
        server_name  git.tool.mybns.cn;
    
        #charset koi8-r;
        access_log  /var/log/nginx/git.tool.mybns.cn.success.log  main;
        error_log /var/log/nginx/git.tool.mybns.cn.error.log error;
    
        location / {
            client_max_body_size 1024m;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 反向代理到 gitlab 内置的 nginx
        proxy_pass http://gitlab;
        index index.html index.htm;
        }
    }
    
    • 修改配置
      • vim /etc/gitlab/gitlab.rb
         external_url 'http://192.168.***.***' 
         gitlab_rails['gitlab_shell_ssh_port'] = 13022
      
      • gitlab-ctl reconfigure
      • gitlab-ctl restart
  • 安装结果

drone

和 Jenkins 相比, Drone 就轻量的多了,从应用本身的安装部署到流水线的构建都简洁的多。由于是和源码管理系统相集成,所以 Drone 天生就省去了各种账户\权限的配置,直接与 gitlab 、 github 、 Bitbucket 这样的源码管理系统操作源代码的权限一致

  • 安装
    • docker pull drone/drone:1.10.1
    • 安装文档:docs.drone.io/server/prov…
    • gitlab创建应用
    • 记得保存appid和密钥
    • 创建drone密钥,用于安装runner使用:openssl rand -hex 16
    • 开始安装
    docker run \
    --volume=/var/lib/drone:/data \
    --env=DRONE_GITLAB_SERVER=https://gitlab.com \
    --env=DRONE_GITLAB_CLIENT_ID={{DRONE_GITLAB_CLIENT_ID}} \
    --env=DRONE_GITLAB_CLIENT_SECRET={{DRONE_GITLAB_CLIENT_SECRET}} \
    --env=DRONE_RPC_SECRET={{DRONE_RPC_SECRET}} \
    --env=DRONE_SERVER_HOST={{DRONE_SERVER_HOST}} \
    --env=DRONE_SERVER_PROTO={{DRONE_SERVER_PROTO}} \
    --publish=2080:80 \
    --publish=2443:443 \
    --restart=always \
    --detach=true \
    --name=drone \
    drone/drone:1
    
    • nginx反向代理
    upstream drone {
    	server xxx:2080;
    }
    
    server {
        listen       80;
        listen  [::]:80;
        server_name  drone.tool.mybns.cn;
    
        #charset koi8-r;
        access_log  /var/log/nginx/drone.tool.mybns.cn.success.log  main;
        error_log /var/log/nginx/drone.tool.mybns.cn.error.log error;
    
        location / {
            client_max_body_size 1024m;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://drone;
            index index.html index.htm;
        }
    }
    
  • 安装结果

安装drone-docker-runner

  • docker pull drone/drone-runner-docker:1.6
  • 安装
docker run -d \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e DRONE_RPC_PROTO=https \
  -e DRONE_RPC_HOST=xxxxxxx \
  -e DRONE_RPC_SECRET=xxxxx \
  -e DRONE_RUNNER_CAPACITY=2 \
  -p 23000:3000 \
  --restart always \
  --name runner \
  drone/drone-runner-docker:1.6
  • 测试:docker logs runner

对接minikube测试

  • 注意:minikube apiserver端口为8443,具体可以在minikube服务器上查看~/.kube/config 文件
  • .drone.yml文件
kind: pipeline
type: docker
name: default

steps:
  - name: build
    image: golang
    commands:
      - go version

  - name: deploy
    image: danielgormly/drone-plugin-kube:0.2.0
    settings:
      template: ./testdrone.yaml
      server: https://xxxxx:8443
      token: xxxxx // 通过命令kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep default-token | awk '{print $1}') 获取default-token 改成你的accountService
      ca: xxxxx
  • testdrone.yaml文件
---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: '1'
    k8s.kuboard.cn/displayName: nginx
    k8s.kuboard.cn/ingress: 'true'
    k8s.kuboard.cn/service: ClusterIP
    k8s.kuboard.cn/workload: nginx
  generation: 1
  labels:
    k8s.kuboard.cn/layer: ''
    k8s.kuboard.cn/name: testdrone
  name: testdrone
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s.kuboard.cn/layer: ''
      k8s.kuboard.cn/name: testdrone
  template:
    metadata:
      labels:
        k8s.kuboard.cn/layer: ''
        k8s.kuboard.cn/name: testdrone
    spec:
      containers:
        - image: 'nginx:1.19.6-alpine'
          imagePullPolicy: IfNotPresent
          name: testdrone
  • 执行效果
  • 查看pod

安装完毕