zoukankan      html  css  js  c++  java
  • 使用docker最小化部署Git CI环境

    使用docker最小化部署Git CI环境

    写就时间戳 2021-05-27

    本文使用环境:

    Debian GNU/Linux 10 (buster) / 内核版本号 Debian 4.19.146 
    ### Ubuntu18+应该也是完全通用,但并没有测试
    docker 20.10.6
    docker-compose 1.24.1
    caddy v2.4.1
    gitea 1.14.2
    drone v1
    

    各组件作用简介

    模块 作用
    docker 如果你需要看这个,我觉得你适合继续看此文
    docker-compose docker的包装工具,自动启动多个 docker container
    caddy 为 gitea 对外提供一个webserver,自动申请https证书等
    gitea git 服务器
    drone CI 服务 包含 drone server, drone runner

    OS

    初始化Debian

    使用云服务商自动创建并选择os最简单,建议使用阿里云、腾讯云。

    更改sshd默认端口号

    如果不改这个端口号,就需要调整gitea端口,那样的话,默认的clone地址中就会有自定义端口号,对某些兼容性不够的工具造成困扰。

    /etc/ssh/sshd_config

    Port 2222
    

    改好sshd配置,重启一下ssh

    systemctl restart ssh
    

    Install docker

    如果你过去安装过 docker,先删掉:

    apt-get remove docker docker-engine docker.io
    
    apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
    
    curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
    

    下面的镜像地址,选1个就好

    # 使用阿里云镜像地址
    add-apt-repository 
       "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/debian 
       $(lsb_release -cs) 
       stable"
       
    # 使用清华镜像地址
    add-apt-repository 
       "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian 
       $(lsb_release -cs) 
       stable"
       
    apt-get update
    apt-get install docker-ce
    

    配置docker

    cat <<EOF > /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"], # 指定一个docker拉取加速地址
       "exec-opts": ["native.cgroupdriver=systemd"],
       "log-driver": "json-file",
       "log-opts": {
         "max-size": "100m"
       },
       "data-root":"/data/dockerd", # 更换使用自定义docker数据目录
       "storage-driver": "overlay2"
    }
    EOF
    
    systemctl stop ufw
    update-rc.d ufw disable
    
    systemctl  reload docker
    systemctl  restart docker
    

    安装 docker-compose

    curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    

    启动gitea后,需要先创建 oauth 应用

    drone server自身没有提供登录系统,而是通过 gitea 的 oauth 应用接入来完成鉴权。

    启动 drone server 前必须指定。

    配置 drone-server drone-runner

    • 生成随机密钥 为 runner->server 执行需要

    docker-compose

    version: "2"
    
    networks:
      gitea:
        external: false
    
    services:
      gitea:
        # image: gitea/gitea:1.14.2
        image: gitea/gitea:1.13.7
        environment:
          - USER_UID=1000
          - USER_GID=1000
        restart: always
        networks:
          - gitea
        volumes:
          - /data/gitea:/data
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
        ports:
          - "3000:3000"
          - "22:22"
    
      drone-server:
        image: drone/drone:1
        ports:
          - "8080:80"
        volumes:
          - /data/drone-server:/data
        environment:
          - DRONE_GIT_ALWAYS_AUTH=true
          - DRONE_AGENTS_ENABLED=true
          - DRONE_USER_CREATE=username:superadmin,admin:true
          - DRONE_GITEA_SERVER=https://gitea.somewhere.com
          - DRONE_GITEA_CLIENT_ID=abcdefgh-1234-5678-b910-725350408624
          - DRONE_GITEA_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
          - DRONE_RPC_SECRET=da0121bb74c18666c32515e8b93cd5c5   # 和下面部分一致
          - DRONE_SERVER_HOST=gitea-drone.somewhere.com
          - DRONE_SERVER_PROTO=https
          - DRONE_TLS_AUTOCERT=false
    
      drone-runner:
        image: drone/drone-runner-docker:1
        #ports:
          #- "8080:80"
        volumes:
          - /data/drone-runner:/data
          - /var/run/docker.sock:/var/run/docker.sock
        environment:
          - DRONE_RPC_PROTO=http
          - DRONE_RPC_HOST=10.10.99.143:8080
          - DRONE_RPC_SECRET=da0121bb74c18666c32515e8b93cd5c5   # 和上面配置一致
          - DRONE_RUNNER_CAPACITY=2
          - DRONE_RUNNER_NAME=runner-01
      
    

    Caddyfile

    gitea.somewhere.com {
        reverse_proxy localhost:3000 {
            # transparent
        }
    }
    
    gitea-drone.somewhere.com {
        reverse_proxy localhost:8080 {
            # transparent
        }
    }
    

    demo 项目

    在项目中添加如下文件:

    .drone.yml

    kind: pipeline
    type: docker
    name: build
    
    # volumes:
    # - name: dockersock
    #   host:
    #     path: /var/run/docker.sock
    
    trigger:
      branch:
      - master
      - testing
    
    steps:
    - name: image
      image: alpine:3.11
      # volumes:
      # - name: dockersock
      #   path: /var/run/docker.sock
      environment:
        docker_user:
          from_secret: docker_user
        docker_password:
          from_secret: docker_password
        docker_host:
          from_secret: docker_host
      commands:
      # - echo $docker_user
      # - echo "docker pswd=$docker_password"
      # - docker build -t ${DRONE_REPO_NAME}:${CI_COMMIT_BRANCH} .
      # - docker rm -f "${DRONE_REPO_NAME}" || true
      # - docker run -itd --name ${DRONE_REPO_NAME} -v /data/${DRONE_REPO_NAME}/config.yaml:/config.yaml --restart always -p9090:80 ${DRONE_REPO_NAME}:${CI_COMMIT_BRANCH}
      - echo "OK" && date && echo "done"
    
  • 相关阅读:
    常用软件
    树和二叉树的一些基本术语
    二分查找(Binary Search)
    GPIO模拟IIC接口信号质量分析
    PAT (Basic Level) Practise:1021. 个位数统计
    PAT (Basic Level) Practise:1017. A除以B
    PAT (Basic Level) Practise:1027. 打印沙漏
    文件操作:输出文件二进制数据
    阈值与平滑处理
    图像基本操作
  • 原文地址:https://www.cnblogs.com/morya/p/15077442.html
Copyright © 2011-2022 走看看