zoukankan      html  css  js  c++  java
  • Gogs私有git仓库 + Drone构建CI/CD

    Gogs私有git仓库 + Drone构建CI/CD平台

    参考便捷搭建教程:https://github.com/alicfeng/gogs_drone_docker

    前提

    • 安装有docker、docker-compose
    • 安装有git
    • 安装有mysql

    使用docker-compose安装gogs、Drone(建议先看完文章)

    # 拉取代码:
    git clone https://github.com/alicfeng/gogs-drone-docker.git
    
    ## 在 .drone.yml中,把 - DRONE_USER_CREATE=username:${DRONE_ADMIN},admin:true 
    ## 改为 DRONE_USER_CREATE=username:admin,admin:true 
    ## 不写一个用户的话,会导致无法触发自动构建任务。
    
    # 进入项目目录,然后使用docker-compose运行
    cd gogs-drone-docker && docker-compose up -d
    
    

    ps: 安装报错解决:

    error:

    ERROR: Network ev-dev-network declared as external, but could not be found. Please create the network manually using `docker network create ev-dev-network` and try again.
    

    执行命令:

    docker network create ev-dev-network
    

    初始化gogs

    参照文章:http://www.mdslq.cn/archives/1a623683.html

    按照里面的图进行gogs初始化


    配置Drone自动构建Spring boot项目

    拉取项目代码

    地址:https://github.com/Famine-Life/Springboot-helloworld-drone

    编写 .rone.yml 文件,用来构建自动构建任务

    # drone 本地构建
    kind: pipeline
    type: docker
    name: MyHelloWorld
    
    # drone构建步骤
    steps:
      # 1.maven打包
      - name: maven compile
        pull: if-not-exists
        image: maven:ibmjava-alpine
        volumes:
          # maven构建缓存
          - name: cache
            path: /root/.m2
          # 挂载宿主机的目录
          - name: data
            path: /home
        commands:
          # 开始打包maven工程
          - ls
    #      - cd springboot-helloworld
          - mvn clean package -Dmaven.test.skip=true
          # 将打包后的文件复制到宿主机映射目录
          - cp target/*.jar /home
          - cp Dockerfile /home
    
      # 2.使用ssh访问主机制作镜像并运行
      - name: ssh commands
        pull: if-not-exists
        image: appleboy/drone-ssh:1.5.7
        settings:
          host: 60.205.254.71
          username: root
          password: 
            # 从drone仓库配置中秘密空间读取密码
            from_secret: ssh_password
          port: 22
          # 注意把下面的 springboot-helloworld 改成自己项目mvn pkg会生成的jar包名称
          script:
            - echo =======暂停容器=======
            - docker stop `docker ps -a | grep springboot-helloworld | awk '{print $1}' `
            - echo =======暂停旧容器和镜像=======
            - docker rm -f `docker ps -a | grep springboot-helloworld | awk '{print $1}' `
            - docker rmi `docker images | grep springboot-helloworld | awk '{print $3}' `
            - echo =======开始构建新镜像=======
            - cd /data/drone/helloDemo
            - docker build -t springboot-helloworld:latest .
            - echo =======镜像列表,如果服务器镜像太多建议注释=======
            - docker images
            - echo =======开始部署应用=======
            - docker run -d -p 8080:8080 --name springboot-helloworld springboot-helloworld:latest
            - echo =======清理构建文件,建议保留=======
            #- rm -rf *
            - echo =======部署成功=======
    
    # 3.钉钉通知 (注释掉,没测试过)
    #  - name: dingTalk notification
    #    pull: if-not-exists
    #    image: guoxudongdocker/drone-dingtalk:latest
    #    settings:
    #      token:
    #        from_secret: dingtalk_token
    #      type: markdown
    #      message_color: true
    #      message_pic: true
    #      sha_link: true
    #    when:
    #      status: [failure, success]
    
    # 挂载的主机卷,可以映射到docker容器中
    volumes:
      # maven构建缓存
      - name: cache
        host:
          # path: /tmp/cache/.m2
          path: /var/lib/cache
      # maven构建后与宿主机通信的共享目录
      - name: data
        host:
          path: /data/drone/helloDemo
    
    # drone执行触发器
    trigger:
      branch:
        - master
    
    

    注意事项:

    1. 在drone项目中配置,配置ssh_passworld(也就是服务器的远程连接密码。drone官网也有提供配置ssh key的配置)

    1. 把host: 60.205.254.71改成你的ip

    2. 配置文件中的路径:/var/lib/cache 、/data/drone/helloDemo,drone竟然不会自动构建!!,假设我们的服务器该路径不存在,它会报错 (观察第四点的log日志看出来的)...就无语 : P ,自行手动创建,或者直接写存在的路径。

    3. 最值得注意的一点:我发现ssh帮我们执行shell的时候,有些构建命令出错、drone是不会提示执行失败的。它有时候有不停的重复运行、或者也返回执行成功的标识,就很离谱。

    4. 如果push代码后,并没有生成构建任务,检查两点:

      (1)在git仓库设置中的管理web钩子,可能会没有填写ip,点击修改加上。并且点击进去可以推送测试

    ​ (2)检查drone项目的Trusted是否勾选


    推送测试

    demo搭建、运行完成后,下面在项目代码中添加一个接口作为一个持续集成的测试。

    在原有的 /hello下面,加上/test

     @GetMapping("/test")
        public String test() {
            return "Hello Drone!";
        }
    
    

    然后,push到gogs的git库:git push

    构建信息:

    • 不小心push了不需要的idea文件,clone代码用了41秒

    • maven编译由于java文件少、用了7秒

    • build镜像到运行容器,用了13秒

    (以上用时没有什么意义,单纯无聊了)

    感受

    1. 因为安装gogs、drone,用的docker,所以,当安装失败时候完全可以删库重来。

    2. 其次,配置自动构建任务只需要编写yml文件,所有的环境都从docker镜像来,比起jenkins要配置各种东西,简直不要太舒服。

    3. 最后一点,目前我没有搭建有docker私有仓库,如果公司有搭建私有仓,那么构建镜像push到私有仓,剩下的就交给运维吧。。

    个人认为,Drone很简便、并且也有超高的自由度。

  • 相关阅读:
    POJ
    POJ
    HDU
    HDU
    HDU
    POJ
    HDU
    POJ
    A-meeting 2019牛客暑期多校第四场 (树的直径)
    算法与数据结构实验题 2.1 塔防
  • 原文地址:https://www.cnblogs.com/famine/p/14672820.html
Copyright © 2011-2022 走看看