引言:
首先我们可以实现一键部署网站,但在实际生产环境网站部署完成之后,我们的开发隔三差五要修改下网站的内容,难道都要我们运维手动执行命令吗?没有一种方法使得开发人员修改完代码自己测试,部署上线呢,那这就是我们这次要做的持续集成自动化部署的内容。

环境:
自动化部署nginx静态网站两台主机节点

自动化部署nginx静态网站两台主机节点
192.168.30.159:Gitlab服务,节点一
192.168.30.164:jenkins服务,Ansible工具
192.168.30.165:节点二

一、Gitlab仓库的搭建
第一步 :仓库搭建
见Gitlab仓库搭建及在linux,windows中免密使用gitlab(二)
https://blog.csdn.net/rzlongg/article/details/90576768

第二步:创建项目
这里创建一个叫insnginx

二、jenkins持续集成平台搭建
见jenkins持续集成学习(一)
https://blog.csdn.net/rzlongg/article/details/91344621

三、下载ansible自动化部署工具并编写剧本
第一步:下载ansible和git

[root@localhost insnginx]# yum -y install epel-release
[root@localhost ~]# yum -y install ansible

需下载git命令工具下载仓库以及支持jenkins凭证连接gitlab

[root@localhost ~]# yum -y install git

还需要下载nginx服务提供nginx配置文件nginx.conf

[root@localhost ~]# yum -y install nginx

第二步:创建工作目录并克隆仓库

[root@localhost ~]# mkdir /ryan
[root@localhost ~]# cd /ryan
[root@localhost ryan]# ls
[root@localhost ryan]# git clone http://192.168.30.159/root/insnginx.git
正克隆到 'insnginx'...
warning: 您似乎克隆了一个空版本库。
[root@localhost ryan]# ls
insnginx
[root@localhost ryan]# cd insnginx/
[root@localhost insnginx]# ls -a
. .. .git
————————————————
版权声明:本文为CSDN博主「Ryan-ruan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rzlongg/article/details/91344877

第三步:发送秘钥或用配置文件方法
1发送秘钥

[root@localhost insnginx]# 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:jt0kVdhKdcTHfWTjYfEHJoCD4xeU5I0T9JR+eDoKE8w root@localhost.localdomain
The key's randomart image is:
+---[RSA ]----+
| ==oo*+o=B=|
| o.=*+..++oO|
| + .+=+o o+|
| E .o+ o .|
| oS .+ |
| o+ +o |
| .oo... |
| . |
| |
+----[SHA256]-----+
[root@localhost insnginx]# ssh-copy-id 192.168.30.159 #165也需发送
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.30.164 (192.168.30.164)' can't be established.
ECDSA key fingerprint is SHA256:lu7kZg1/+q8+Uj50A8mc4swRUIn57m+98xxDVs1NXU.
ECDSA key fingerprint is MD5:5b:9d:b8:ae::2e::0f:b8:bb::::5d::.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.30.164's password: Number of key(s) added: Now try logging into the machine, with: "ssh '192.168.30.164'"
and check to make sure that only the key(s) you wanted were added.
————————————————
版权声明:本文为CSDN博主「Ryan-ruan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rzlongg/article/details/91344877

2.修改配置文件/etc/ansible/hosts

#在文件最后添加

[ryan]
192.168.30.167 ansible_ssh_user=root ansible_ssh_port= ansible_ssh_pass=root
192.168.30.168 ansible_ssh_user=root ansible_ssh_port= ansible_ssh_pass=root

注意:
修改配置方法不需要再清单目录和文件,且ansible一定要和jenkins安装在一台主机上,而秘钥验证ansible没有特别要求要安装在哪台主机。

第四步:创建roles相关目录编写ansible剧本

[root@localhost insnginx]# mkdir roles/nginx/{tasks,vars,template,files} -p

编写vars下文件:

[root@localhost insnginx]# vim roles/nginx/vars/main.yml
port:
host_user: root
conn:
docu_root: /var/www/html

复制/etc/nginx/nginx.conf配置文件到templates下改名nginx.conf.exp并修改相关参数为变量

