持续集成Jenkins+Gitlab
2019独角兽企业重金招聘Python工程师标准>>>
持续集成Jenkins+Gitlab
一、相关概念
1.1 持续集成:
持续集成(Continuous Integration),简称CI,是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并进程自动化测试。
1.2 持续交付:
持续交付(Continuous Delivery),指的是在持续集成的环境基础之上,将代码部署到预生产环境
1.3 持续部署:
持续部署(Continuous Deployment),是指在持续交付的基础上,把部署到生产环境的过程自动化,持续部署和持续交付的区别就是最终部署到生产环境是自动化的。
PS:目前大部分公司都是做到持续交付,做到持续部署的还很少,因为上生产环境,还要有很多步骤需要做。
1.4上线基本流程:
1.代码获取(直接了拉取最新代码,使用tag标签获取某个版本代码)
2.编译 (可选)
3.配置文件放进去
4.打包
5.scp到目标服务器
6.将目标服务器移除集群
7.解压并放置到Webroot
8.Scp 差异文件
9.重启 (可选)
10.测试
11.加入集群
二、Gitlab
2.1Gitlab简介
GitLab是一个利用
Ruby on Rails
开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
GitLab拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找
2.2Gitlab部署
#环境准备
[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@node1 ~]# uname -r
3.10.0-693.el7.x86_64#更换阿里yum源
[root@node1 yum.repos.d]# wget http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
[root@node1 ~]# wget http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
[root@node1 ~]# yum update -y#更换gitlabyum源为清华大学
[root@node1 ~]# vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
[root@node1 ~]# yum makecache
[root@node1 ~ ]# yum install -y gitlab-ce#安装依赖
[root@node1 ~]# yum install curl policycoreutils openssh-server openssh-clients postfix -y#启动postfix
[root@node1 ~]# systemctl start postfix#安装gitlab-ce 版本为gitlab-ce.x86_64 0:10.6.4-ce.0.el7
[root@node1 ~]# yum install -y gitlab-ce#配置并启动gitlab 比较久,需要耐心等待一下,在此之前需要保证80端口不被占用
[root@node1 ~]# gitlab-ctl reconfigure#等待完成,看到如下结果,说明配置成功
Running handlers:
Running handlers complete
Chef Client finished, 387/552 resources updated in 01 minutes 55 seconds
gitlab Reconfigured!#查看启动状态 全部为run说明正常启动
[root@node1 ~]# gitlab-ctl status
run: gitaly: (pid 15333) 182s; run: log: (pid 14995) 225s
run: gitlab-monitor: (pid 15350) 181s; run: log: (pid 15153) 213s
run: gitlab-workhorse: (pid 15318) 182s; run: log: (pid 14876) 239s
run: logrotate: (pid 14928) 231s; run: log: (pid 14927) 231s
run: nginx: (pid 14895) 237s; run: log: (pid 14894) 237s
run: node-exporter: (pid 15132) 219s; run: log: (pid 15131) 219s
run: postgres-exporter: (pid 15387) 180s; run: log: (pid 15240) 199s
run: postgresql: (pid 14634) 273s; run: log: (pid 14633) 273s
run: prometheus: (pid 15370) 181s; run: log: (pid 15191) 205s
run: redis: (pid 14574) 279s; run: log: (pid 14573) 279s
run: redis-exporter: (pid 15175) 207s; run: log: (pid 15174) 207s
run: sidekiq: (pid 14858) 245s; run: log: (pid 14857) 245s
run: unicorn: (pid 14820) 247s; run: log: (pid 14819) 247s
至此最基本的gitlab已经正常运行起来了!
2.3Gitlab使用
2.3.1 此时我们在浏览器中访问http://192.168.66.129
Web页面提示需要设置一个密码(最少8位数)我这里设置密码为:12345678
登录系统,默认用户名为root
关闭自动注册 因为为内部使用不需要用户自己注册,由管理员分配用户即可
点击Admin Area 进入管理区域
点击settings 把Sign-up enabled的钩去掉即可
保存即可
2.3.2 创建组,创建项目
进去管理区域,点击New group
输入相关信息,并选择Private
点击Create group即可,如下说明创建成果
类似上面的方法,创建一个项目,并选择web组
看到如下,说明项目创建成功
测试一下
新建一个Readme,并随意输入
2.3.3 在客户端测试,并配置ssh免秘
[root@node1 ~]# useradd www
[root@node1 ~]# passwd www
更改用户 www 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@node1 ~]# su www
[www@node1 root]$ ssh-keygen -t rsa -C "yuanjy@juweitu.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/www/.ssh/id_rsa):
Created directory '/home/www/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/www/.ssh/id_rsa.
Your public key has been saved in /home/www/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:J5Ja/RLAE4KPv70zz1YMmrz7r5ojLPfchGThH9hBdI8 yuanjy@juweitu.com
The key's randomart image is:
+---[RSA 2048]----+
| .. ..o . |
| . o o . o |
| o = . E . |
| . .. O.. |
| . .OoSo. |
| .=++ *o |
| ..o..+.. |
| . =.*=.. |
| o oB@*o. |
+----[SHA256]-----+
[www@node1 root]$ cd
[www@node1 ~]$ cd .ssh/
[www@node1 .ssh]$ ll
总用量 8
-rw------- 1 www www 1679 4月 21 16:40 id_rsa
-rw-r--r-- 1 www www 400 4月 21 16:40 id_rsa.pub
[www@node1 .ssh]$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGS5bnpPvBPLkh/j3OJ8j3Z0dkxgUgLMT2ebeL0U/c7cQ6xGRgKajfLLb2xp+U4XCgU6kKBncXvFWh4PY7/eBPpVbpstJmtf/13gAYB/skHen+jl58k1JP4m/9W/aB6KW3PBRuWF9BA3ki0fHt624R2qSHoaveHiP2YK/9hsYhAizzdN3Y6JMCfSxZ7/FluLb+tXuASLuVQqyilxxZGkAjY0/15zntXyNTovAfseeRrmyAktvMgjK9ZfdGZp/nzS3LXclw2/QhAyT4mLL9FzLLWE2adYuBxj/42UrVZrc7bfkTMUllYvSq4Qkg0VS/8n5FLxEjAIKwPDTkbeTFVKan yuanjy@juweitu.com
[www@node1 .ssh]$
上面创建了一个www用户,并生产了秘钥文件,在浏览器中点击个人头像,点击settings进入设置,点击SSH keys
输入刚刚生成的公钥,点击Add key既可
获取项目路径,复制相关路径
在客户端测试
[www@node1 ~]$ git clone git@gitlab.example.com:web/web-demo.git
正克隆到 'web-demo'...
ssh: Could not resolve hostname gitlab.example.com: Name or service not known
fatal: Could not read from remote repository.#PS 因为我这里是虚拟机没有配置相关域名,也没有修改hosts,这里就临时把gitlab.example.com改成IP既可,后面可以修改配置文件
Please make sure you have the correct access rights
and the repository exists.
[www@node1 ~]$ git clone git@192.168.66.129:web/web-demo.git
正克隆到 'web-demo'...
The authenticity of host '192.168.66.129 (192.168.66.129)' can't be established.
ECDSA key fingerprint is SHA256:wJyF35WdLaQJxzWYaVgjv61ujKzHcTw1DpR789UPUQ8.
ECDSA key fingerprint is MD5:3c:96:f6:ad:15:ba:73:fd:67:ac:54:52:84:4d:0a:b3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.66.129' (ECDSA) to the list of known hosts.
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
接收对象中: 100% (6/6), done.
[www@node1 ~]$ ll
总用量 0
drwxrwxr-x 3 www www 35 4月 21 16:49 web-demo
[www@node1 ~]$ cd web-demo/
[www@node1 web-demo]$ ll
总用量 4
-rw-rw-r-- 1 www www 44 4月 21 16:49 README.md
[www@node1 web-demo]$ cat README.md
测试专用 测试 。。。。。。。。[www@node1 web-demo]$
至此Gitlab基本使用已经完成
三、Jenkins
3.1 Jenkins简介
Jenkins
只是一个平台,真正运作的都是插件。这就是jenkins流行的原因,因为jenkins什么插件都有
Hudson
是Jenkins的前身,是基于Java开发的一种持续集成工具,用于监控程序重复的工作,Hudson后来被收购,成为商业版。后来创始人又写了一个jenkins
,jenkins在功能上远远超过hudson
Jenkins官网:https://jenkins.io/
3.2 Jenkins部署
Jenkins 是由java语言编写,所以我们这里需要java环境,我事先已经安装好了1.8.0_161
PS:因为gitlab中的unicorn组件会监听8080端口,而Jenkins默认也是监听8080,这里我们采用node2来部署jenkins
#jenkins自己提供了yum源,这里采用yum方式,也可以采用源码编译的方式[root@node2 ~]# cd /etc/yum.repos.d/
[root@node2 yum.repos.d]# wget http://pkg.jenkins.io/redhat/jenkins.repo
[root@node2 ~]# rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
[root@node2 ~]# yum install -y jenkins
[root@node2 ~]# systemctl start jenkins
在浏览器端访问http://192.168.66.130:8080,看到如下界面就说明启动成功
查看输入密码,登录进入,会看到如下页面
选择安装推荐插件即可,等待安装完成
填写要创建的管理用户这里使用Admin 密码为12345678,点击保存并完成即可。
点击开始使用Jenkins即可
至此基本的Jenkins已经正常的运行了
3.3 Jenkins插件安装
因为我们要和gitlab结合,所以这里需要安装gitlab的插件
在系统管理中,进入插件管理,搜索gitlab
按实际情况,选择需要的插件,点击下载待重启后安装既可
等待安装完成,并重启Jenkins
四、实现持续集成
点击创建一个新任务,输入任务名字,选择自由风格,点击确定既可
在源码管理添加源码路径,点击Add,添加认证,这里是git,如果是svn,需要安装svn相关插件
选择SSH认证方式
在Gitlab上创建deploy keys
点击新建,并在node2 新建www用户,并创建秘钥文件
[root@node2 yum.repos.d]# useradd www
[root@node2 yum.repos.d]# cd
[root@node2 ~]# passwd www
更改用户 www 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
抱歉,密码不匹配。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@node2 ~]# su www
[www@node2 root]$ ssh-keygen -t rsa -C "yuanjy@juweitu.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/www/.ssh/id_rsa):
Created directory '/home/www/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/www/.ssh/id_rsa.
Your public key has been saved in /home/www/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:CSt+dEEFmyv40qJ5d1e/NbCHbn9fgEYLaf2FhKHuptk yuanjy@juweitu.com
The key's randomart image is:
+---[RSA 2048]----+
| oo. .o. |
| . o +.. . |
| . + = o . .|
| . o * o + . |
| o + S . +.o |
| . = o . .. +. |
| + + o. + oo|
| o.+. .=. ..o.+|
| o. . .o.E ..oo+|
+----[SHA256]-----+
[www@node2 root]$ cd
[www@node2 ~]$ ll
总用量 0
[www@node2 ~]$ cd .ssh/
[www@node2 .ssh]$ ll
总用量 8
-rw------- 1 www www 1675 4月 21 23:42 id_rsa
-rw-r--r-- 1 www www 400 4月 21 23:42 id_rsa.pub
[www@node2 .ssh]$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZZE5beieQdGcCQLkHjeh/4TJXwGnybLc7A0xVfTSQszjq7jx/m6jjE4pOHMQX/yUqb9Pg+NdvsJynpV1ZSNr/ojm18vR4S7sj+6nEV0kIP0IWOLeqSlHKvr9BFggkvcAjSTzsSc31P1Wn8rs6z9xag8WWK759vSz1BdG85fW5xgDdlu8ynwGulF6roOa2pAKhCCk2ibRvwYbpElVGcFA6taf7LOnR63842JsYbeC+a8XTcZmWFWVq8JYfeDcoHZ/61gC9lmiIlsVlEGifAJaM6KHQxkViQtEpWzgfRvKEnBmXigiCUvbJPBNSPCbzSPVYK+Yv1llBsGJQfp/74glD yuanjy@juweitu.com
[www@node2 .ssh]$
点击Create既可,填写私钥文件,点击Add既可
点击保存既可,点击立即构建
点击查看查看控制台
至此持续集成初步已经完成了
转载于:https://my.oschina.net/rootliu/blog/3013744
持续集成Jenkins+Gitlab相关推荐
- 持续集成Jenkins+Gitlab实现持续集成
用户说明 假设node3是程序员的个人电脑,在这台机器上编写代码 ip地址192.168.10.10 Git的安装部署及使用 git config --global user.name 'zzg' # ...
- 持续集成Jenkins大法好
持续集成Jenkins从初级到高级 1. 虚拟机安装 2. jenkins 安装 2.1 主要配置 2.2 安装Java环境 2.3 启动jenkins 2.4 开放8777端口供外网访问 2.5 外 ...
- 自动化持续集成Jenkins
自动化持续集成Jenkins 使用Jenkins配置自动化构建 http://blog.csdn.net/littlechang/article/details/8642149 Jenkins入门总结 ...
- 持续集成~Jenkins构建GitHub项目的实现
有了前两讲的基础,这回我们就可以把github上的项目做到CI(jenkins)里了,让它自动去集成部署,持续集成~Jenkins里的NuGet和MSBuild插件,持续集成~Jenkins里的pow ...
- 持续集成 -- Jenkins + Slack 配置
2017.12.13 始发于TesterHome 持续集成 Jenkins + Slack 配置 Why Slack? Slack支持很多平台和工具,接起来方便快捷:可在移动端/PC缎端同步查看:通知 ...
- k8s和harbor的集成_爱威尔-基于kubernetes集群的项目持续集成(gitlab+harbor+Jenkins)安装...
这个算是基于kubernetes集群的项目持续集成的前导篇,先把这用环境搭建好我们后面就可以专注做基于k8s的docker化项目持续集成了. gitlab安装 https://about.gitlab ...
- CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
原文地址https://www.cnblogs.com/kevingrace/p/5651447.html 近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更 ...
- [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...
- 研发协同平台持续集成Jenkins作业设计演进
源宝导读:Jenkins作为一个开源的持续集成工具,被大家广泛使用.本文将分享,Jenkins在明源云研发协同平台中的运用,以及在其作业设计方面的演进历程. 一.作业设计1.0 起初,为了尽快推出研发 ...
最新文章
- java 鼠标单击_不通过鼠标点击,单纯的通过Java代码生成鼠标单击事件
- 学习Docker从小白到入门
- css 浮动问题 display显示 和 光标设置cursor
- 如何彻底禁用Chrome浏览器的缓存功能
- SQL Server定期自动备份
- 阿里高级技术专家张建飞:应用架构分离业务逻辑和技术细节之道
- 电脑rar文件打开方式_怎么压缩文件,如何压缩文件?压缩软件哪个好?
- 在线十六进制颜色随机生成器
- HTML DOM nodeName nodeValue
- 人工势场法脱离极小值点
- jQuery实现记住帐号密码功能
- 黑苹果安装记录(史上最简单的安装教程——小白福利)
- java新手代码翻译成中文_急!老师让我把以下代码翻译成中文的
- [NAS] Synology (群晖) DSM相关服务及套件安装
- 荣耀手机两个android文件夹,华为手机文件管理中,这几个文件夹可以任意删除,其他的千万不要乱删!...
- Mysql 实现行转列功能
- 通过银行卡号识别银行
- 微信公众号用什么软件编辑?
- 软式棒垒球运动进校园
- 关于Android开发中如何使用dp表示长宽
热门文章
- 枚举的练习、声明一个枚举类型Status, Status(员工状态),可以限定为4个:空闲(Free),忙(Busy),休假(Vocation),离职(Left)
- chrome://tracing 性能分析神器
- 苹果/Mac电脑怎么卸载软件?软件卸载不了怎么办?
- boostrap老黄历代码的实现
- 分布式锁解决并发的三种实现方式
- BuildDownload maven-metadata.xml...打包一直卡在这里
- 微信小程序开发之如何哪获取微信小程序的APP ID
- 如何彻底卸载ArcGis
- MySql8安装错误信息:The service already exists!
- 黑马程序员 面向对象总结2