Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站
环境准备
三台主机:
一台主机部署jenkins和作为ansible的管理主机
一台主机部署gitlab和ansible的节点1
一台主机为ansible的节点2
防火墙和apache服务关闭
第一步:gitlab的安装即配置
请参考我之前的博客《Gitlab的仓库搭建以及在linux/windows中免密使用》
第二步:创建项目
如下图,我创建了一个nginxinstall的项目

Git下载仓库
第一步:创建目录并下载仓库

[root@ken ~]# mkdir /ken
[root@ken ~]# cd /ken
[root@ken ken]# git clone http://192.168.253.153/root/nginxinstall.git
Cloning into 'nginxinstall'...
Username for 'http://192.168.253.153': root
Password for 'http://root@192.168.253.153':
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done. 如果想要免密操作的化就执行:
ssh-kengen 和
ssh-copy-id 192.168.253.154 ssh-copy-id 192.168.253.155
或者添加密钥到gitlab的ssh_key里
Ansible剧本编写
第一步:进入到创建的项目nginxinstall目录中
然后在此目录下编写ansible剧本**
[root@ken ken]# ls
nginxinstall
[root@ken ken]# cd nginxinstall/
[root@ken nginxinstall]# ls -a
. .. .git README
第二步:使用roles来编写剧本
首先需要创建相关的目录,在nginxinstall的目录下
mkdir -pv roles/nginx/{files,vars,tasks,templates}
第三步: 编写tasks任务
- name: yum install nginx
yum: name=nginx state=present
- name: copy test to nginx
templates: src=roles/nginx/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf
- name: start nginx
service: name=nginx state=restarted
- name: copy file to nginx
copy: src=roles/nginx/files/index.html dest=/var/www/html
这里使用templates模块和jinja2模块,更改配置文件的信息为变量。
第四步:编写vars任务
port: 83 #自定义端口号.用户目录等
host_user: root
conn:
dir: /var/www/html
此任务编写后通过查看节点的配置文件更改与否就可以知道templates模块和vars任务是否成功。
第五步:
第五步:编写主机清单
[root@ken nginxinstall]# cat inventory/test
[test]
192.168.253.153
192.168.253.152
第六步:编写剧本文件
[root@ken nginxinstall]# vim test.yml
[root@ken nginxinstall]# cat test.yml
- hosts: test
remote_user: root
roles:
- nginx #这里一定得是roles的下一级目录
第七步:执行剧本
注意:在执剧本的时候需要使用 -i 指定你创建的主机列表清单,否则会找不到需要执行的节点
ansible-playbook -i inventory/test test.yml (如果需要模拟执行,则需要在-i前面加一个 -C)
第八步:网页浏览
现在就可以登录该节点进行访问了,查看files目录里面的文件内容是否显示。
文件提交至gitlab
经过上面的步骤之后,已经部署完成了一个静态页面
现在把这些文件提交至gitlab
第一步:文件提交至仓库
[root@ken nginxinstall]# git add .
[root@ken nginxinstall]# git commit -m "v1"
第二步:报错
提交如果报了这个错,则是因为需要身份验证

*** Please tell me who you are. Run git config --global user.email "you@example.com"
git config --global user.name "Your 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 nginxinstall]# git config --global user.email "you@example.com"
[root@ken nginxinstall]# git config --global user.name "Your Name"
这就是一个身份验证。
第三步:推送至gitlab

[root@ken nginxinstall]# git push -u origin master
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://192.168.253.153': root #输入连接你的gitlab的用户名
Password for 'http://root@192.168.253.153': #输入该用户密码
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
第四步:进入gitlab网页里面查看是否推送成功
jenkins 实现持续集成
经过上面的一些操作之后,我们已经完成了静态网站的部署,以及代码的上传
但是发现还是每次执行需要输入命令等
现在我们就使用jenkins来实现持续化部署
第一步:jenkins中创建任务
创建了一个自由风格的软件项目
项目名称为item7
第二步:添加源码管理信息
这里的url就是你的项目的地址(即gitlab的仓库链接地址)
下面的凭证输入之前添加的全局凭据的账号和密码。

用脚本构建,cd到workspace下。
创建的bubu文件以及此次的任务名目录(任务名是一个worksapce下的目录)都会在workspace目录下。
可以看到我的任务脚本内执行ansible时并没有指定清单inventory/test 这是因为我选择了在/etc/ansible/hosts里面配置主机信息,这也是一种方法。
三:选择立即构建执行任务。
可能会碰到以下报错:

