一、什么是DevOps
DevOps(英文Development(開發)和Operations(技術運營)的組合)是一組過程、方法與系統的統稱,DevOps是一組最佳實踐強調(開發、運維、測試)在應用和服務生命周期中的協作和溝通,強調整個組織的合作,以及交付和基礎設施變更的自動化,從而實現持續集成、持續部署和持續交付。
1、什么是持續集成
持續集成是指開發人員在程序的開發過程中,可以頻繁的將代碼部署集成到主干,並進程自動化測試

2、什么是持續交付
持續交付指的是在持續集成的環境基礎之上,將代碼部署到預生產環境

3、什么是持續部署
在持續交付的基礎上,把部署到生產環境的過程自動化,持續部署和持續交付的區別就是最終部署到生產環境是自動化的。

二、Jenkins安裝
1、Jenkins是什么?
jenkins是一個用JAVA編寫的開源的持續集成工具,運行在servlet容器中,支持軟件配置管理(SCM)工具,可以執行基於APACHE ANT和APACHE MAVEN的項目,以及任意Shell腳本和Windows批處理命令,可用於自動執行與構建,測試和交付或部署軟件有關的各種任務。
①Yum安裝jenkins
#安裝yum源# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all && yum makecache #安裝JDK# 下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
上傳jdk-8u181-linux-x64.tar.gz包到目標服務器
#解壓拷貝jdk# tar xf jdk-8u181-linux-x64.tar.gz -C /usr/local/ ln -s /usr/local/jdk1.8.0_171/ /usr/local/jdk ln -s /usr/local/jdk/bin/java /usr/bin/java #設置環境變量# $ vim /etc/profile export JAVA_HOME=/usr/local/jdk export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$PATH source /etc/profile
安裝Jenkins
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install jenkins -y systemctl start jenkins
具體配置請參照:https://www.cnblogs.com/yanxinjiang/p/8058711.html
②War包安裝jenkins
配置JDK環境略過……
官網War包下載地址:https://jenkins.io/download/