[root@localhost insnginx]# vim roles/nginx/templates/nginx.conf.exp
user {{ host_user }};
worker_processes auto;
...... events {
worker_connections {{ conn }};
}
......
server {
listen {{ por }};
server_name _;
root {{ docu_root }};
......
————————————————
版权声明:本文为CSDN博主「Ryan-ruan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rzlongg/article/details/91344877

编写任务文件

- copy: src=roles/nginx/files/myone.repo dest=/etc/yum.repos.d/
- yum: name=nginx state=present
- template: src=roles/nginx/templates/nginx.conf.exp dest=/etc/nginx/nginx.conf
- systemd: name=nginx state=restarted
- copy: src=roles/nginx/files/index.html dest=/var/www/html

编写测试文件

[root@localhost insnginx]# echo "this is test nginx webserver" > roles/nginx/files/index.html

编写主机清单

[root@localhost insnginx]# ls
inventory roles
[root@localhost insnginx]# cat inventory/ryan
[ryan]
192.168.30.159
192.168.30.164

编写剧本

[root@localhost insnginx]# vim ryan.yml
[root@localhost insnginx]# cat ryan.yml
- hosts: all
roles:
- nginx

第五步:模拟执行剧本
剧本语法检测

[root@localhost insnginx]# ansible-playbook --syntax-check ryan.yml
[WARNING]: provided hosts list is empty, only localhost is available. Note that the
implicit localhost does not match 'all' playbook: ryan.yml
————————————————
版权声明:本文为CSDN博主「Ryan-ruan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rzlongg/article/details/91344877

模拟执行

[root@localhost insnginx]# ansible-playbook -C -i inventory/ryan ryan.yml

PLAY [all] ******************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************
ok: [192.168.30.165]
ok: [192.168.30.159] TASK [nginx : copy] *********************************************************************************************
changed: [192.168.30.165]
changed: [192.168.30.159] TASK [nginx : yum] **********************************************************************************************
changed: [192.168.30.165]
changed: [192.168.30.159] TASK [nginx : template] *****************************************************************************************
changed: [192.168.30.165]
changed: [192.168.30.159] TASK [nginx : systemd] ******************************************************************************************
changed: [192.168.30.165]
changed: [192.168.30.159] TASK [nginx : copy] *********************************************************************************************
changed: [192.168.30.159]
changed: [192.168.30.165] PLAY RECAP ******************************************************************************************************
192.168.30.159 : ok= changed= unreachable= failed= skipped= rescued= ignored=
192.168.30.165 : ok= changed= unreachable= failed= skipped= rescued= ignored=

第六步:提交代码至Gitlab

[root@localhost insnginx]# git config --global user.name "Administrator"
[root@localhost insnginx]# git config --global user.email "admin@example.com"
[root@localhost insnginx]# git add .
[root@localhost insnginx]# git commit -m "v1"
[master(根提交) 4861e33] v1
Committer: root <root@localhost.localdomain>
files changed, insertions(+)
create mode inventory/ryan
create mode roles/nginx/files/index.html
create mode roles/nginx/files/myone.repo
create mode roles/nginx/tasks/main.yml
create mode roles/nginx/templates/nginx.conf.exp
create mode roles/nginx/vars/main.yml
create mode ryan.yml
[root@localhost insnginx]# git push -u origin master
Username for 'http://192.168.30.159': root #Gitlab 账号
Password for 'http://root@192.168.30.159': #Gitlab的8位密码
Counting objects: , done.
Compressing objects: % (/), done.
Writing objects: % (/), 2.11 KiB | bytes/s, done.
Total (delta ), reused (delta )
To http://192.168.30.159/root/insnginx.git
* [new branch] master -> master 分支 master 设置为跟踪来自 origin 的远程分支 master。

第七步:使用jenkins运行剧本

jenkins用户可能无法运行ansible剧本
修改/etc/sysconfig/jenkins文件以root用户运行ansible

JENKINS_USER=”root”

重启jenkins

第八步:创建jenkins任务进行构建

第九步:查看节点一二的nginx的状态,访问测试页面

[root@localhost ~]# ss -tnl | grep
LISTEN *: *:*

四、问题汇总
报错1:

解决办法:

[root@localhost ~]# mkdir /var/www/html -p

报错2:

解决办法:跳过主机秘钥验证

vim /etc/ansible/ansible.cfg
host_key_checking = false 这行的注释打开即可

报错3:

解决办法:在ansible主机上执行 ssh-copy-id 本机ip
————————————————
版权声明:本文为CSDN博主「Ryan-ruan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rzlongg/article/details/91344877

jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(二)的更多相关文章

  1. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(一)--技术流ken

    前言 在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>,<Git+Gitlab+A ...

  2. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(一)

    在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>,<Git+Gitlab+Ansi ...

  3. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(6)

    前言 在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx–技术流ken>,<Git+Gitlab+An ...

  4. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站

    环境准备 三台主机: 一台主机部署jenkins和作为ansible的管理主机 一台主机部署gitlab和ansible的节点1 一台主机为ansible的节点2 防火墙和apache服务关闭 第一步 ...

  5. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站(二)--技术流ken

    项目前言 在上一篇博客<Jenkins+Git+Gitlab+Ansible实现持续化集成一键部署静态网站(一)--技术流ken>中已经详细讲解了如何使用这四个工具来持续集成自动化部署一个 ...

  6. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站(7)

    项目前言 在上一篇博客<Jenkins+Git+Gitlab+Ansible实现持续化集成一键部署静态网站(一)–技术流ken>中已经详细讲解了如何使用这四个工具来持续集成自动化部署一个静 ...

  7. jenkins+git+gitlab+ansible实现持续集成自动化部署

    一.环境配置 192.168.42.8部署gitlab,节点一 192.168.42.9部署git,Jenkins,ansible服务器 192.168.42.10节点二 二.操作演示 ①gitlab ...

  8. Git+Gitlab+Ansible剧本实现一键部署动态网站(二)--技术流ken

    项目前言 之前已经写了一篇关于git和ansible的博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>.关于git,gitliab,ansible在我 ...

  9. Git+Gitlab+Ansible剧本实现一键部署动态网站(5)

    项目前言 之前已经写了一篇关于git和ansible的博客<Git+Gitlab+Ansible剧本实现一键部署Nginx–技术流ken>.关于git,gitliab,ansible在我以 ...

随机推荐

  1. 前端规范1-HTML规范

    HTML规范 1代码风格(参1,) 使用Tab字符(四个空格长度) 层级关系太多时尽量写在一行,但保证每行代码不宜过长  例,代码不宜过长 例,尽量写在一行 2命名(参1,) class必须使用小写, ...

  2. LeetCode172 Factorial Trailing Zeroes. LeetCode258 Add Digits. LeetCode268 Missing Number

    数学题 172. Factorial Trailing Zeroes Given an integer n, return the number of trailing zeroes in n!. N ...

  3. Maven学习总结--maven入门(一)

    一.Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理.

  4. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

  5. 云上的Growth hacking之路,打造产品的增长引擎

    增长关乎产品的存亡 增长!增长!增长!业务增长是每一个创业者每天面临的最大问题.无论你的产品是APP,还是web,或者是小程序,只能不断的维持用户的增长,才能向资本市场讲出一个好故事,融资活下去.活到 ...

  6. Oracle错误——引发ORA-01843:无效的月份。

    问题 引发ORA-01843:无效的月份. 解决 改动client会话日期的语言: ALTER SESSION SET nls_date_language='american';

  7. c++ 对象池的创建

    template <class T> class ObjectPool { public: using DeleterType = std::function<void(T*)> ...

  8. python 字典索引

  9. Java练习 SDUT-1211_英文金曲大赛

    英文金曲大赛 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 我们在"渊子数"的题目中已经了解了渊子 ...

  10. Vue电商后台管理系统项目第1天-基本环境搭建&登录功能

    基本环境搭建完成 安装npm包:npm -S i vue vue-router axios element-ui 配置Eslint: 打开设置,搜索Eslint拓展,然后将下面代码覆盖进去即可 { , ...