Gitlab-CInginx
最近感受就是在不斷的搭建/遷移版本服務器,而如今市面上關於版本服務器搭建的指南都流於表面,真正深刻骨骼的少之又少,每每以偏概全不少關鍵點並未說起。而版本服務器的搭建每每是一個初創型或中小型公司迫切須要解決的問題。git
目前市用戶量和口碑較好的Git服務提供商,屈指可數。國外的話
GitHub
,BitBucket
都是不錯的選擇,但國際形勢變幻莫測,須要隨時備好***。國內的話Coding
用戶體驗就作的很不錯,很切合碼農們的審美, 開源中國的碼雲
也有對應的代碼託管服務,不過自從他們家Maven倉庫鏡像下架事件後已不推薦再用,不久後被阿里收購不是沒有可能。docker
各個版本管理軟件各有優劣,大多數的企業和團隊爲了隱私性的須要,選擇了目前市面上功能和體驗都十分給力的Gitlab
做爲非開源的代碼管理平臺。shell
Gitlab目前有兩種不一樣的版本,社區/我的版和企業版
GitLab社區版是徹底免費的,不但能創建免費的私有倉庫並且沒有數量上限,參與人員也沒有數量限制,還能設置成員的權限,甚至細緻到具體某條分支的權限,以及強大的工做流等等。徹底知足咱們平常開發、投產所須要的版本控制功能。
Gitlab企業版支持LDAP架構和對應功能,以達到更高的處理性能和存儲效率,並提供其餘更多模塊和服務支持vim
參考連接:Gitlab社區版/企業版對比bash
目前來講,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服務器來做爲郵件通知的發送方dom
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
一、建立SSL證書存放目錄ssh
mkdir -p /etc/gitlab/ssl chmod 0700 /etc/gitlab/ssl
經過Sftp等方式上傳證書gitlab.xxx.com.crt,修改對應證書訪問權限
chmod 600 /etc/gitlab/ssl/gitlab.xxx.com.crt
二、修改主配置,支持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)
# 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
#提交代碼發佈測試