一、什么是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角色

⑤给用户分配角色

DevOps之持续集成Jenkins+Gitlab的更多相关文章

  1. 一步一步构建iOS持续集成:Jenkins+GitLab+蒲公英+FTP

    什么是持续集成 持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过自动化的构建(包括编译,发布,自动化测试)来 ...

  2. 持续集成 Jenkins +Gitlab + SSH 自动发布 HTML 代码

    目录 一.整体流程 二.Jenkins 配置 2.1.首先安装插件 2.2.配置目标服务器 2.3.创建 job 2.4.配置 gitlab 触发 三.改进 一.整体流程 二.Jenkins 配置 2 ...

  3. 持续集成之④:GitLab触发jenkins构建项目

    持续集成之④:GitLab触发jenkins构建项目 一:目的为在公司的测试环境当中一旦开发向gitlab仓库提交成功代码,gitlab通知jenkins进行构建项目.代码质量测试然后部署至测试环境, ...

  4. DevOps - CI - 持续集成(Continuous Integration)

    初见 持续集成是什么? 持续集成基础概念介绍 持续集成服务器与工具集 了解 敏捷开发中的持续集成 使用Jenkins进行持续集成 案例 gitlab+gerrit+jenkins持续集成框架 使用Ge ...

  5. 这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script

    这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4378224.html ...

  6. 自动化持续集成Jenkins

    自动化持续集成Jenkins 使用Jenkins配置自动化构建http://blog.csdn.net/littlechang/article/details/8642149 Jenkins入门总结h ...

  7. 持续集成~Jenkins构建GitHub项目的实现

    有了前两讲的基础,这回我们就可以把github上的项目做到CI(jenkins)里了,让它自动去集成部署,持续集成~Jenkins里的NuGet和MSBuild插件,持续集成~Jenkins里的pow ...

  8. [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接

    近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...

  9. CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接

    原文地址https://www.cnblogs.com/kevingrace/p/5651447.html 近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更 ...

随机推荐

  1. 大觅网07day

    分布式日志环境的构建(ELK+Kafka) 主要是搭建分布式日志环境,由ELK+Kafka实现,分为以下四步实现: 一.Elasticsearch环境的搭建和测试 1.删除已经存在的ES容器和镜像,如 ...

  2. composer配合github发布管理代码包

    前言 今日使用composer结合github管理代码包过程,方便日后需要,特此记录 流程 1 最大同性交友网站github创建自己项目,在自己项目新增composer.json文件 2 compos ...

  3. Akka系列(四):Akka中的共享内存模型

    前言...... 通过前几篇的学习,相信大家对Akka应该有所了解了,都说解决并发哪家强,JVM上面找Akka,那么Akka到底在解决并发问题上帮我们做了什么呢? 共享内存 众所周知,在处理并发问题上 ...

  4. 在 IntelliJ IDEA 中使用 Git,太方便了!

    git是目前流行的分布式版本管理系统.它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操作时这两套版本库互不影响.也 因此其近乎所有的操作都是本地执行,所以在断网的情况下任然可以提交代码,切 ...

  5. dp入门题(数塔)

    http://acm.hdu.edu.cn/showproblem.php?pid=2084 题意: 7 3  8 8 1   0 2      7 4   4 4 5 2    6     5 在上 ...

  6. [BZOJ 1013] [JSOI2008]球形空间产生器

    [BZOJ 1013] [JSOI2008]球形空间产生器 题面 给出一个n维球体上的n+1个点,求球心坐标 分析 设球心坐标为\((x_1,x_2,\dots x_n)\),由于一个球体上的所有点到 ...

  7. 模板 - 强连通分量/割点/桥 - Tarjan

    int dfn[N], low[N], dfncnt, s[N], tp; int scc[N], sc; // 结点 i 所在 scc 的编号 int sz[N]; // 强连通 i 的大小 voi ...

  8. mycat 笔记

    Mycat读写分离.主从切换.分库分表的操作记录   系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库 ...

  9. Linux服务器应急事件溯源报告

    Linux服务器应急事件溯源报告 小博博 · 2016/02/18 17:43 Author:Inn0team 0x00 目录 关于目标环境的中间进度检测报告 一:情况概述 二:取证情况 2.1 目标 ...

  10. npm学习(十一)之package-lock.json

    package-lock.json 描述 对于npm修改node_modules树或package.json的任何操作,都会自动生成package.json,它描述生成的确切树,以便后续安装能够生成相 ...