下載Tomcat與JDK版本相同
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz
tar xf apache-tomcat-8.5.35.tar.gz –C /application/ mv /application/apache-tomcat-8.5.35 /application/jenkins rm -rf /application/jenkins/webapps/* && mkdir –p /application/jenkins/webapps/ROOT
下載Jenkins的war包
wget http://mirrors.jenkins.io/war/latest/jenkins.war
cp jenkins.war /application/jenkins/webapps/ROOT/ unzip /application/jenkins/webapps/ROOT/jenkins.war bin/startup.sh #啟動即可
插件源問題
###Jenkins 2.222.1更新插件源### locate default.json找到文件所在路徑或使用find查找文件 sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json 安裝中文插件 localization-zh-cn 右下角點擊jenkins中文社區 使用->更新中心鏡像設置 修改更新中心的地址為 https://updates.jenkins-zh.cn/update-center.json
三、Gitlab介紹
GitLab是一個利用 Ruby on Rails 開發的開源應用程序,實現一個自托管的Git項目倉庫,可通過Web界面進行訪問公開的或者私人項目。
GitLab擁有與Github類似的功能,能夠瀏覽源代碼,管理缺陷和注釋。可以管理團隊對倉庫的訪問,它非常易於瀏覽提交過的版本並提供一個文件歷史庫。它還提供一個代碼片段收集功能可以輕松實現代碼復用,便於日后有需要的時候進行查找。
1、部署Gitlab
安裝文檔 https://about.gitlab.com/downloads/#centos7 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
yum install -y policycoreutils-python #下載RPM包到目標服務器# rpm -ivh gitlab-ce-10.8.7-ce.0.el7.x86_64.rpm gitlab-ctl reconfigure #初始化,執行一次即可
2、查看Gitlab狀態
[root@gitlab tools]# gitlab-ctl status run: alertmanager: (pid 5787) 739s; run: log: (pid 5810) 738s run: gitaly: (pid 5742) 742s; run: log: (pid 5763) 741s run: gitlab-monitor: (pid 5761) 741s; run: log: (pid 5777) 740s run: gitlab-workhorse: (pid 5728) 743s; run: log: (pid 5733) 742s run: logrotate: (pid 5392) 894s; run: log: (pid 5760) 741s run: nginx: (pid 5375) 900s; run: log: (pid 5734) 742s run: node-exporter: (pid 5460) 881s; run: log: (pid 5764) 741s run: postgres-exporter: (pid 5803) 738s; run: log: (pid 5811) 737s run: postgresql: (pid 5124) 955s; run: log: (pid 5719) 743s run: prometheus: (pid 5774) 740s; run: log: (pid 5798) 739s run: redis: (pid 5064) 961s; run: log: (pid 5718) 743s run: redis-exporter: (pid 5577) 862s; run: log: (pid 5778) 740s run: sidekiq: (pid 5348) 908s; run: log: (pid 5751) 742s run: unicorn: (pid 5310) 914s; run: log: (pid 5720) 743s
瀏覽器訪問10.0.0.22出現如下界面則部署成功

具體配置細節請參照:https://www.cnblogs.com/yanxinjiang/p/8056845.html
3、修改Gitlab倉庫地址

修改gitlab.yml文件
vim /var/opt/gitlab/gitlab-rails/etc/gitlab.yml

修改gitlab默認端口
vim /var/opt/gitlab/nginx/conf/gitlab-http.conf server { listen *:80; listen *:9000;
重啟Gitlab即可
gitlab-ctl restart

4、GitLab內存占用過高解決方法
①、減少進程數
修改配置文件/etc/gitlab/gitlab.rb中的worker_processes: unicorn['worker_processes'] = 2 默認是被注釋掉的,官方建議該值是CPU核心數加一,可以提高服務器的響應速度,如果內存只有4G,或者服務器上有其它業務,就不要改了,以免內存不足。另外,這個參數最小值是2,設為1,服務器可能會卡死。
②減少數據庫緩存
postgresql['shared_buffers'] = "256MB" 默認為256MB,可適當改小
③減少數據庫並發數
postgresql['max_worker_processes'] = 8 默認為8,可適當改小
④減少sidekiq並發數
sidekiq['concurrency'] = 25 默認是25,可適當改小

具體調優參數:
[root@gitlab ~]# egrep -v "#|^$" /etc/gitlab/gitlab.rb external_url 'http://10.0.0.22' unicorn['worker_timeout'] = 60 unicorn['worker_processes'] = 10 unicorn['worker_memory_limit_min'] = "200 * 1 << 20" unicorn['worker_memory_limit_max'] = "300 * 1 << 20" sidekiq['concurrency'] = 15 postgresql['shared_buffers'] = "256MB" postgresql['max_parallel_workers_per_gather'] = 0 prometheus['monitor_kubernetes'] = false
5、GitLab問題
①Gitlab 403 forbidden 並發引起IP被封
原因:Gitlab使用rack_attack做了並發訪問的限制
解決:將Gitlab服務器的IP設置為白名單即可
vim /etc/gitlab/gitlab.rb gitlab_rails['rack_attack_git_basic_auth'] = { 'enabled' => true, 'ip_whitelist' => ["127.0.0.1","192.168.1.200","公網IP"], 'maxretry' => 100, #參數調整 'findtime' => 60, 'bantime' => 60 } gitlab-ctl reconfigure
②訪問502問題
vim /etc/gitlab/gitlab.rb unicorn['port'] #默認8080 端口沖突 unicorn['port'] = 8081 #修改為8081 #####修改上面文件有時候不管用#### vim /var/opt/gitlab/gitlab-rails/etc/unicorn.rb listen "127.0.0.1:8081", :tcp_nopush => true
四、Jenkins集成gitlab
1、Jenkins生成ssh秘鑰認證
ssh-keygen -t rsa
分發公鑰到gitlab服務器
cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA2M2BY3CNUbLmkfMUFbKEBK8MTYzDcuegb4w3JC+Sa0LzgZknncodEwsxQ7qz7aKmAPmyGztzBP5NIinnqUGZ+jVHLr1wy9eYrzKfw5zLHlPML2P5+MzKmt/yW6Sc3nUcpSkoWg0fV0KJGvaHQbobziSFCEQWnsQJpW5LGfznQm6qrAxO/5AMg1vNG2xThY9nc+wgFYy/D0A58xG8KFnD+REwJk2ASV/XMteeRq0fyr/LVjgniqdgxnrERNoGoW+E+9ccYEm2TBuW/1yNBoNSog8S7Q9VDBvmJUfpcIGhhH7VH/TA4gHefho6ksN8b/sYyBI+9jAQmMiuUJtyY36a+w== root@jenkins


Jenkins拉取代碼認證
cat /root/.ssh/id_rsa -----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEA2M2BY3CNUbLmkfMUFbKEBK8MTYzDcuegb4w3JC+Sa0LzgZkn ncodEwsxQ7qz7aKmAPmyGztzBP5NIinnqUGZ+jVHLr1wy9eYrzKfw5zLHlPML2P5 +MzKmt/yW6Sc3nUcpSkoWg0fV0KJGvaHQbobziSFCEQWnsQJpW5LGfznQm6qrAxO /5AMg1vNG2xThY9nc+wgFYy/D0A58xG8KFnD+REwJk2ASV/XMteeRq0fyr/LVjgn iqdgxnrERNoGoW+E+9ccYEm2TBuW/1yNBoNSog8S7Q9VDBvmJUfpcIGhhH7VH/TA 4gHefho6ksN8b/sYyBI+9jAQmMiuUJtyY36a+wIBIwKCAQBpTd/ClcD7y+xVhLH7 6P5LavdY3fiIRJ5iEOeVO62EjjvCmti6Wtrr/h8+J3v3FHyEIYJk/55EQQDktUSi

2、Jenkins基於角色的權限管理RBAC
①安裝插件: Role-based Authorization Strategy

②配置

③創建用戶

④創建角色

創建dev角色

⑤給用戶分配角色