1)这里的失败原因是因为运行jenkins程序的是jenkins用户,我们连接节点的秘钥是root的,所以现在连接不上
打开配置文件/var/lib/jenkins 将jenkins用户改为root用户即可。
2)有时候报错时因为各主机之间的时间不同步,使用ntpdate同步时间后再次尝试。
3)有时候部署gitlab的节点无法启动nginx服务这是因为gitlab会自动启动nginx,使用gitlab-ctl stop nginx,然后再启动即可。
4)更有时候部署gitlab的ip换了,但是仓库的链接地址还是没变,这在gitlab网页上不好修改,我们在做git clone克隆的时候以及用gitlab做持续集成的时候就需要自己手动修改。
5)如果做jenkin持续集成构建时报错 playbook xxx not found (找不到剧本)
或者其中一台节点无法重启nginx服务
在部署jenkins服务的主机上提交推送文件给gitlab仓库
然后试试关闭防火墙和重启jenkins服务。
6)如果报错找不到repository或者master分支,这是因为gitlab创建新项目的时候没有创建搭建本地仓库。
四:如果构建成功的话,可以去linux下的/var/lib/jenkins/workspace/下去查看是否含有bubu文件。
来证明gitlab+ansible+jenkins的持续集成实验成功。
Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站的更多相关文章
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(一)--技术流ken
前言 在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>,<Git+Gitlab+A ...
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(一)
在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>,<Git+Gitlab+Ansi ...
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(6)
前言 在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx–技术流ken>,<Git+Gitlab+An ...
- jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(二)
引言:首先我们可以实现一键部署网站,但在实际生产环境网站部署完成之后,我们的开发隔三差五要修改下网站的内容,难道都要我们运维手动执行命令吗?没有一种方法使得开发人员修改完代码自己测试,部署上线呢,那这 ...
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站(二)--技术流ken
项目前言 在上一篇博客<Jenkins+Git+Gitlab+Ansible实现持续化集成一键部署静态网站(一)--技术流ken>中已经详细讲解了如何使用这四个工具来持续集成自动化部署一个 ...
- Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站(7)
项目前言 在上一篇博客<Jenkins+Git+Gitlab+Ansible实现持续化集成一键部署静态网站(一)–技术流ken>中已经详细讲解了如何使用这四个工具来持续集成自动化部署一个静 ...
- jenkins+git+gitlab+ansible实现持续集成自动化部署
一.环境配置 192.168.42.8部署gitlab,节点一 192.168.42.9部署git,Jenkins,ansible服务器 192.168.42.10节点二 二.操作演示 ①gitlab ...
- Git+Gitlab+Ansible剧本实现一键部署动态网站(二)--技术流ken
项目前言 之前已经写了一篇关于git和ansible的博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>.关于git,gitliab,ansible在我 ...
- Git+Gitlab+Ansible剧本实现一键部署动态网站(5)
项目前言 之前已经写了一篇关于git和ansible的博客<Git+Gitlab+Ansible剧本实现一键部署Nginx–技术流ken>.关于git,gitliab,ansible在我以 ...
随机推荐
- 不用找了,基于 Redis 的分布式锁实战来了!
Java技术栈 www.javastack.cn 优秀的Java技术公众号 作者:菜蚜 my.oschina.net/wnjustdoit/blog/1606215 前言:在分布式环境中,我们经常使用 ...
- 模板 - 可持久化无旋Treap
空间消耗非常玄学,有多大开多大就完事了.其实是因为单次操作可能会有数次Merge和Split操作,按照下面的版本的话Merge和Split都进行复制,所以一次操作可能复制了4个版本. 四个函数式查询, ...
- 引入maven以外的jar包
这里有2个案例,需要手动发出Maven命令包括一个 jar 到 Maven 的本地资源库. 要使用的 jar 不存在于 Maven 的中心储存库中. 您创建了一个自定义的 jar ,而另一个 Mave ...
- 谷歌浏览器安装插件时出现:程序包无效:“CRX_HEADER_INVALID" 后的解决办法
以安装书签管理插件Neater Bookmarks为例: 1.下载:网址http://www.cnplugins.com/zhuanti/sixbookmarksintroduce.html 2.将下 ...
- Vue学习之旅:todomvc的学习练习
一.前奏 1.todomvc官网地址:http://todomvc.com/ 查阅文档和下载插件都可以到这个官网上找. 2.上GitHub上搜索下载有人做的现成的本地模板:进入GitHub搜索todo ...
- TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
把这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数 ...
- JavaScript中Number(),parseInt()和parseFloat()区别
parseInt() 函数可解析一个字符串,并返回一个整数; parseFloat() 函数可解析一个字符串,并返回一个浮点数, 以上都是截取转换,具体代码如下: alert(parseInt(&qu ...
- Scala本地安装
一.下载 https://www.scala-lang.org/download/ 这里我选择Scala2.10.4版本 二.安装 安装比较简单 和jdk类似 点击一路安装: 选择自己的路径 完成 ...
- Java虚拟机——类加载机制
转自:http://blog.csdn.net/ns_code/article/details/17881581 类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载 ...
- Rust(一)介绍 安装
目录 Rust安装 Rust介绍: Windows 安装步骤: Helle world 创建项目文件夹: 写并执行程序: Rust安装 安装过程简单快捷,直接参照官网即可,Rust安装 Rust介绍: ...