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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM