gitlab簡單使用教程【轉】

平時一直是用git來管理代碼倉庫,也用過一段時間github,可是github免費版不能建私有倉庫。後來轉到了bitbucket,後來被atlassian收購後有點不適應,並且在國內訪問常常連不上。仍是gitlab比較好用,由於公司也是用gitlab,因此上手很快,新增的構建功能很是方便。html

1. GitLab.com

gitlab是開源項目,官網也提供了社區版安裝包,若是有本身服務器的話能夠私有化部署一個,安裝教程參考官網,只須要簡單幾步就能運行,地址https://about.gitlab.com/installation/。linux

可是對於我的開發者來講要求的服務器配置有點高,1核1G的服務器也只能勉強跑起來。另外一種選擇就是使用GitLab.com,這是官方提供的免費平臺,功能和社區版同樣,有人在維護、更新,新功能會比較多,缺點就是偶爾抽風。地址https://gitlab.com/users/sign_in > GitLab.com offers free unlimited (private) repositories and unlimited collaborators.git

這是官方的宣傳語,提供無限的免費的私人的倉庫,無限制的協做者,條件很是誘人。github

註冊流程比較簡單,填一下username和email就差很少了,這也將是git空間的標記,名字不要取得太隨意就好了。golang

2. 建立項目

登陸後點擊右上角的加號(New project)。web

  • Project path:若是你屬於group的話能夠選group名字,這樣項目就會放在對應group下,通常團隊項目比較好用。
  • Project name:你的項目名字
  • Import project from:能夠從多個github、bitbucket等主流託管平臺導入項目。
  • Project description:項目描述,可選
  • Visibility Level:項目可見級別
    • Private:私有項目,須要受權才能訪問,適合我的、團隊開發。
    • Internal:內部項目,注意只要登陸帳號就能訪問,適合開源貢獻代碼。
    • Public:公開項目,不用登陸就能訪問,適合分享項目。

點擊create,建立項目,進入空項目,會出現初始化步驟,能夠用ssh和https方式來上傳代碼,推薦ssh,比較安全。docker

3. 配置ssh(可選)

若是本地沒有ssh key,用ssh-keygen初始化一個,能夠參考我以前寫的github教程git初始化那部分https://wuyuans.com/2012/05/github-simple-tutorial/#toc-3安全

有ssh key後添加到後臺,點擊右側頭像,下拉菜單裏選settings,在頂部的tab裏點擊SSH Keys,或者直接訪問https://gitlab.com/profile/keys。服務器

Key就是.ssh/id_rsa.pub文件內容,title填本身知道的就行,儘可能語義化點。ssh

Add key,完成。

4. 上傳項目

回到咱們建立的空項目頁面,在項目名稱下面選擇傳輸協議,ssh或者https,下面教程裏的url會跟着變。

以後按照下面的教程來作就好了,最後push

  1. git push -u origin master

完成,這時項目頁面應該就有東西了,後面就能夠用正常的git命令來維護代碼倉庫了。

5. 配置CI(持續集成)

若是隻是要一個git代碼託管的話上面幾步已經足夠了,如今開始介紹gitlab提供的持續集成功能,這對於須要打包、發佈的人來講很是方便。

5.1 Pipelines

一個pipeline就是一次持續集成任務,通常由一次push觸發,在網頁上對項目的修改、merge也會觸發pipline。pipline由Runner執行,Runner有兩種:

  • Specific Runners:私有runner,部署和執行在本身服務器上,優勢是安全、速度快,缺點是須要提供服務器,部署教程https://docs.gitlab.com/runner/install/linux-repository.html
  • Shared Runners:共享runner,官方提供的runner,優勢是免費,缺點是會偶爾抽風、或者速度慢

5.2 Jobs

pipline由多個job組成,一個job會發給一個runner來執行,因此各個job之間的數據不是共享的,除非使用cache。因此儘可能把一些有依賴的步驟放到一個job裏,或者把一些通用步驟放到before_script裏,這個後面會提到。

5.3 stages

stage是對job的分組,同一個stage裏的job是並行的,兩個stage之間是串行的

5.4 .gitlab-ci.yml

要想配置上面說的這些,須要在項目根目錄新建.gitlab-ci.yml文件,文件格式爲yaml,教程https://docs.gitlab.com/ee/ci/yaml/README.html。舉個例子,這是我www工程配置文件的簡化版,使用golang編譯:

  1. image: golang:latest
  2. before_script:
  3. - ln -s /builds/wuyuans/www /go/src/www
  4. - cd /go/src/www
  5. - mkdir bin
  6. stages:
  7. - build
  8. - deploy
  9. build_web:
  10. stage: build
  11. script:
  12. - go build -v -o bin/web www/web
  13. except:
  14. - release
  15. build_service:
  16. stage: build
  17. script:
  18. - go build -v -o bin/service www/service
  19. except:
  20. - release
  21. deploy_web:
  22. stage: deploy
  23. script:
  24. - go build -v -o bin/web www/web
  25. - scp bin/web root@${HOST_1}:/bin/
  26. environment:
  27. name: www/web
  28. url: http://$CI_ENVIRONMENT_SLUG.wuyuans.com
  29. when: manual
  30. only:
  31. - release

5.4.1 image

編譯使用的docker鏡像,若是是golang的話能夠用golang:latest,使用最新版golang,其餘能夠在docker hub查https://hub.docker.com/_/golang/

5.4.2 before_script

每一個job執行前都會執行before_script裏的步驟,主要是作一些環節初始化,好比我這裏把工程目錄鏈到了GOPATH下,這樣方便使用go命令。也能夠在這裏作一些go get工做

5.4.3 stages

我分了兩個stage,build和deploy。build裏有build_web、build_service,deploy裏的是deploy_web,名字能夠隨便,主要是job裏的stage字段須要和stages裏定義的對應上。

5.4.4 build_web、build_service

script裏的是執行的命令,作go build的工做,except表示這個job不能在release分支執行。

5.4.5 deploy_web

script和前面同樣。environment用來標記發佈的名字,咱們能夠用environment來管理髮布版本、回滾等。when表示執行時間,默認是always每次都會執行,manual表示須要在後臺手動執行,這樣在不須要全部deploy job都執行的時候手動deploy項目。only表示只在release分支執行。

5.5 Environments

在.gitlab-ci.yml裏配置了environment後,job執行完後會在項目頁面裏的Pipelines->Environments下看到此次job,他會按照配置裏的name來合併,每次job均可以重作,也就是能夠用來作項目的重發和回滾,右邊有相對於的按鈕,很方便。

6. 總結

gitlab有不少功能很是實用,好比上面講到的Pipelines、Environments等,還有像Graph(之前叫network)能夠顯示全部分支的樹狀結構,這對於在多個分支裏來回切換、分不清在哪一個分支提交的人來講很直觀。並且gitlab對於權限控制提供了不少的選項,很適合團隊合做。然而缺點也仍是有的,由於是官方託管的平臺,平常維護、偶爾抽風什麼的,還有被牆的風險什麼的。。。若是是我的用戶應該關係不大,若是是團隊的話仍是自建gitlab社區版,功能應該差很少,畢竟安全和穩定對團隊來講是比較重要的。

做者:wuyuan 本文來自 Wuyuan's Blog 轉載請註明,謝謝! 文章地址: https://wuyuans.com/2017/05/gitlab-simple-tutorial
相關文章
相關標籤/搜索