中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么快速入門輕量快速的CI工具Drone

發布時間:2021-10-12 10:55:53 來源:億速云 閱讀:159 作者:柒染 欄目:云計算

怎么快速入門輕量快速的CI工具Drone,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

前言

公司之前一直在使用 Jenkins 作為 CI/CD 工具, Jenkins 非常強大,它完成了幾乎所有 CI/CD 的工作,并且應用于整個團隊有好長一段時間了。但是隨著公司推薦數字化、智慧化,以及服務容器化的推進, Jenkins 的一些弊端也凸顯了出來:

  • 重量級: Jenkins 功能十分齊全,幾乎可以做所有的事情。但是這也是他的一個弊端,過于重量級,有時候往往一個小的修改需要改動許多地方,升級\下載插件后需要進行重啟等。

  • 升級不易: 在一些安全 Jenkins 相關的安全漏洞被公開后,我們會對 Jenkins 進行升級,但這也不是一件容易的事。之前就出現過升級\重啟后,所有 job 丟失,雖然我們所有項目配置都是以 Jenkinsfile 的形式統一存儲,但是每個 job 都需要重新重新創建,包括每個 job 的權限....._(′?`」 ∠)_

  • 權限控制復雜: 這其實也是 Jenkins 的一大優勢,可以精確控制每個用戶的權限,但是需要花費更多時間去配置,時間長了也會出現權限混亂的問題。

  • UI 界面: 這個其實是吐槽最多的部分,雖然有諸如:Blue Ocean 這樣的插件來展示 pipeline ,但是還是沒有從根本改變它簡陋的 UI 界面。

那么為什么選擇使用 Drone 呢?

其實在 GitHub 上提交 PR 后,大部分開源項目都會使用 travis-ci 對提交的代碼進行 CI 及檢查,而如果是 Kubernetes 相關的項目,則會使用 prow 進行 CI。但是 travis-ci 只能用于 GitHub ,在尋找類似項目的時候, Drone 進入了我的視野。

大道至簡。和 Jenkins 相比, Drone 就輕量的多了,從應用本身的安裝部署到流水線的構建都簡潔的多。由于是和源碼管理系統相集成,所以 Drone 天生就省去了各種賬戶\權限的配置,直接與 gitlab 、 github 、 Bitbucket 這樣的源碼管理系統操作源代碼的權限一致。正如它官網上寫的那樣:

Any Source Code Manager

Drone integrates seamlessly with multiple source code management systems, including GitHub, GitHubEnterprise, Bitbucket, and GitLab.

Any Platform

Drone natively supports multiple operating systems and architectures, including Linux x64, ARM, ARM64 and Windows x64.

Any Language

Drone works with any language, database or service that runs inside a Docker container. Choose from thousands of public Docker images or provide your own.

Drone 天生支持任何源碼管理工具、任何平臺和任何語言。

而寫這篇文章的目的,并不是要吹捧這個工具有多么的好用,而是要總結在搭建 drone 和使用時候需要的各種坑,幫助讀者繞過這些坑。

聲明

鑒于在使用 Drone CI 中,遇到的各種坑都和 Drone 的版本有關,這里首先聲明我使用的 Drone 版本為1.1,使用0.8版本的同學請繞道。

搭建 Drone

這里要說的就是在使用 drone 中遇到的第一個坑,在最初正準備搭建 drone 的時候 Google 了很多相關的 blog ,大部分 blog (包括某些 medium.com 上面近期的英文 blog) 推薦的安裝方式都是使用 docker-compose,而無一例外的都失敗了...走投無路之下,我回到了官網的文檔,發現1.0之后許多參數都發生了變化,并且官方推薦使用 docker 的方式運行 Drone。

所以在使用任何開源軟件之前都要去閱讀它的文檔,不要跟著一篇 blog 就開始了(包括我的),這樣會少踩很多坑!!!

這里以 gitlab 為例,展示網上版本啟動參數和實際參數的不同:

作用各種blog官網文檔
設置 Drone 的管理員DRONE_ADMIN=adminDRONE_USER_CREATE=username:admin,admin:true
設置GitLab的域名DRONE_GITLAB_URLDRONE_SERVER_HOST
GitLab的Application中的keyDRONE_GITLAB_CLIENTDRONE_GITLAB_CLIENT_ID
GitLab的Application中的secretDRONE_GITLAB_SECRETDRONE_GITLAB_CLIENT_SECRET
Drone 域名DRONE_HOSTDRONE_GITLAB_SERVER

上面只是列舉了部分官方文檔和網上流產版本的不同,所以在使用之前一定要仔細閱讀官方文檔。下附運行 drone 的命令:

docker run \
  --volume=/var/run/docker.sock:/var/run/docker.sock \
  --volume=/var/lib/drone:/data \
  --env=DRONE_GIT_ALWAYS_AUTH=false \
  --env=DRONE_GITLAB_SERVER={your-gitlab-url} \  # gitlab 的 URL
  --env=DRONE_GITLAB_CLIENT_ID={your-gitlab-applications-id} \  #GitLab的Application中的id
  --env=DRONE_GITLAB_CLIENT_SECRET={your-gitlab-applicati-secret} \ #GitLab的Application中的secret
  --env=DRONE_SERVER_HOST={your-drone-url} \    # drone 的URl
  --env=DRONE_SERVER_PROTO=http \
  --env=DRONE_TLS_AUTOCERT=false \
  --env=DRONE_USER_CREATE=username:{your-admin-username},admin:true \   # Drone的管理員
  --publish=8000:80 \
  --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:1.1

關于 gitlab Application 的配置和 Drone 其他參數含義請參考官方文檔,這里只展示單節點辦的運行方式。

核心文件 .drone.yml

要使用 Drone 只需在項目根創建一個 .drone.yml 文件即可,這個是 Drone 構建腳本的配置文件,它隨項目一塊進行版本管理,開發者不需要額外再去維護一個配置腳本。其實現代 CI 程序都是這么做了,這個主要是相對于 Jekins 來說的。雖然 Jekins 也有插件支持,但畢竟還是需要配置。

值得注意的事這個文件時 .drone.yml,由于 Kubernetes 使用的多了,第一次創建了一個 .drone.yaml 文件,導致怎么都獲取不到配置..._(′?`」 ∠)_... YAML 工程師石錘了...

