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

news/2024/5/14 4:23:51/文章来源:https://blog.csdn.net/weixin_34260991/article/details/93464491

 

项目前言

 

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

如果大家可以熟练掌握以上内容,势必会在工作中减轻不小的工作量。

本篇博客将再次使用这四个工具结合freestyle和pipeline来完成动态网站的部署。

为了拓宽知识点,本篇博客将使用jenkins的两种常用方法来进行部署,如果你对pipeline还不熟悉,请参考我之前的博客《Jenkins凭证及任务演示-pipeline(二)--技术流ken》。

虽说freestyle也可完成相同的操作,而且操作简单,但是freestyle只是适合服务器量很少的场景50-100台左右。如果你管理了百台、千台服务器势必会用到pipeline进行批量化操作。

所以pipeline来还是应该深入去研究一下的,虽说确实有困难,但是因为它的格式相对固定单一,也不是可望而不可及。多学多练多总结。

有关持续集成自动化部署系列差不多写了有十篇左右了。本篇博客将是这一系列的最后一篇,接下来会更新docker及k8s系列。敬请期待。

 

项目需求

 

需求一.、使用gitlab创建项目

需求二、 使用ansible的roles实现一键化部署wordpress

               每次部署需要备份之前的网站数据

               使用roles

               使用templates

               脚本对网站监控检测          

需求三、 完成之后项目上传至gitlab

需求四、使用jenkins实现项目的持续集成

 

项目环境准备

 

centos7

Gitlab服务器: 10.220.5.137

Ansible服务器: 10.220.5.139

wordpress服务器1: 10.220.5.138

防火墙以及selinux关闭状态

 

Gitlab创建项目

 

有关项目的创建我这里就不再赘述,大家可以参考我之前的博客《Gitlab在linux/windows中免密使用(二)--技术流ken》

我就直接拿我之前创建好的项目进行演示

Git下载远程仓库内容

 

 在ansible服务器10.220.5.139上面操作

第一步:创建目录并clone远程仓库内容

[root@ken ~]# mkdir t
[root@ken ~]# cd t
[root@ken t]# git clone http://10.220.5.137/webg1/wordpress.git
Cloning into 'wordpress'...
Username for 'http://10.220.5.137': root
Password for 'http://root@10.220.5.137': 
remote: Counting objects: 1062, done.
remote: Compressing objects: 100% (969/969), done.
remote: Total 1062 (delta 68), reused 1042 (delta 68)
Receiving objects: 100% (1062/1062), 4.15 MiB | 0 bytes/s, done.
Resolving deltas: 100% (68/68), done.
[root@ken t]# ls
wordpress

 

Ansible剧本的编写

 

第一步:创建相关目录

在ansible服务器端操作

[root@ken ~]# mkdir /project/roles/wordpress/{vars,tasks,files,templates} -pv

 

第二步:编写templates模版

复制代码
  [root@ken ~]# cp /etc/httpd/conf/httpd.conf /project/roles/wordpress/templates/httpd.conf.j2[root@ken ~]# grep -v -E '^#|^$| +#' /project/roles/wordpress/templates/httpd.conf.j2ServerRoot "/etc/httpd"Listen {{ port }}    #定义成变量Include conf.modules.d/*.confUser {{ user }}       #定义成变量Group apacheServerAdmin root@localhostServerName {{ ansible_eth0.ipv4.address }}  #引用内置变量DocumentRoot {{ root }}               #定义成变量
复制代码

 

第三步:编辑hosts配置文件

[root@ken project]# vim /etc/ansible/hosts
[devser]
10.220.5.139

 

第四步:编写测试文件

[root@ken project]# vim roles/wordpress/files/index.php
<?php
phpinfo();
?>

 

第五步:编写网站健康监测脚本

复制代码
[root@ken project]# cd roles/wordpress/files/
[root@ken files]# ls
[root@ken files]# vim check.sh 
[root@ken files]# cat check.sh 
#!/bin/bash
URL=$1
PORT=$2
curl -I http://$1:$2/index.php | grep "200 OK" &>/dev/null
if [ $? -eq 0 ];thenecho "$1 status is ok"
elseecho "$1 status is not ok"
fi
复制代码

 

第六步:编写tasks下的文件

