项目——3——lnmp-gitlab-jenkins-ansible
所需环境:gitlab192.168.1.128jenkins192.168.1.129nginx192.168.1.134ansible192.168.1.134gitlab:Gitlab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过Web 界面进行访问公开的或者私人的项目官方网站:https://about.gitlab.com一、安装
环境:
gitlab | 192.168.1.128 |
---|---|
jenkins | 192.168.1.129 |
lnmp | 192.168.1.130 |
ansible | 192.168.1.132 |
gitlab:
Gitlab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过Web 界面进行访问公开的或者私人的项目
官方网站:https://about.gitlab.com
一、安装gitlab
1、安装前提软件
[root@gitlab ~]# yum install curl policycoreutils openssh-server openssh-clients postfix -y
2、下载清华gitlab安装包
[root@gitlab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm #下载rpm包到虚拟机
3、yum安装
[root@gitlab ~]# ls
gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
[root@gitlab ~]# yum -y install gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
4、修改配置文件,指定ip地址
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.1.128' #修改
5、配置启动 gitlab
[root@gitlab ~]# gitlab-ctl reconfigure
查看状态
[root@gitlab ~]# gitlab-ctl status
6、gitlab服务管理命令(开启/关闭/重启)
[root@gitlab ~]# gitlab-ctl start/stop/restart
二、gitlab—管理配置
1、登录gitlab
http://192.168.1.128
管理员:root
密码:初始配置新密码,最少8位
2、取消注册功能
登录gitlab——admin area(顶部菜单栏小扳手图标)——左侧面板settings——Sign-up Restrictions——去除勾选sign-up enabled——下拉save保存
3、修改登录欢迎界面
登录gitlab——admin area——Appearance——填写管理员联系方式和logo——save
注销查看效果:
4、创建用户、组、项目
1)创建用户
登录gitlab——admin area——new user——添加用户名、邮箱——create user——edit——修改密码
2)创建group
登录gitlab——admin area——new group
把zhangsan用户添加到组中:
3)创建项目
登录gitlab——admin area——new project——注意选择组(dianfeng)
三、安装配置jenkins
1、下载安装jenkins
[root@jenkins ~]# wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.222-1.1.noarch.rpm #下载jenkins包到虚拟机
[root@jenkins ~]# yum -y install jenkins-2.222-1.1.noarch.rpm #安装jenkins
2、修改配置文件(默认jenkins端口为8080,如果同gitlab一起安装,需要修改端口)
[root@jenkins ~]# vim /etc/sysconfig/jenkins
JENKINS_USER="root"
#JENKINS_PORT="8081" #这里是分布式的,所以用不到
3、启动jenkins
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# systemctl enable jenkins
4、web界面登录jenkins
5、输入密码
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
52fcff735a43495db0920ffddb3be435
复制加密密码字段,粘贴到web
6、选择安装插件
先选择右上角“X”,进入
7、修改admin用户密码
右上角——admin点击小三角——Configure——Password字段——修改密码——save保存
8、复制插件包到虚拟机
1)解压复制jenkins插件包到/var/lib/jenkins/plugins下
[root@jenkins ~]# ls /var/lib/jenkins/plugins/
[root@jenkins ~]# ls
jenkins-plugins.tar.gz
[root@jenkins ~]# tar zxf jenkins-plugins.tar.gz
[root@jenkins ~]# ls
plugins
[root@jenkins ~]# cp -rp /root/plugins/ /var/lib/jenkins/
[root@jenkins ~]# ls /var/lib/jenkins/plugins/
ace-editor mapdb-api.jpi
ace-editor.jpi matrix-auth
………… //省略
2)重启服务
[root@jenkins ~]# systemctl restart jenkins
9、关联gitlab
1)点击左上角logo——回到主页面——选择新项目“New Item”——填写项目名(freestyle-job)——选择项目类型“Freestyle project”——OK
2)配置项目freestyle-job右边小三角——configure——Source Code Management——git——Repository URL:(git@192.168.1.128:dianfeng/dev.git)——报红字错误,则需要添加私钥认证——如果认证成功——save保存
如果不小心退到主界面了进入配置项目步骤:(没有就略过)
报红字错误解决方案在下边,则需要添加私钥认证——如果认证成功——save保存
解决红色报错问题:
思路:
(1)首先排除jenkins安装了git;
[root@jenkins ~]# git
git git-receive-pack git-shell git-upload-archive git-upload-pack
(2)双方相互copy公钥
[root@gitlab ~]# ssh-keygen -t rsa
[root@gitlab ~]# ssh-copy-id root@192.168.1.129
|
[root@jenkins ~]# ssh-keygen -t rsa
[root@jenkins ~]# ssh-copy-id root@192.168.1.128
(3)在gitlab的网页端添加私钥认证
[root@gitlab ~]#
[root@gitlab ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTOG9ARiDpM7lP30kFFokOiSe3w5+13ir06ungGNo2Rmx/+tA06dVSX1eGtYzVEStyZGLNAp+DqAHZ2mOFK/gmJXyacD73PFjgmKKzIj4LynhhJShQIpqb2coOTdYONMjOak3Dzrvrz3GgQSoV2zG+ZYjSrLdKXni3k19vOWnYKeXETga/ssfWUY/Yp45bUhbvc4zEenHmv4YkVbN0AMxMIckAM7WIPPYOXzv9sPBN7bRC0+hBnmY2Kxxorqew27tU7GiQb422SuMyHH21encXfs1ei0zdHlpMshHTPu8Nt0fX8RIFQV2aM3a0Dh25Q+1R+McZR0yYe2m79AxRjmEp root@gitlab
[root@jenkins ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBUDp1sP2Zrzh/4iUQ25FMQzGPW1m5M0hHH90icclJRPKGFahRWpyebEmXQwG8ngPmLMY7tKf+/twO3T0Wu6TzKNluyG8G1sD34loT70QVKir4C3C7rCBxMkBcVL1R/JRLTb+ffAi7h7nlFDfNbQ2zWWEh2EvuOFZP98IJrfBJbas4lgj9jH7cS1QsTTIVXyb9pmxPHu96PuJwpc3f+Rrhscfn28RGvDibl+ugmUioaOkbXvZxuJ5phikZzlA04eScuhBOjuSQbhlfrwsJzpu+6BLy6vYMh+/s+yyhxrC1u9D2QzZ2RJ2jwCmlqxNo5aLu0C//9S6jS5eLXjyyOgp1 root@jenkins
认证成功——save保存
Git global setup
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
Create a new repository
git clone git@192.168.1.128:dianfeng/web.git
cd web
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
3)选择项目——左侧选择“build now”——下面构建历史出现蓝色标志——选择蓝色标志下拉列表——console output——输出执行过程
选择项目——左侧选择“build now”——下面构建历史出现蓝色标志——选择蓝色标志下拉列表——console output
输出执行过程
4)jenkins服务器上查看/var/lib/jenkins/workspace目录,会有项目同名文件夹,保存git clone 的所有代码
[root@jenkins ~]# cd /var/lib/jenkins/workspace/
[root@jenkins workspace]# ls
freestyle-job freestyle-job@tmp
四、单台搭建lnmp
1、安装Nginx:
使用Nginx官方提供的rpm包
[root@nginx ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
[root@nginx ~]# yum install nginx -y
[root@nginx ~]# systemctl start nginx
[root@nginx ~]# systemctl enable nginx
2、使用第三方扩展epel源安装PHP7.2:
[root@nginx ~]# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@nginx ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
#可以使用这条命令替代上边的两条“yum -y install epel-release”
安装 php72 版本
[root@nginx ~]# yum -y install php72w php72w-cli php72w-common php72w-devel \
php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml php72w-fpm \
php72w-mysqlnd php72w-opcache
[root@nginx ~]# systemctl start php-fpm
[root@nginx ~]# systemctl enable php-fpm
3、安装mysql(mariadb):
[root@nginx ~]# rpm -ivh http://repo.mysql.com/yum/mysql-5.6-community/el/7/x86_64/mysql-community-release-el7-5.noarch.rpm
[root@nginx ~]# yum install mysql-community-server -y
#本地安装可切换到对应文件夹使用命令:yum -y localinstall *
[root@nginx ~]# systemctl start mysqld
[root@nginx ~]# systemctl enable mysqld
[root@nginx ~]# mysql_secure_installation #修改mysql密码
应用1:搭建博客wordpress(基于LNMP)
1)下载wordpress源码包 4.9.8
https://www.lanzous.com/i1kfs6f
2)复制wordpress安装包,到虚拟机/,解压并赋权
[root@nginx /]# unzip wordpress-4.9.4-zh_CN.zip
[root@nginx /]# chmod -R 777 /wordpress
3)创建虚拟主机配置文件
[root@nginx /]# vim /etc/nginx/conf.d/blog.conf
server {
listen 80;
server_name blog.benet.com;
root /wordpress;
index index.php index.html;
location ~ \.php$ {
root /wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[root@nginx /]# systemctl reload nginx
4)创建blog数据库和管理用户
[root@nginx /]# mysql -uroot -p123.com #登录数据库
mysql > create database blog; #创建数据库
mysql > grant all on blog.* to lisi@localhost identified by '123.com'; #设置管理用户及密码
5)客户端通过域名访问blog,安装并配置
vim /etc/hosts
192.168.1.128 blog.benet.com
域名登录:
http://blog.benet.com
登录后台:
http://blog.benet.com/wp-admin
效果图如下所示:
五、ansible
[root@jenkins ~]# ssh-keygen -t rsa #3回车
[root@jenkins ~]# ssh-copy-id root@192.168.1.132
jenkins服务器创建脚本
[root@ansible ~]# mkdir /lnmp
[root@ansible ~]# cd /lnmp
[root@ansible ~]# vim autolnmp.sh
#!/bin/bash
cd /root/web
scp /tmp/wordpress lnmp:/tmp
ssh root@lnmp 'ansible web -m shell -a "mv /wordpress /wordpress.bak"'
ssh root@lnmp 'ansible web -m copy -a "src=/tmp/wordpress dest=/"'
ssh root@lnmp 'ansible web -m shell -a "chmod +x /wordpress"'
ssh root@lnmp 'ansible web -m shell -a "rm -rf /tmp/wordpress"'
rm -rf /tmp/web.tar.gz
[root@jenkins ~]# chmod +x /script/automation.sh #给予执行权
在jenkins已创建的任务的配置的构建环境里的构建——增加构建步骤——执行shell中添加:/script/automation.sh后保存。
然后就是上传代码,合并后验证自动化部署结果
修改hosts文件
[root@ansible ~]# vim /etc/hosts
192.168.1.128 gitlab
192.168.1.129 jenkins
192.168.1.130 lnmp
192.168.1.132 ansible
1、配置epel源,安装ansible
[root@ansible ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #epel源(扩展包)
[root@ansible ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #linux镜像源(组包)
[root@ansible ~]# yum -y install ansible #安装ansible
[root@ansible ~]# ansible --version #查看版本
2、配置清单
[root@ansible ~]# vim /etc/ansible/hosts
[gitlab]
192.168.1.128
[jenkins]
192.168.1.129
[lnmp]
192.168.1.130
[hao:children]
gitlab
jenkins
lnmp
3、在ansible上配置ssh秘钥对访问
[root@ansible ~]# ssh-keygen -t rsa #全部回车
[root@ansible ~]# ssh-copy-id root@192.168.1.128
[root@ansible ~]# ssh-copy-id root@192.168.1.129
[root@ansible ~]# ssh-copy-id root@192.168.1.130
4、复制/etc/hosts到被管理端
[root@ansible ~]# scp /etc/hosts root@gitlab:/etc/
[root@ansible ~]# scp /etc/hosts root@jenkins:/etc/
[root@ansible ~]# scp /etc/hosts root@lnmp:/etc/
或者直接使用ansible-copy模块
[root@ansible ~]# ansible all -m copy -a "src=/etc/hosts dest=/etc/ backup=yes"
5、调用shell模块测试两台是否通信正常
[root@ansible ~]# ansible lnmp -m shell -a "ifconfig ens33"
192.168.1.130 | CHANGED | rc=0 >>
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.130 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::deee:55cb:4e83:8220 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:37:53:5a txqueuelen 1000 (Ethernet)
RX packets 444 bytes 133311 (130.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 235 bytes 43924 (42.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
6、创建目录并下载仓库
[root@ansible ~]# mkdir web
[root@ansible ~]# cd web
Git global setup
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
git clone git@192.168.1.128:dianfeng/web.git
Ansible剧本编写
第一步:进入到上面下载下来的工作目录中
[root@ken ken]# ls
web
[root@ken ken]# cd web/
[root@ken web]# ls -a
. .. .git README
第二步:使用roles来编写剧本
首先需要创建相关的目录
[root@ken web]# mkdir roles/httpd/{tasks,vars,files} -p
第三步:编写tasks文件
[root@ken static_web]# vim roles/httpd/tasks/main.yml
[root@ken static_web]# cat roles/httpd/tasks/main.yml
- name: install httpd
yum: name=httpd state=present
- name: start httpd
service: name=httpd state=restarted
- name: copy test file to httpd
copy: src=roles/httpd/files/index.html dest=/var/www/html
第四步:编写file下的测试文件
[root@ken static_web]# vim roles/httpd/files/index.html
[root@ken static_web]# cat roles/httpd/files/index.html
test for static web
第五步:编写主机清单
[root@ken static_web]# cat inventory/test
[ken]
10.220.5.138
第六步:编写剧本文件
[root@ken static_web]# vim ken.yml
[root@ken static_web]# cat ken.yml
- hosts: ken
remote_user: root
roles:
- httpd
第七步:执行剧本
注意:在执剧本的时候需要使用-i指定创建的主机列表清单,否则会找不到需要执行的节点
可以看到剧本执行完成也没有报错
[root@ken static_web]# ansible-playbook -i inventory/test ken.yml
PLAY [ken] ***********************************************************************
TASK [Gathering Facts] ***********************************************************
ok: [10.220.5.138]
TASK [httpd : install httpd] *****************************************************
changed: [10.220.5.138]
TASK [httpd : start httpd] *******************************************************
changed: [10.220.5.138]
TASK [httpd : copy test file to httpd] *******************************************
changed: [10.220.5.138]
PLAY RECAP ***********************************************************************
10.220.5.138 : ok=4 changed=3 unreachable=0 failed=0
第八步:网页浏览
现在就可以登录该节点进行访问了
文件提交至gitlab
经过上面的步骤之后,已经部署完成了一个静态页面
现在把这些文件提交至gitlab
第一步:文件提交至仓库
[root@ken static_web]# git add .
[root@ken static_web]# git commit -m “v1”
第二步:报错
提交报了这个错
0
00000000000000000000000000*** Please tell me who you are.
Run
git config --global user.email “you@example.com”
git config --global user00.000000n0ame “Y0o0ur Name”
to set your account’s default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got ‘root@ken.(none)’)
直接执行命令
[root@ken static_web]# git config --global user.email “you@example.com”
[root@ken static_web]# git config --global user.name “Your Name”
第三步:推送至gitlab
[root@ken static_web]# git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from ‘matching’ to ‘simple’. To squelch this message
and maintain the current behavior after the default changes, use:
git config --global p0u0s0h0.0d0e0f0a0u0l0t0 0m0a0t0c0h0i0n0g0
0
0T0o0 0s0q0u0e0l0c0h0 0t0h0i0s0 message and ad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000opt the new behavior now, use:
git config --global push.default simple
See ‘git help config’ and search for ‘push.default’ for further information.
(the ‘simple’ mode was introduced in Git 1.7.11. Use the similar mode
‘current’ instead of ‘simple’ if you sometimes use older versions of Git)
Username for ‘http://10.220.5.137’: root ####输入连接你的gitlab的用户名
Password for ‘http://root@10.220.5.137’: ###输入该用户密码
Counting objects: 12, done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (11/11), 815 bytes | 0 bytes/s, done.
Total 11 (delta 0), reused 0 (delta 0)
To http://10.220.5.137/webg1/static_web.git
c47e814…e2ac703 master -> master
第四步:web端查看结果
发现v1版已经上传成功
jenkins 实现持续集成
经过上面的一些操作之后,我们已经完成了静态网站的部署,已经代码的上传
但是发现还是每次执行需要输入命令等
现在我们就使用jenkins来实现持续化部署
第一步:jenkins中创建任务
我创建了一个自由风格的软件项目
项目名称为test_for_static_web
输入完毕之后选择确定即可
第二步:添加源码管理信息
这里的url就是你的项目的地址
下面的凭证,点击Add输入你的gitlab的密码和账号即可
第三步:选择构建
增加侯建步骤选择执行shell
第四步:编写shell
第一行:指定bash为解释器,和编写shell一样
第二行:进入到工作目录,这里引用了了一个变量,意思是工作目录,因为我们的剧本里面都是相对路径所以我们需要进入到git拉取下来的文件中进行执行可以点击下面的可用环境列表了解更多
第三行: 即执行剧本
以上步骤完成之后点击下方的保存即可
第五步:查看执行结果
点击立即构建之后,在最下方会出现一个圆圈,这个圆圈红色代表失败,蓝色代表成功,可以鼠标放上去显示的
第六步:查看失败原因
点击下方的红色圆圈即可查看失败原因
这里的失败原因是因为运行jenkins程序的是jenkins用户,我们连接节点的秘钥是root的,所以现在连接不上
第七步:更改jenkins的配置文件
把运行jenkins的用户更改为root即可
更改完成之后重启jenkins
[root@ken static_web]# sed -i ‘s/JENKINS_USER=“jenkins”/JENKINS_USER=“root”/’ /etc/sysconfig/jenkins
[root@ken static_web]# systemctl restart jenkins
第八步:再次执行构建
再次点击构建可以发现现在红色圆圈变成了蓝色的成功圆圈
点击一下这个成功的圆圈查看运行过程
第九步:查看工作目录
许多人会疑惑,在这里使用的git clone,它把文件下载到哪里去了那?
其实是放在jenkins的工作目录之下的你的项目名称里面了,还记得我们的项目名称是test_for_static_web吗?
[root@ken static_web]# ls /var/lib/jenkins/workspace/
test_for_static_web/
查看一下这个目录下面都有什么
看到了吧,从gitlab克隆的回来的文件都放在了这里即jenkins工作目录下>你的任务名称面
[root@ken static_web]# ls /var/lib/jenkins/workspace/test_for_static_web
inventory ken.retry ken.yml README roles
更改网站数据
现在我们的工程师就可以在他的电脑上面更改网站数据,并实现持久集成自动化部署了
第一步:克隆数据
现在我使用的电脑IP 为10.220.5.139,现在假如另外一位工程师的电脑是10.220.5.137上面
[root@ken tmp]# mkdir p
[root@ken tmp]# cd p
[root@ken p]# git clone http://10.220.5.137/webg1/static_web.git
Cloning into ‘static_web’…
Username for ‘http://10.220.5.137’: root
Password for ‘http://root@10.220.5.137’:
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 14 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (14/14), done.
[root@ken p]#
第二步:更改网站数据
[root@ken static_web]# echo “this is new data for static web”>> roles/httpd/files/index.html
第三步:提交
[root@ken static_web]# git add .
[root@ken static_web]# git commit -m “v2”
[master e5f5d42] v2
1 file changed, 1 insertion(+)
[root@ken static_web]# git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from ‘matching’ to ‘simple’. To squelch this message
and maintain the current behavior after the default changes, use:
git config --global push.default matching
To squelch this message and adopt the new behavior now, use:
git config --global push.default simple
See ‘git help config’ and search for ‘push.default’ for further information.
(the ‘simple’ mode was introduced in Git 1.7.11. Use the similar mode
‘current’ instead of ‘simple’ if you sometimes use older versions of Git)
Username for ‘http://10.220.5.137’: root
Password for ‘http://root@10.220.5.137’:
Counting objects: 11, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 443 bytes | 0 bytes/s, done.
Total 6 (delta 1), reused 0 (delta 0)
To http://10.220.5.137/webg1/static_web.git
e2ac703…e5f5d42 master -> master
第三步:jenkins持续化部署
点击构建
发现没有报错
第四步:网站查看
发现网站数据已经更新
更多推荐
所有评论(0)