持续集成之 Jenkins+Gitlab 简介:
持续集成概念:
持续集成 Continuous Integration
持续交付 Continuous Delivery
持续部署 Continuous Deployment
什么是持续集成:
持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并进程自动化测试
什么是持续交付:
持续交付指的是在持续集成的环境基础之上,将代码部署到预生产环境
持续部署:
在持续交付的基础上,把部署到生产环境的过程自动化,持续部署和持续交付的区别就是最终部署 到生产环境是自动化的
部署代码上线流程:
1.代码获取(直接了拉取)
2.编译 (可选)
3.配置文件放进去
4.打包
5.scp 到目标服务器
6.将目标服务器移除集群
7.解压并放置到 Webroot
8.Scp 差异文件
9.重启 (可选)
10.测试 11.加入集群
运维必知 OWASP:
Jenkins 上 OWASP 插件介绍: 它是开放式 Web 应用程序安全项目[OWASP,Open Web Application Secunity Project]
它每年会出一个 top10 的安全漏洞,我们需要知道当前 top10 的漏洞有哪些
https://www.owasp.org/images/5/57/OWASP_Proactive_Controls_2.pdf
https://www.owasp.org/index.php/Top_10_2013-Top_10
Gitlab 介绍:
GitLab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库, 可通过 Web 界面进行访问公开的或者私人项目
GitLab 拥有与 Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库 的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可 以轻松实现代码复用,便于日后有需要的时候进行查找
安装gitlab:
首先安装一个git客户端:
[root@localhost web-demo]# yum -y install git
安装gitlab-ce,并配置启动:
[root@localhost ~]# rpm -ivh gitlab-ce-11.9.8-ce.0.el6.x86_64.rpm
[root@localhost ~]# gitlab-ctl reconfigure
[root@localhost ~]# vim /etc/gitlab/gitlab.rb
修改:
external_url 'http://192.168.1.10'
[root@localhost ~]# gitlab-ctl reconfigure
gitlab 常用命令:
关闭 gitlab:gitlab-ctl stop
启动 gitlab:gitlab-ctl start
重启 gitlab:gitlab-ctl restart
web访问192.168.1.10
Web 页面提示我们需要设置一个账号密码(我们要设置最少 8 位数的一个账号密码)
设置完成后进行登录,默认用户名是root:
进来之后新建一个项目:
设置ssh密钥:
[root@localhost ~]# ssh-keygen -t rsa
[root@localhost ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzi9enzO1wD4l3429Qk7sSpkJE2oacjdpmDaThf5UniqPua6p0DF/VJ/p0l0uSdf2ZPpraoe+JaaJTTy05+AqdSl+zsn4hvzZuy7Kxu9/W+HUaiS87WPw8nYA5xVElMnupNUAeJPQ4GvLsEJ2CLFCS0FA8QBt8Sx/TLnjp6MCkEb/FRXotRUHplRXQcMcVikLL9xRPVARvn1ac3sxiYahcQNiq/qo8sztQ0AyeLNiGo6iiRsXbuPMSV5wvqiR3eYXv9Ou9Ttch2tqyMH8X6nf2MYhVIsXMBvpNTBAKpGjhhItAt/MqHVJ288kyDvL1Wo89wsRDn3Cu/YeaejHyAYhp [email protected]
将新建的项目克隆下来:
[root@localhost ~]# git config --global user.name "Administrator"
[root@localhost ~]# git config --global user.email [email protected]
[root@localhost ~]# git clone [email protected]:root/web-demo.git
[root@localhost ~]# cd web-demo/
模拟开发继续写代码提交:
[root@localhost ~]# vim index.html
nihao
[root@localhost ~]# git add index.html
[root@localhost ~]# git commit -m "1"
[root@localhost ~]# git push -u origin master
git push 命令用于将本地分支的更新,推送到远程主机。它的格式与 git pull 命令相仿
刷新浏览器就能看到了:
自动化运维之 DevOps:
DevOps(英文 Development(开发)和 Operations(技术运营)的组合)是一组过程、方法与 系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、 协作与整合
它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作 必须紧密合作
简单的来说 DevOps 是一种文化,是让开发开发、运维、测试能够之间沟通和交流
自动化运维工具:saltstack、jenkins、等。因为他们的目标一样,为了我们的软件、构建、 测试、发布更加的敏捷、频繁、可靠
如果运维对 git 不熟,是无法做自动化部署。因为所有的项目都受制于开发
Jenkins 介绍:
Jenkins 只是一个平台,真正运作的都是插件。这就是 jenkins 流行的原因,因为 jenkins 什么插 件都有
Hudson 是 Jenkins 的前身,是基于 Java 开发的一种持续集成工具,用于监控程序重复的工作,Hudson 后来被收购,成为商业版。后来创始人又写了一个 jenkins,jenkins 在功能上远远超过 hudson
Jenkins 官网:https://jenkins.io/
安装:
[root@localhost ~]# rpm -ivh jenkins-2.172-1.1.noarch.rpm
修改他的端口号:默认是8080,因为和gitlab冲突了,所以我们修改为8081
[root@localhost ~]# vim /etc/sysconfig/jenkins
JENKINS_PORT="8081"
使离线安装:
[root@localhost ~]# tar zxf jenkins-plugins.tar.gz -C /var/lib/jenkins/
[root@localhost ~]# /etc/init.d/jenkins start
[root@localhost ~]# netstat -anput | grep 8081
tcp6 0 0 :::8081 :::* LISTEN 11296/java
浏览器访问192.168.1.10:8081
查看/var/lib/jenkins/secrets/initialAdminPassword,将密码复制
[root@localhost web-demo]# cat /var/lib/jenkins/secrets/initialAdminPassword
aa3e329424494a93bd9b0450f92c2e73
因为是使用离线安装所以这时候需要断网,然后点击继续:
来到这个界面就可以联网了:
Jenkins创建项目拉去gitlab上的代码:
新建任务----构建自由风格的软件----web-demo---源码管理----git
这里报错:
无法连接到存储库:命令“ git ls-remote -h http://192.168.1.10/root/web-demo.git HEAD”返回状态码128:
stdout:
stderr:致命:'http://的身份验证失败192.168.1.10/root/web-demo.git/'
解决方案:
[root@localhost web-demo]# cat /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA7mMhexS9iijP4uShyldzmBsNhrEeYLy8qDBDbdb0+vh50wxO
z7G6/vO0sNODOaZfJv1N60VYhvW4kw+gKRPpCpwEFLg5DI/i8KwhlZz+lye2RTg9
zGkk1OcZWNw0T4dXCv563kRk97XNZtmwQIaryBG50r58k6zR1jFgLZJr1NRbhyxk
qiC1THVY9BVj2mSgsf7CoCJ1ylayvcfZdirj8X9GxUYGiwBhp6zVXJgj/g6ukkiv
mBZo0Eqwyrcn+FneaD89/oIVOhXFcdmMqLK8yqjtr/fQdOCaq5TZ3oLv1VhaRu6g
NxzzifzVdYn/sxkNRlWX2oQCB+8x5VJHiJzMdQIDAQABAoIBAQCiokDKPpkc88D4
E3EJoWX8ZKByvs1xw/GVcO/ftOIHgpNiV6hA7AkePNeON470Orv51qBdHT9LO8KD
mgpzW+EGWvAxzoklN9jkxxpWfvf12aLxUHBgz27QTSWuyPRrOXM5zem3T8Pudzq9
q1AihX4WjXlP/KLzANlbnu31yUoFtNXmxG8UdFGkUXK0m8v6FrTeVUlSEo5Fsb1u
vP84VKlgqLTkf3xs8yDtsT9uvlXOuMs5dPvFOW9Va4Lo6z9fMdE/N8UZ3S14SKAD
Ht1BlzYv+tUStBbXgw+X3TmQkIvk/gn2MDZB3Gj7U42+1qLklhehtcHomVJ5o4cu
tJIUwxdhAoGBAPurvxoOXzRQKZZ1bTBEJ3w3z3tbsT84mwTnD9zyA3cJIQRzNsJQ
xohjC+3YGf6VOpU25jFC3W7oXZWLRvzbYtChCn66FD05vm823Zhky2MUEf5+RE0d
WdYb52f3F/Jl9Neaj0DskuuVT4ImfI7eCUxbK8oDFTF5m8m988LaZf4ZAoGBAPJ8
43yz7tyquND2kohCMwxjotpSunz57bnwp0plEHkRMRGpp4MjdSN8MHgHDPPQQN6m
fK5tYMFAWqu4jtDy2guLgSYFqDWPzAqROBU4NBk09G2o0pmrJQBmiik021p6z9E6
ZA2jGZGM9ZmbMK2RnQQNmF5mpcH3mn9ng+QRcFS9AoGALI6ct+1Bd86Vfljt6vS2
FO0Ao/N47xuDfpu2GEUUzfdkzBfl4wNQEweOLh7rg0JCa/abTK9s6tzi7L4K5Gun
FA7e/87MFIbrq18IXpnB1JnSEb+jMg/3PswT7Tk3GShp794ibLk1zdXSjNVpihXP
iaA+oXZoQyknptElniLymckCgYA00VUvvXWi5SDai0rBmUHLSgyX53sta7cHUE7w
GnFrHX6FrWGKY/fI4e0gx9BfbxYiKTtxNuvjTCQz0UBybONnrlxULtlDyW2VQ6pm
nNZkQy+WjzZIOIoXuz4O2a+J1sRbe499lPAlzwFUEwSYWeZMkrWEonEqfcdORvro
e4/vNQKBgG1lLcT32WPWQ/Ir76yg/BJtWfXfJgQBZWc4h2SF/OcvJ38jd19YasTc
7QmVsdoNzM3hDzdhmg7TGN1mYNcLPBjyR3wangCZS7XHMmbkL1eNv5cbDrPbcuWS
BUdj3V8uVn3LVsQ85+MWCPKsWqsRBd06wBkG66DDtzldWno8ZRvR
-----END RSA PRIVATE KEY-----
源码库浏览器选择:gitlab
url写http协议
版本9.1
回到jenkins主界面就可以看到刚才创建的项目---选择立即构建 ---构建比那好下点击控制台输出就可以看出详细信息
[root@localhost workspace]# pwd
/var/lib/jenkins/workspace
[root@localhost workspace]# ls
web-demo web-demo@tmp
[root@localhost workspace]# ls web-demo
index.html
[root@localhost workspace]# cat web-demo/index.html
nihao
gitlab代理自动构建:
这是自己手动构建的,非常不方便,然后我么设置自动构建:
首先jenkins更换国内源:
百度搜索:清华大学jenkins地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json1
系统管理---插件管理—高级
系统设置----插件管理---高级---上传gitlab-oauth、gitlab-plugin、windows-slaves、rub-runtime、gitlab-hook插件
将这几个插件上传:要按顺序上传
系统管理---全局安全色湖之---授权策略---取消勾选防止跨站点请求伪造---勾选匿名用户奴有可读权限:
系统管理—系统设置---取消勾选Enable authentication for '/project' end-point
web-demo---配置---构建触发器---勾选出发远程构建---构建身份令牌(在终端执行openssl rand -hex 10)
[root@localhost workspace]# openssl rand -hex 10
53a9615e532cbce5cc0c
勾选Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.1.10:8081/project/web-demo
回到gitlab的web界面---点击小钳子---settings—Network—Outbound requests---勾选Allow requests to the local network
点击projects—your project---web-demo—settings---Integrations---填写URL地址
往下拉---取消勾选Enable SSL verification
完成之后会有下面会有一个webhook点击test进行测试,出现201状态吗表示成功:
回到终端进入刚才项目的目录下上传一个文件到gitlab,测试jenkin是否会自动构建:
[root@localhost ~]# cd web-demo/
[root@localhost web-demo]# vim python.py
[root@localhost web-demo]# git add python.py
[root@localhost web-demo]# git commit -m "1"
[master e58ce19] 1
1 file changed, 12 insertions(+)
create mode 100644 python.py
[root@localhost web-demo]# git push origin master
Counting objects: 4, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 274 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:root/web-demo.git
5d397e5..e58ce19 master -> master
浏览器查看:
Jenkins已经完成了构建