Gitlab-CI
Gitlab簡介
最近感覺就是在不斷的搭建/遷移版本服務器,而現在市面上關於版本服務器搭建的指南都流於表面,真正深入骨骼的少之又少,往往以偏概全很多關鍵點並未提及。而版本服務器的搭建往往是一個初創型或中小型公司迫切需要解決的問題。
目前市用戶量和口碑較好的Git服務提供商,屈指可數。國外的話
GitHub
,BitBucket
都是不錯的選擇,但國際形勢變幻莫測,需要隨時備好***。國內的話Coding
用戶體驗就做的很不錯,很切合碼農們的審美, 開源中國的碼雲
也有對應的代碼託管服務,不過自從他們家Maven倉庫鏡像下架事件後已不推薦再用,不久後被阿里收購不是沒有可能。
各個版本管理軟件各有優劣,大多數的企業和團隊爲了隱私性的需要,選擇了目前市面上功能和體驗都十分給力的Gitlab
作爲非開源的代碼管理平臺。
Gitlab目前有兩種不同的版本,社區/個人版和企業版
GitLab社區版是完全免費的,不但能建立免費的私有倉庫而且沒有數量上限,參與人員也沒有數量限制,還能設置成員的權限,甚至細緻到具體某條分支的權限,以及強大的工作流等等。完全滿足我們日常開發、投產所需要的版本控制功能。
Gitlab企業版支持LDAP架構和對應功能,以達到更高的處理性能和存儲效率,並提供其他更多模塊和服務支持
參考鏈接:Gitlab社區版/企業版對比
安裝前的準備
目前來說,Gitlab的發行版本並不是支持所有Linux/Unix內核版本,以下幾種可能還是需要廣大同學們通過其開源源碼進行編譯安裝 。
- Arch Linux
- Fedora
- FreeBSD
- Gentoo
- macOS
Gitlab安裝
#下載並安裝gitlab的yum源 curl -sS http://packages.gitlab.cc/install/gitlab-ce/script.rpm.sh | sudo bash #自動安裝最新版本 yum install gitlab-ce #生成配置並啓動 gitlab-ctl reconfigure #配置域名 vim /etc/gitlab/gitlab.rb external_url 'http://gitlab.huoban.com'
####安裝完成,訪問測試
###使用SMTP來發送郵件通知
如果你不想用Gitlab服務器自帶的postfix服務來發郵件,可以改用SMTP服務。同樣是修改/etc/gitlab/gitlab.rb中的郵件服務配置,使用SMTP服務器來作爲郵件通知的發送方
gitlab_rails['smtp_address'] = "smtp.yourdomain.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "xxx"
gitlab_rails['smtp_password'] = "xxx"
gitlab_rails['smtp_domain'] = "smtp.yourdomain.com"
gitlab_rails['smtp_authentication'] = 'plain'
gitlab_rails['smtp_enable_starttls_auto'] = true
###配置https
1、創建SSL證書存放目錄
mkdir -p /etc/gitlab/ssl
chmod 0700 /etc/gitlab/ssl
通過Sftp等方式上傳證書gitlab.xxx.com.crt,修改對應證書訪問權限
chmod 600 /etc/gitlab/ssl/gitlab.xxx.com.crt
2、修改主配置,支持SSL訪問
仍然是修改/etc/gitlab/gitlab.rb主配置文件
external_url "[https://gitlab.bjwf125.com](https://gitlab.bjwf125.com)"
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.xxx.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.xxx.com.key"
##什麼是持續集成(Continuous Integration)
持續集成是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,通常每個成員每天至少集成一次,也就意味着每天可能會發生多次集成。每次集成都通過自動化的構建(包括編譯,發佈,自動化測試)來驗證,從而儘快地發現集成錯誤。許多團隊發現這個過程可以大大減少集成的問題,讓團隊能夠更快的開發內聚的軟件。
軟件集成是軟件開發過程中的一個環節,這個環節的工作一般會包括以下流程:合併代碼---->安裝依賴---->編譯---->測試---->發佈。軟件集成的工作一般會比較細碎繁瑣,爲了不影響開發效率,以前軟件集成這個環節一般不會經常進行或者只會等到項目後期再進行。但是有些問題,如果等到後期才發現,解決問題的代價很大,有可能導致項目延期或者失敗。因此,爲了儘早發現軟件集成錯誤,鼓勵團隊成員應該經常集成他們的工作,通常每個成員每天應該至少集成一次。這就是所說的持續集成。所以說,持續集成是一種軟件開發實踐。
軟件集成的工作細碎繁瑣,以前是由人工完成的。但是現在鼓勵持續集成,那豈不是要累死人,還影響開發效率。所以,應該考慮將軟件集成這個工作自動化,這就出現了所謂的持續集成系統。
##GitLab-CI
GitLab-CI就是一套配合GitLab使用的持續集成系統(當然,還有其它的持續集成系統,同樣可以配合GitLab使用,比如Jenkins)。而且GitLab8.0以後的版本是默認集成了GitLab-CI並且默認啓用的。
Gitlab-CI安裝
#配置yum源 cat > /etc/yum.repos.d/gitlab-ci.repo << EOF [gitlab-ci] name=gitlab-ci baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ci-multi-runner/yum/el7/ enabled=1 gpgcheck=0 EOF #安裝最新版本 yum -y install gitlab-ci-multi-runner
##使用Gitlab-ci-multi-runner註冊Runner
安裝好gitlab-ci-multi-runner這個軟件之後,我們就可以用它向GitLab-CI註冊Runner了。
向GitLab-CI註冊一個Runner需要兩樣東西:GitLab-CI的url和註冊token。
其中,token是爲了確定你這個Runner是所有工程都能夠使用的Shared Runner還是具體某一個工程才能使用的Specific Runner。
如果要註冊Shared Runner,你需要到管理界面的Runners頁面裏面去找註冊token。如下圖所示:
# gitlab-ci-multi-runner register
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.huoban.com/
Please enter the gitlab-ci token for this runner:
mWtqXCDiK2RDdRdUp7QC
Please enter the gitlab-ci description for this runner:
[zhangqiang001]: huoban-shell
Please enter the gitlab-ci tags for this runner (comma separated):
shell
Whether to run untagged builds [true/false]:
[false]: false
Whether to lock Runner to current project [true/false]:
[false]: false
Registering runner... succeeded runner=mWtqXCDi
Please enter the executor: docker+machine, kubernetes, docker-ssh, virtualbox, shell, ssh, docker-ssh+machine, docker, parallels:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
* 輸入Gitlab CI地址
* 輸入項目CI token
* 輸入 Runner 描述
* 輸入 Runner 標籤,可以多個,用逗號隔開
* 輸入 Runner 執行的語言 (e.g. shell)
構建.gitlab-ci.yml腳本
# vim .gitlab-ci.yml
deploy_stage:
only:
- master
when: manual
script:
- echo ${CI_PROJECT_DIR}
- rsync -rtlpvz ${CI_PROJECT_DIR}/ $SSH_USER@$SSH_HOST:${PROD_BASE_DIR} && echo $?
- ssh $SSH_USER@$SSH_HOST "sudo chmod -R 777 $PROD_BASE_DIR"
tags:
- shell
網頁端配置環境變量
#提交代碼發佈測試