3台Lunix服务器
1. git服务器,ip:10.0.0.200,用于安装gitlab,系统CentOs7
2. Jekins服务器,ip:10.0.0.202,用于安装Jenkins,系统CentOs7
3.Web服务器,ip:10.0.7,用于测试部署web服务,系统CentOs7
系统准备
系统环境准备
GitLab安装:
Git下载
官网:https://about.gitlab.com/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/gitlab‐ce/yum/
安装环境:
1. CentOs7系统
2. 4G内存
3. gitlab‐ce‐10.2.2‐ce 安装包
4. 禁用防火墙,关闭selinux
步骤如下:
1. 安装gitlab
[root@git ~]# yum install policycoreutils-python -y # 安装依赖
rz ‐bye gitlab‐ce‐10.2.2‐ce.0.el7.x86_64.rpm # 上传gitlab安装包 下载方式可通过 国内清华源gitlab‐ce社区版本下载
[root@git ~]# rpm -ivh gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm #安装gitlab
2. 更改配置文件
[root@git ~]# vim /etc/gitlab/gitlab.rb
更改url地址为本机IP地址 external_url 'http://10.0.0.200'
3.Gitlab命令及文件
gitlab‐ctl reconfigure # 更改配置文件后需重新配置
/opt/gitlab/ # gitlab的程序安装目录
/var/opt/gitlab # gitlab目录数据目录
/var/opt/gitlab/git‐dfata # 存放仓库数据
gitlab‐ctl status # 查看目前gitlab所有服务运维状态
gitlab‐ctl stop # 停止gitlab服务
gitlab‐ctl stop nginx # 单独停止某个服务
gitlab‐ctl tail # 查看所有服务的日志
4. Gitlab的服务构成
nginx: 静态web服务器
gitlab-workhorse: 轻量级的反向代理服务器
logrotate:日志文件管理工具
postgresql:数据库
redis:缓存数据库
sidekiq:用于在后台执行队列任务(异步执行)。(Ruby)
unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。(Ruby
Web Server,主要使用Ruby编写)
gitlab汉化
git命令
yum install git -y
汉化步骤:
1.git clone https://gitlab.com/xhang/gitlab.git #下载汉化补丁
2.git branch ‐a #查看全部分支版本
3.git diff remotes/origin/10-2-stable remotes/origin/10‐2‐stable‐zh > ../10.2.2‐zh.diff #对比版本,生成补丁包
4.gitlab-ctl stop #停止服务
5.patch -d /opt/gitlab/embedded/service/gitlab‐rails -p1 < /tmp/10.2.2-zh.diff #打补丁
6.gitlab-ctl start
gitlab-ctl reconfigure#重启和重新配置
gitlba的网页操作
浏览器输入:10.0.0.200
1、设置密码
2、修改外观(也可不修改)
3、添加群组和用户
1、添加群组
2、添加用户
3、修改用户密码
添加用户到群组并给与开发权限
4、创建仓库(项目)
2、克隆一个项目,这里我们直接克隆一个别人的项目
git地址:https://gitee.com/explore/starred/manage-monitor?lang=Html
1.先去上面网站复制克隆地址
2.我们选择克隆方式,选择组为刚创建的组,项目名称自定义,我们这里用的是monitor
3.创建成功
5、设置分支保护
正常情况下,我们是不允许在master分支上修改内容的,我们只能创建新的分支修改,修改完成后进行合并,这里我们做分支保护的目的是为了让其他用户如dev用户在修改完代码内容之后,发起合并请求,root用户进行审核完成才能进行合并
1、无分支保护情况
我们首先登陆dev用户,要了解dev是开发用户,root是老大,老大一般做审核,拥有最高权限
退出root用户
dev用户登录时需要重新编辑一次密码
登录成功后打开我们的项目
首先创建一个新的分支,在新分支上修改内容
我们随便在test分支上修改一个内容
这里我们给他加了一个对不起
现在我们请求合并分支
提交完合并请求会发现我们现在是可以合并的,因为没有设分支保护
我们查看一下master分支,已经合并成功
2、有分支保护情况
登录root用户设置分支保护
选择保护master分支
设置成功
这时我们推出root用户,登录dev用户,继续测试一下,修改test下404.html,这里我们又加了个“保护”
然后我们合并请求(步骤和上面一样),这时我们不能进行合并,因为有保护,只能root账户老大进行合并
登录到root账户,查看并合并请求
合并成功查看一下效果
安装Jenkin
官网 https://jenkins.io/
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开
放易用的软件平台,使软件的持续集成变成可能。
1、安装准备
准备jenkins服务器关闭selinux和防火墙
内存2G 50G+硬盘
jenkins 10.0.0.201
2、安装JDK运行环境和jenkins服务
上传JDK和jenkins rpm安装包,使用rpm ‐ivh进行安装,安装完JDK运维java测试是否安装成功
[root@jenkins ~]# rpm -ivh jdk-8u181-linux-x64.rpm
[root@jenkins ~]# rpm -ivh jenkins-2.99-1.1.noarch.rpm
3、配置jenkins
[root@jenkins ~]# vim /etc/sysconfig/jenkins
启动用户修改为root
JENKINS_USER="root"
4、启动jenkins并加入开机自启
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# systemctl enable jenkins
jenkins网页操作
访问页面进行配置
默认端口是8080
http://10.0.0.201:8080
1、在服务器上查看jenkins提示的文件,把密码粘贴到网页
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
91e0de6b56374365be1da3ee2ed75254
2、进入后我们先跳过安装插件界面
成功进入jenkins主界面
3、我们可以再这里先修改一下密码(也可忽略)
4.插件安装
安装完插件查看一下
插件安装目录
[root@jenkins jenkins]# ll /var/lib/jenkins/plugins
总用量 80936
drwxr-xr-x 7 jenkins jenkins 124 12月 3 2019 ace-editor
-rw-r--r-- 1 jenkins jenkins 4279042 12月 3 2019 ace-editor.jpi
drwxr-xr-x 4 jenkins jenkins 56 12月 3 2019 ant
drwxr-xr-x 4 jenkins jenkins 56 12月 3 2019 antisamy-markup-formatter
-rw-r--r-- 1 jenkins jenkins 112796 12月 3 2019 antisamy-markup-formatter.jpi
-rw-r--r-- 1 jenkins jenkins 81259 12月 3 2019 ant.jpi
drwxr-xr-x 4 jenkins jenkins 56 12月 3 2019 apache-httpcomponents-client-4-api
-rw-r--r-- 1 jenkins jenkins 1407235 12月 3 2019 apache-httpcomponents-client-4-api.jpi
drwxr-xr-x 4 jenkins jenkins 56 12月 3 2019 authentication-tokens
-rw-r--r-- 1 jenkins jenkins 14638 12月 3 2019 authentication-tokens.jpi
drwxr-xr-x 4 root root 56 12月 7 2019 blueocean-commons
-rw-r--r-- 1 root root 1540739 12月 7 2019 blueocean-commons.jpi
jenkins主要的目录
/usr/lib/jenkins/:jenkins安装目录,WAR包会放在这里
/etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置
/var/lib/jenkins/:默认的JENKINS_HOME
/var/log/jenkins/jenkins.log:Jenkins日志文件
5、创建一个自由风格的项目freestyle‐job
1、配置项目,丢失旧的构建
2、源码管理将gitlab仓库和jenkins关联
这里我们需要吧jenkins服务器的公钥给gitlab
jenkins端生成公钥
[root@jenkins ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:rm4L5a3Of3URrgcywqOKZtsda5eWoBzZiBsJn/HFztE root@jenkins
The key's randomart image is:
+---[RSA 2048]----+
| |
| . |
| . o . . |
|. . + E o . o |
| o * B.oSo o o . |
| * =o*o o o |
| =.+o.oo . o |
| =.++o== . |
| o...=X=.. |
+----[SHA256]-----+
查看公钥
[root@jenkins ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHKs/orwn138ROGQicn8yiku6xB0Sn7dqty5KRpE9kc7Z6QFHMms/XWiZetsaGv+uKq9XDExF+5Tt1J6nCHEmrImstr17/u5uSr+YH/9LWxxv5SDJphdwwkUeoN+xMcQ/uJ5r8aWnCfS4wKoPXpoYe22AokkQ4RuxoAud6ZxLU5Bo0rJx3Q8WI0ew67SBI6bxRkwdgjmJhNsZiI8vsEKhZDW8kNlYTz8WuW9jBI/V+qewUeKDiS0O+zbrE7qMhtB+Rj9R/jEHOgOi2ucINWKaOkL7H8rmlhK3WFi3gVmX8Bj6otg2q7HfjZlBXY9sx28U2f8vzOEoGYiM+546PKM6F root@jenkins
把公钥给gitlab
这里报错原因是第一次连接他会有一个确认服务器主机的操作,我们需要确认一下
复制上面的报错,如果出现确认主机情况就输入yes
[root@jenkins ~]# git ls-remote -h git@10.0.0.200:zeq/monitor.git
742c1e0055ccdd69c9626052b5463ed5337ad0c9 refs/heads/master
然后我们删除url重新粘贴一遍就好了
3、构建触发器
选择第四个,点击高级
过滤master分支,生成token
4、添加gitlab端web钩子
复制jenkins项目url和token
添加到gitlab
5、添加构建
在jenkins服务器上创建一个脚本目录
[root@jenkins ~]# mkdir /server/scripts -p
编写一个脚本,把从gitlab拉取过来的代码推送到web服务器上
[root@jenkins ~]# vim /server/scripts/do.sh
#!/bin/sh
DATE=$(date +%Y-%m-%d-%H-%M-%S)
CODE_DIR="/var/lib/jenkins/workspace/freestyle-job"
WEB_DIR="/code"
IP=10.0.0.7
get_code_tar(){
cd $CODE_DIR && tar zcf /opt/web-$DATE.tar.gz ./*
}
scp_code_web(){
scp /opt/web-$DATE.tar.gz $IP:$WEB_DIR
}
code_tarxf(){
ssh $IP "cd $WEB_DIR &&mkdir web-$DATE && tar xf web-$DATE.tar.gz -C web-$DATE"
}
ln_html(){
ssh $IP "cd $WEB_DIR && rm -rf html && ln -s web-$DATE html"
}
main(){
get_code_tar;
scp_code_web;
code_tarxf;
ln_html;
}
main
因为要推送到web服务器上,我们要把公钥给web服务器
[root@jenkins ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.7
增加构建步骤
jenkins自由风格项目创建完成,接下来我们开始配置web服务器
web服务器操作
因为我们最终操作是实现代码自动上线到web服务器,我们要配置web服务器
1.安装nginx扩展源
[root@web01 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
2、安装nginx
[root@web01 ~]# yum install nginx -y
3、配置nginx
[root@web01 ~]# vim /etc/nginx/conf.d/git_jenkins.conf
server {
server_name 10.0.0.7;
listen 80;
root /code/html;
index index.php index.html;
}
4.创建代码存放目录
[root@web01 ~]# mkdir /code
5、启动nginx并加入开机自启动
[root@web01 ~]# systemctl start nginx
[root@web01 ~]# systemctl enable nginx
进行代码自动上线测试
为了直观的看到代码变化,我们修改主页index.html文件,这里我们方便演示,直接在root用户的master分支进行修改,实际生产环境中是不允许这样做的,切记。
修改步骤和上面讲解gitlab的分支保护步骤一样,我们修改43行的文字改成张恩清ichn.me
2、修改完成后查看jenkins端
这里我们已经自动构建成功了,蓝色代表成功,红色代表失败
3、web端操作
在浏览器上输入web服务器地址http://10.0.0.7查看效果
这样一个自由风格的jenkins代码自动上线就创建完成了,接下来我们做一个Pipeline项目