复制代码
[root@ken wordpress]# cat tasks/main.yml
######## 安装 httpd php mysql ###############
- name: install httpdyum: name=httpd state=present
- name: install mysqlyum: name=mariadb-server state=present
- name: install phpshell: yum install php php-mysql -y
######## 配置httpd #########################
- name: make configrantion filetemplate: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
- name: install test pagecopy: src=index.php dest={{ root }}
######## 启动服务 ####################
- name: start httpdservice: name=httpd state=restarted
- name: start mysqlservice: name=mariadb state=restarted
######### 检查部署结果是否正常 ##########
- name: make health checkshell: sh roles/wordpress/files/check.sh {{ ansible_eth0.ipv4.address }} {{ port }}delegate_to: localhostregister: health_status
- debug: msg="{{ health_status.stdout }}"
########## 从gitlab拉取代码 #################
- name: backup old filesshell: mv {{ root }} {{ backup_to }}
- name: close ssl authticationshell: git config --global http.sslVerify false
- name: git clone wordpress from gitlabgit: "repo=http://{{ gitlab_user }}:{{ gitlab_pass }}@10.220.5.137/webg1/wordpress.git dest={{ root }} version=master"
复制代码

 

第七步:编写vars下的文件

[root@ken ~] # cat /project/roles/wordpress/vars/main.yml
port: 82
user: apache
root: /var/www
gitlab_user: root
gitlab_pass: 12345678

 

第八步:编辑剧本

剧本一定要和roles在同一个目录之中

执行剧本的时候也要在roles同级目录下执行

[root@ken ~]# vim /project/wordpress.yaml
- hosts: allvars:backup_to: "{{ root }}_{{ ansible_date_time.epoch }}"roles:- wordpress

 

第九步:一键部署wordpress

[root@ken ~]# cd /project/
[root@ken project]# ansible-playbook -i inventory/dev dev.yaml

 

第十步:查看执行结果

可以发现没有报错

[root@ken project]# ansible-playbook -i inventory/den dev.yaml [WARNING]: Found variable using reserved name: portPLAY [all] ***********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [10.220.5.138]TASK [wordpress : install httpd] *************************************************
ok: [10.220.5.138]TASK [wordpress : install mysql] *************************************************
ok: [10.220.5.138]TASK [wordpress : install php] ***************************************************[WARNING]: Consider using the yum module rather than running yum.  If you need
to use command because yum is insufficient you can add warn=False to this command
task or set command_warnings=False in ansible.cfg to get rid of this message.changed: [10.220.5.138]TASK [wordpress : make configrantion file] ***************************************
ok: [10.220.5.138]TASK [wordpress : install test page] *********************************************
ok: [10.220.5.138]TASK [wordpress : start httpd] ***************************************************
changed: [10.220.5.138]TASK [wordpress : start mysql] ***************************************************
ok: [10.220.5.138]TASK [wordpress : make health check] *********************************************
changed: [10.220.5.138 -> localhost]TASK [wordpress : debug] *********************************************************
ok: [10.220.5.138] => {"msg": "10.220.5.138 status is ok"
}TASK [wordpress : backup old files] **********************************************
changed: [10.220.5.138]TASK [wordpress : close ssl authtication] ****************************************
changed: [10.220.5.138]TASK [wordpress : git clone wordpress from gitlab] *******************************
changed: [10.220.5.138]PLAY RECAP ***********************************************************************
10.220.5.138               : ok=13   changed=6    unreachable=0    failed=0   

 

数据上传至Gitlab

 

第一步:上传所以数据至远程gitlab

[root@ken project]# cd ..
[root@ken wordpress]# ls
da  project  wordpress
[root@ken wordpress]# ls -a
.  ..  da  .git  project  wordpress
[root@ken wordpress]# git add .
[root@ken wordpress]# git commit -m "v3"
[master e533bc1] v32 files changed, 3 insertions(+)create mode 100644 project/dev.retrycreate mode 100644 project/inventory/den
[root@ken wordpress]# git push

 

第二步:web端查看

可以看到现在已经有了我们刚才已经上传的v3版本了

 

Jenkins端实现持续集成部署--freestyle

 

第一步:创建一个freestyle的任务

 

第二步:填写gitlab仓库信息

 

第三步:构建shell

填写如下信息并保存

这里之所以要先cd到工作目录下的project是因为要找到dev.yaml剧本

 

 

 

第四步:开始构建

可以发现已经部署完成

 

 

Jenkins端实现持续集成部署--pipeline

 

第一步:创建一个流水线即pipeline任务

 

第二步:编写pipeline

 如果你是复制的下面的代码请务必更改你的git路径以及指定你的凭证ID

