一、什么是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..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..tar.gz –C /application/
mv /application/apache-tomcat-8.5. /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.-ce..el7.x86_64.rpm
gitlab-ctl reconfigure #初始化,执行一次即可

2、查看Gitlab状态

[root@gitlab tools]# gitlab-ctl status
run: alertmanager: (pid ) 739s; run: log: (pid ) 738s
run: gitaly: (pid ) 742s; run: log: (pid ) 741s
run: gitlab-monitor: (pid ) 741s; run: log: (pid ) 740s
run: gitlab-workhorse: (pid ) 743s; run: log: (pid ) 742s
run: logrotate: (pid ) 894s; run: log: (pid ) 741s
run: nginx: (pid ) 900s; run: log: (pid ) 742s
run: node-exporter: (pid ) 881s; run: log: (pid ) 741s
run: postgres-exporter: (pid ) 738s; run: log: (pid ) 737s
run: postgresql: (pid ) 955s; run: log: (pid ) 743s
run: prometheus: (pid ) 740s; run: log: (pid ) 739s
run: redis: (pid ) 961s; run: log: (pid ) 743s
run: redis-exporter: (pid ) 862s; run: log: (pid ) 740s
run: sidekiq: (pid ) 908s; run: log: (pid ) 742s
run: unicorn: (pid ) 914s; run: log: (pid ) 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 *:;
listen *:;

重启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'] =
unicorn['worker_processes'] =
unicorn['worker_memory_limit_min'] = "200 * 1 << 20"
unicorn['worker_memory_limit_max'] = "300 * 1 << 20"
sidekiq['concurrency'] =
postgresql['shared_buffers'] = "256MB"
postgresql['max_parallel_workers_per_gather'] =
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' => , #参数调整
'findtime' => ,
'bantime' =>
} gitlab-ctl reconfigure

②访问502问题

vim /etc/gitlab/gitlab.rb

unicorn['port']         #默认8080  端口冲突
unicorn['port'] = #修改为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角色

⑤给用户分配角色

最新文章

  1. CSS3 选择器——属性选择器
  2. iOS学习09C语言函数指针
  3. testng 控制case运行顺序
  4. Maven 创建多模块工程
  5. Spring 使用注解方式进行事物管理
  6. Json 的日期格式转换成DateTime
  7. setInterval(code, time)中code传递参数办法
  8. XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】
  9. WebService详解(二)
  10. dubbo常见面试问题(二)
  11. update linux dns,no need restart
  12. C++ main函数的参数
  13. Windows Server 2008中使用计划任务定时执行BAT bat进行PHP脚本的执行
  14. PDF to image
  15. oracle取出多个字段列中的最大值和最小值
  16. vue教程3-02 vue动画
  17. ThreadLocal 与 Synchronized区别
  18. zuul学习
  19. dubbo注册中心zookeeper出现异常 Opening socket connection to server 10.70.42.99/10.70.42.99:2181. Will not attempt to authenticate using SASL (无法定位登录配置)
  20. Linux下启用MySQL慢查询

热门文章

  1. python__005
  2. 【HANA系列】SAP HANA SQL/MDX及TCP/IP端口介绍
  3. 关于FPS游戏的设计问题
  4. docker搭建环境的时候常用的命令有哪些
  5. 【miscellaneous】GPRS本质论
  6. python 生成器、三元表达式、列表推倒式、字典生成式、生成器表达式(总结)
  7. Linux中安装配置KVM虚拟化
  8. 软考题型—PERT图(项目计划评审技术)
  9. 【统计】Causal Inference
  10. Codeforces 1220B. Multiplication Table