ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-04-18 09:33:44  阅读:305  来源: 互联网

标签:CI git name gogs Gogs helloworld drone 构建 docker


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是否勾选

![](https://www.icode9.com/i/l/?n=20&i=blog/1411662/202104/1411662-20210418084922462-1743354349.png)

推送测试

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很简便、并且也有超高的自由度。

标签:CI,git,name,gogs,Gogs,helloworld,drone,构建,docker
来源: https://www.cnblogs.com/famine/p/14672820.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有