這里放一個 Java 的 .drone.yml ,這個項目是 fork 別人的項目用作演示,記得要修改 deployment.yaml 中的鏡像倉庫地址修改為自己的私有倉庫。

示例項目源碼:https://github.com/sunny0826/pipeline-example-maven

kind: pipeline
name: pipeline-example-maven

steps:
- name: Maven編譯
  image: maven:3-jdk-7
  volumes:
  - name: cache
    path: /root/.m2
  commands:
    - mvn clean install

- name: 構建鏡像  
  image: plugins/docker
  volumes:
  - name: docker
    path: /var/run/docker.sock
  settings:
    username: 
      from_secret: docker_user
    password: 
      from_secret: docker_pass
    repo: {your-repo}
    registry: {your-registry}
    tags: ${DRONE_BUILD_NUMBER}

- name: Kubernetes 部署
  image: guoxudongdocker/kubectl:v1.14.1 
  volumes:
  - name: kube
    path: /root/.kube
  commands:
    - sed -i "s/#Tag/${DRONE_BUILD_NUMBER}/g" deployment.yaml
    - kubectl apply -f deployment.yaml

- name: 釘釘通知
  image: guoxudongdocker/drone-dingtalk 
  settings:
    token: 
      from_secret: dingding
    type: markdown
    message_color: true
    message_pic: true
    sha_link: true
  when:
    status: [failure, success]

volumes:
- name: cache
  host:
    path: /tmp/cache/.m2
- name: kube
  host:
    path: /tmp/cache/.kube/.test_kube
- name: docker
  host:
    path: /var/run/docker.sock

trigger:
  branch:
  - master

值得注意的事:上面的這個 .drone.yml 文件將本地的.m2文件、kubeconfig文件、docker.sock 文件掛載到 pipeline 中以實現 maven 打包緩存,k8s 部署、docker 緩存的作用,以提高 CI 速度。而是用掛載需要管理員在項目 settings 中勾選 Trusted ,這個操作只能管理員進行,普通用戶是看不到這個選項的。而管理員就是在docker運行時候 --env=DRONE_USER_CREATE=username:{your-admin-username},admin:true 設置的。

怎么快速入門輕量快速的CI工具Drone

而上傳鏡像和釘釘同時需要在 settings 設置中添加 secret

  • docker_user:docker 倉庫用戶名

  • docker_pass:docker 倉庫密碼

  • dingding: 釘釘機器人 token

注意這里的釘釘 token 是 webhook 中 https://oapi.dingtalk.com/robot/send?access_token= 后這部分 怎么快速入門輕量快速的CI工具Drone

怎么快速入門輕量快速的CI工具Drone

構建結果

添加 .drone.yml 文件后,向 master 分支提交代碼即可出發 CI 構建

怎么快速入門輕量快速的CI工具Drone CI 結束后,會在釘釘機器人所在群收到通知

怎么快速入門輕量快速的CI工具Drone

插件支持

可以看到,每一步的鏡像都是一個鏡像,上面 pipeline 中的 Kubernetes 及釘釘通知插件就是我開發的,具體開發方法可以參考官方文檔,而官方也提供了許多官方插件。

  • 構建后部署:Kubernetes、helm、scp

  • 構建后通知:釘釘 、Email、Slack、微信

Drone 整體用起來還是很方便的,搭建、上手速度都很快,但是官方文檔給的不夠詳實,而網上充斥著各種各樣0.8版本的的實例,但是其實官網早就發布了1.0版本,而官方并沒有 example 這樣的示例項目,這樣就又把本來降下來的學習曲線拉高了。許多坑都需要自己去趟,我在測試 drone 的時候,就構構建了上百次,不停的修改 .drone.yml , commit 信息看起來是很恐怖的。后續抽空會向官方貢獻 example 這樣的 PR。

看完上述內容,你們掌握怎么快速入門輕量快速的CI工具Drone的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

班戈县| 手游| 宁蒗| 惠安县| 阳城县| 墨玉县| 宜川县| 博罗县| 陈巴尔虎旗| 和平县| 东光县| 田东县| 涟水县| 聂荣县| 霸州市| 柳河县| 武隆县| 福泉市| 丰镇市| 秭归县| 孝昌县| 定安县| 永和县| 南安市| 滁州市| 栖霞市| 德清县| 黑龙江省| 莆田市| 新建县| 鸡东县| 体育| 甘德县| 枝江市| 如东县| 千阳县| 永泰县| 绥江县| 牙克石市| 扶绥县| 和静县|