jenkins+gitlab实现手动和自动同步
jenkins介绍:
CI&CD:
持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次, 主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。
持续交付的目的是最小化部署或发布过程中团队固有的摩擦, 它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。
持续部署是一种更高程度的自动化,无论何时代码有较大改动, 都会自动进行构建/部署。
Jenkins:
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
jenkins安装:
准备:
gitlab:192.168.42.143
jenkins:192.168.42.168
nginx:192.168.42.172
jenkins和gitlab手动同步
- 官方文档:
https://www.jenkins.io/zh/doc/
- 下载jenkiins:
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.222-1.1.noarch.rpm
- 安装jenkins
复制jenkins包到虚拟机/usr/src下
cd /root
yum -y install jenkins-2.222-1.1.noarch.rpm
- 如果是最小安装则需要安装java
yum -y install java
- 安装完成后,需要修改端口号,因为jenkins和gitlab在一起使用
vim /etc/sysconfig/jenkins
JENKINS_USER="root" (用户修改为root)
JENKINS_PORT="8081" (端口修改为8081)
- 开启jenkins服务
systemctl start jenkins
-
登录到jenkins
http://192.168.42.168:8081 - 在/var/lib/jenkins/secrets/initialAdminPassword下查找密码
cat /var/lib/jenkins/secrets/initialAdminPassword
2a96cbceac684a359cff081143ceabcf
- 解决jenkins缓慢的方法:
vim /var/lib/jenkins/updates/default.json
修改第一行:www.google.com 改为 www.baidu.com
- 修改完成后,重启jenkins
systemctl restart jenkins
-
出现**
安装推荐插件
**==和 **
选择插件来安装
,**为了效率,选中
选择插件来安装
,进到下一个界面,直接右上角的x。 - 复制插件包到虚拟机
tar -zxf jenkins-plugins.tar.gz -C . (将jenkins差价解压到当前目录)
cp -rp plugins/* /var/lib/jenkins/plugins/ (将解压出来的文件复制到plugins下)
-
为了方便,修改jenkins的密码:
右上角–admin点击下拉三角–Configure–Password字段–修改密码为123–save保存
-
重启服务:
systemctl restart jenkins
-
为jenkins新建一个项目
点击左上角logo–回到主页面–选择新项目“New Item”–填写项目名–选择项目类型“Freestyle project”–save保存
-
这时就需要另一个软件gitlab,用来上传文件,jenkins再来同步
(1.)安装git服务
官方网站:https://about.gitlab.com
安装前提软件
yum install curl policycoreutils openssh-server openssh-clients postfix -y
下载清华gitlab安装包
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
复制rpm包到/usr/src,yum安装
yum -y install gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
(2). 修改gitlab的配置文件:
vim /etc/gitlab/gitlab.rb
修改:
external_url 'http://192.168.42.143' :修改为本机地址
保存退出
(3.)启动gitlab服务
gitlab-ctl reconfigure
(4.)可以用这条命令来查看状态
gitlab-ctl status
(5).gitlab服务管理命令(开启/关闭/重启)
gitlab-ctl start/stop/restart
(6.)登录gitlab
http://192.168.43.143
管理员:root
密码:初始配置新密码,最少8位
(7.)创建项目web
- 点击上栏的扳手
- 创建group:dev 登录gitlab–admin area–new group–填写组名:dev–往下拉create group
-
创建用户 登录gitlab–admin area–new user–添加用户名、邮箱–create–点击右上角的edit–填写密码–往下拉save create完成
-
创建项目 登录gitlab–adminarea–new project–注意选择组:dev–create group
(8.)创建ssh公钥
ssh-keygen -t rsa
(9.)查看本机和的公钥
cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjCzDpvLehHir7TfNDGLl3URhKFzq+VLDJgDs53W6boquWC25I2vaJdDw/xQl8GvcJE3gnnT9bD127XiN+I6tPqeo8Zwtyj3Pj1wuhXt6hjZBgIr/XECWuSPUvgTuY1LZchcCEmpZJSchpQNzHLAjHx8eGVzzxaXIVnRZB0YY0JgWhYbuaJzeuJ/yElkQIFcmCNPpSBuFHCk+GElyQfl66pZL3UwnOKtyxHR61EnDzZ/TLy9qmcZykJDc0tLaUzaK0gawYOUXfXKcYxN7pGQkt/8XKO2CZpDvofa0fx1CaQiGh7Ni9NzMfDItB6zzlAL+M9OWbVTvDDy7X1Z7RRQcf root@git
(10.)查看jenkins服务器的公钥
[root@jenkins ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCdP5p6UmKuXoME8Lk2BdzCtXDJ1cZ+6hdK/8y8EkvRaSM+4aTX612mJqF3Rzp89amZYy1Ru2UjYdorI7q47Gr+DlCpkGZ8SE6NNGsiMeM5Ol4Zzl+PwiHbccmVJtsHmNA76QKHEIK6ADUV5CFrPTkDxNQGPf7DL102W4pXYN/gX8KKQA5KpYwu0e6n6CZek7Q+YTwdM6PuTsNDQFuw8Rz1a8FUxrm6ldMBx1Hw7x8jZjjy4YunXhJOi0P3cZRc2jzqXAcRLPzvcuFlteAZ6RQAQw7D31ingq2q9Y2YEmrr7ZwJvko4t/azGMqtTmCMVvqEdv7uVY0nut3wp7CA5jfJ root@jenkins
(11.)复制gitlab和jenkins公钥,粘贴等到gitlab网站中
右上角–用户–settings–SSH Keys
(12.)在刚刚创建的项目web中,创建一个文件a.txt
(13.)在gitfulab服务器上下载刚刚创建的文件
git clone git@192.168.42.143:dev/web.git
(14.)验证,查看是否有当前目录下是否有web,有的话进去,就会发现里面有我刚刚创建的文件a.txt
root@gitlab src]# cd web/
[root@gitlab web]# ls
a.txt
(14.)gitlab这个软件不止可以下载也可以上传(注意,上传,需要在我刚刚下载下来的web目录里上传)
[root@gitlab web]# git config --global user.email "zhangsan@qq.com"
[root@gitlab web]# git config --global user.name "zhangsan"
[root@gitlab web]# echo 123456 > new.txt
[root@gitlab web]# git add .
[root@gitlab web]# git commit -m "add new.txt"
[root@gitlab web]# git push -u origin master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 269 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.43.143:dev/web.git
a379b36..c00b94e master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
验证:登录到gitlab网页中查看是否有new.txt
- 还有 一件事,把gitlab服务器上的ssh公钥发送给jenkins服务器
[root@gitlab ~]# ssh-copy-id root@192.168.42.168
- 把jenkins私钥发送给gitlab服务器.
[root@jenkins ~]# ssh-copy-id root@192.168.42.143
-
配置jenkins上的web项目
点击项目web—-点击左上侧的configure—-点击上面的Source Code Management—–选择第二个git(git@192.168.43.143:dev/web.git)—-点击下一行的Add–Jenkins—Username:root—password:填写本机的登录密码—-Add—save
-
把gitlab里的文件下载到jenkins服务器上
选择web—-左侧点击”build now”—下面就会出现一个下载值—点击下载完成的目标—点击左侧的console output(输出到jenkins服务器上)
-
验证,在jenkins服务器上查看/var/lib/jenkins/workspace目录,会有项目同名文件夹,保存git clone 的所有代码
[root@jenkins ~]# cd /var/lib/jenkins/workspace/
[root@jenkins workspace]# ls
web web@tmp
[root@jenkins web]# ls
a.txt new.txt
jenkins和gitlab自动同步
- 在gitee码云上下载一个项目代码(最好是网页代码,要不然测试的效果不好)
[root@localhost ~]# cd /root
[root@localhost ~]# git clone https://gitee.com/kangjie1209/monitor.git
- 在gitlab服务器上创建本地代码库
[root@gitlab ~]# mkdir /web (创建本地库)
[root@gitlab ~]# cd /web/ (进入到本地库)
[root@gitlab web]# git init (初始化git库)
初始化空的 Git 版本库于 /web/.git/
[root@gitlab web]# git remote add origin git@192.168.42.143:/dev/web.git (连接到gitlab的项目web)
[root@gitlab web]# git clone git@192.168.42.143:/dev/web.git (下载项目web中的文件)
[root@gitlab web]# cd web (查看)
[root@gitlab web]# ls
new.txt a,txt
[root@gitlab web]# cp -rf /root/monitor/* . (将刚刚在码云上下载的项目代码复制到/web/web目录下)
[root@gitlab web]# ls (查看是否复制过来)
12.txt img
404.html index.html
alerts.html js
assets keyInfo.html
a,txt labels.html
buttons.html LICENSE
calendar.html list-view.html
charts.html login.html
components.html media
content-widgets.html media.html
css messages.html
deviceManager.html mstp_105_SuperAdmin.iml
dianfei.html mstp_map.html
efficiencyAnalysis.html other-components.html
energy_consumption.html profile-page.html
file-manager.html QHME.iml
fonts readme.md
form-components.html real-time.html
form-elements.html sa.html
form-examples.html tables.html
form-validation.html typography.html
images-icons.html userMng.html
[root@gitlab web]# git add . (将本地目录下的所有文件存到暂存区)
[root@gitlab web]# git commit -m "initial commit" (将暂存区的我那件提交到gitlab的项目web中)
[root@gitlab web]# git push -u origin master
-
在gitlab的项目web中查看是否上传了
- 前面已经在jenkins新建项目了,此处不介绍
- 在nginx服务器上安装一台nginx
[root@nginx ~]# yum -y install epel-release
[root@nginx ~]# yum -y install nginx
- 在jenkins服务器上写就一个上传nginx脚本
[root@jenkins ~]# mkdir /scripts
[root@jenkins ~]# cd /scripts/
[root@jenkins scripts]# vim web.sh
#!/bin/sh
CODE_DIR=/var/lib/jenkins/workspace/web/
WEB_DIR=/usr/share/nginx
IP=192.168.192.168.42.172
TIME=`date +%F-%H-%M-%S`
cd $CODE_DIR && tar zcf /tmp/web-${TIME}.tar.gz ./*
scp /tmp/web-${TIME}.tar.gz $IP:$WEB_DIR
ssh root@$IP "cd $WEB_DIR && mkdir web-$TIME"
ssh root@$IP "cd $WEB_DIR && tar xf web-${TIME}.tar.gz -C web-$TIME && rm -rf web-${TIME}.tar.gz"
ssh root@$IP "cd $WEB_DIR && rm -rf html && ln -s web-$TIME html"
- 将jenkins公钥传输到nginx
[root@jenkins scripts]# ssh-copy-id root@192.168.42.172
- 执行脚本
sh /scripts/web.sh
-
在jenkins网页上关联脚本,自动上传
项目web – configure – build – Execute shell – sh /scripts/web.sh
-
jenkins关联gitlab,实现自动构建上传代码
web项目– configure – build triggers – 勾选Build when a change is pushed to GitLab. GitLab CI Service URL: http://192.168.42.168:8081/project/web – 点击高级advanced– 选择Filter branches by name –在include填写master – 点击generate生成令牌(双击) – 复制令牌(df9555d065b03757d9a18f76eb513413)和触发器顶部url路径(http://192.168.42.168:8081/project/web)– save保存
-
gitlab项目关联
web项目 –点击左侧 settings – 点击左侧integrations – 把复制的令牌(df9555d065b03757d9a18f76eb513413)和url(http://192.168.42.168:8081/project/web)粘贴过来 – 点击最下面的add webhook
-
更新push代码,测试自动构建上传
在gitlab上,修改代码或添加新的文件
[root@gitlab web]# vim index.html
<title>移动能效管理平台11111</title> (修改这一行为移动能效管理平台11111)
[root@gitlab web]#git add .
[root@gitlab web]# git commit -m "modify index.html"
[root@gitlab web]#git push -u origin master
13.nginx网页测试
http://192.168.42.172