#!groovypipeline {agent {node {label 'master'}}environment {PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"}parameters {choice(choices: 'dev\nrprod',description: 'Choose deploy environment',name: 'deploy_env')string (name: 'branch', defaultValue: 'master', description: 'Fill in your ansible repo branch')}stages {stage ("Pull deploy code") {steps{sh 'git config --global http.sslVerify false'dir ("${env.WORKSPACE}"){git branch: 'master', credentialsId: '527d840a-ad47-4a16-bfa1-c6eab88a3563', url: 'http://10.220.5.137/webg1/wordpress.git'}}}stage ("Anisble deployment") {steps {dir("${env.WORKSPACE}"){echo "[INFO] Start deployment"sh """
     set +xansible-playbook -i inventory/$env ./dev.yaml -e branch=$branch -e env=$deploy_envset -x"""
     echo "[INFO] Deployment finished..."}}}}}

 

第三步:查看执行结果

发现执行成功

以后程序员更改代码之后就可以自己测试上线了

 

第四步:数据库授权

[root@ken ~]# mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 5.5.56-MariaDB MariaDB ServerCopyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> create database wordpress;
Query OK, 1 row affected (0.03 sec)MariaDB [(none)]> grant all on *.* to ken@'localhost' identified by '123';
Query OK, 0 rows affected (0.02 sec)MariaDB [(none)]> exit
Bye

 

第五步:填写上面数据库配置的信息

 

第六步:配置成功页面

注意访问的时候IP地址之后需要加上:82端口号,因为我们上面的剧本中指定了变量port为82号端口

 

 

转载于:https://www.cnblogs.com/kenken2018/p/10009514.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_762243.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Asp.net网站的简单发布

概述 网站是由一个个页面组成的&#xff0c;是万维网具体的变现形式&#xff0c;关于万维网&#xff0c;网页的方面的理论知识&#xff0c;大家可以看一看这篇博客&#xff1a;万维网文档&#xff0c;在这里就不多说了。网站的发布要到达的一个目的就是&#xff0c;别人可以通过…

SharePoint 2010 类似人人网站内信功能实施

简介&#xff1a;用SharePoint代码加实施的方式&#xff0c;完成类似人人网站内信功能&#xff0c;当然&#xff0c;实现的比较简单&#xff0c;样式也比较难看&#xff0c;只为给大家一个实施的简单思路&#xff0c;如有谬误&#xff0c;还请见谅。当然&#xff0c;还有就是截…

2019最受欢迎开源免费CMS建站系统排行榜

2019独角兽企业重金招聘Python工程师标准>>> 互联网的蓬勃发展&#xff0c;免费且开源的建站系统的层出不穷&#xff0c;而我们经常在网上看见有人问及”哪个CMS系统最好用”、”企业建站用哪个CMS系统最多”等类似问题&#xff0c;我们今天来说一下&#xff0c;201…

“网络推广”企业做了网站效果没有达到自己的营销效果

我们有理由相信每一公司做的设计不是给自己看的&#xff0c;当然是给客户看的&#xff0c;我们长处就在于我们的技术是基础&#xff0c;创意是翅膀&#xff0c;只有充分利用好网络&#xff0c;创意才能把您们的价值体现出来&#xff0c;传播出去。 我们不只是为您们的企业披上外…

一步步学习SPD2010--第十章节--SP网站品牌化(3)--在内容页中识别样式

一步步学习SPD2010--第十章节--SP网站品牌化&#xff08;3&#xff09;--在内容页中识别样式 当你在SPD中显示内容页时&#xff0c;尽管设计视图显示了内容页与母版页的融合&#xff0c;你只能辨识储存在内容页的部件的CSS样式。使用页面的代码视图&#xff0c;来辨识储存在内容…

Challenge Checkio(python)—初尝python练习网站

最近在找点python语言练习的网站&#xff0c;发现这个网站不错 http://www.checkio.org/ 页面设计的也比较漂亮&#xff0c;比较适合学习python的语法知识。不过注册这个网站 开始就得解决一个python问题&#xff0c;不过很简单。 1 #python3.3 is inside 2 def checkio(els):…

[Hugo+Netlify]从零开始建立并发布一个网站

现在有越来越多的开发者选择把自己的博客以静态网站的方式托管在 GitHub 上, 这样的方式可以通过诸如 Jekyll, Hexo,Hugo 等等现有的静态博客生成工具, 非常便捷地搭建出一个样式美观的静态博客或文档页面。 通过对比&#xff0c;我选择了Hugo框架来创建网页&#xff0c;使用 N…

现在怎么访问安卓开发者网站

问题描述前两个月还能访问安卓开发者网站&#xff0c;现在就访问不了了&#xff0c;请问有什么方法么&#xff0c;以后想下官方最新的mac版本的ADT都困难。 解决方案1翻墙啊啊啊啊啊啊啊。 解决方案2翻墙软件&#xff0c;大家都懂的&#xff01; 解决方案3现在是不行了&#xf…

win8 iis安装及网站发布

win8 iis安装及网站发布 系统&#xff1a;win8 环境&#xff1a;vs2012 一&#xff1a;安装IIS 比较win7的安装来说&#xff0c;多选了几个钩钩&#xff0c;不然会报错&#xff0c;偶就遇到这样的错误。 控制面板-》程序和功能-》启动和关闭windows功能&#xff0c;钩钩图例&am…

Svg图片在asp网站上的使用

最近需要做一个动态的根据后台的返回数据而动态显示的导航图&#xff0c;然后我就采用了jqueryajaxSVG矢量图来实现这个功能。 首先&#xff0c;客户给了个ai的矢量图&#xff0c;我对这一块不懂就找以前同事帮我转成了svg图形&#xff0c;听说很简单&#xff0c;但是矢量图是封…

使用Let's Encrypt、Certbot为自己的网站加密

2019独角兽企业重金招聘Python工程师标准>>> 打开网站https://certbot.eff.org/选择服务器系统和软件环境以nginxubuntu为例&#xff1a;# 1. 安装需要软件 $ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository pp…

ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(三) 激动人心的时刻到啦,实现1v1聊天...

看起来挺简单&#xff0c;细节还是很多的&#xff0c;好&#xff0c;接上一篇&#xff0c;我们已经成功连接singalR服务器了&#xff0c;那么剩下的内容呢&#xff0c;就是一步一步实现聊天功能。 我们先看看缺什么东西 点击好友弹框之后&#xff0c;要给服务器发消息&#xff…

从一个新颖的网站看silverlight技术的视频广告前景

站点是&#xff1a;http://www.singtelrace.com/SingTel-Grid-Girls_Heart-Race.aspx 上面的MM们都是活动的&#xff0c;整体的视觉效果很有趣 这张截图看起来似乎没有什么&#xff0c;但要注意这个视频广告里的MM是活动的&#xff0c;为整个页面带来了生气。

长尾SEO策略应用之长尾词表制作

上周在博客上转载了一篇《热门还是长尾&#xff1f;大中型网站的关键词优化策略》的文章&#xff0c;文中提到长尾词在大中型网站中应用的种种好处。把这种长尾词策略应用到网站&#xff0c;我们所要做的就是&#xff1a;<?xml:namespace prefix o ns "urn:schemas-…

自动登录http://www.netyi.net/网站的工具

http://www.netyi.net/网站是一个书籍下载网站&#xff0c;大约一年多以前我就认识这个网站&#xff0c;经常从上面下载书籍。它的书还是不错的&#xff0c;很多书其他地方找不到&#xff0c;这里却有。但是下载书会减少你的积分&#xff0c;获得积分的的途径是上传书籍&#x…

详解网站性能测试指标

通用指标&#xff08;指Web应用服务器、数据库服务器必需测试项)Web服务器指标数据库服务器性能指标系统的瓶颈定义稳定系统的资源状态通俗理解&#xff1a;日访问量常用页面最大并发数同时在线人数访问相应时间案例&#xff1a;最近公司一个项目&#xff0c;是个门户网站&…

web前端性能SEO优化

web前端性能&SEO优化 网站的划分一般为二&#xff1a;前端和后台。我们可以理解成后台是用来实现网站的功能的&#xff0c;比如&#xff1a;实现用户注册&#xff0c;用户能够为文章发表评论等等。而前端呢&#xff1f;其实应该是属于功能的表现。并且影响用户访问体验的绝…

一步步构建大型网站架构

之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型&#xff0c;我们可以从中获取很多有关网站架构方面的知识&#xff0c;看了之后你会发现你原来的想法很可能…

windows server 2008R2上安装IIS7(web)服务器,提供网站web服务及管理,架设论坛网站...

windows server 2003上提供的IIS服务为IIS6&#xff0c;最新的win server 2008R2则提供的是IIS7.5的服务&#xff01;建立IIS服务器&#xff0c;我们就开始安装吧&#xff01;单独安装IIS7&#xff08;web&#xff09;服务器时&#xff0c;DNS提供域名解析&#xff0c;所以本机…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…