项目前言

在上一篇博客《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

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

  1. 末学者笔记--Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站

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

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

    项目需求 需求一..使用gitlab创建项目 需求二. 使用ansible的roles实现一键化部署wordpress 每次部署需要备份之前的网站数据 使用roles 使用templates 脚本对网 ...

  3. Jenkins+Dcoker+Gitee+Rancher实现SpringBoot项目的持续集成自动化部署以及管理

    前言: 无论工作中还是平时自己写代码,我们经常需要部署各种环境,作者经历的部署方式. (1)本地打war/jar包,上传到服务器放到Tomcat或者原始命令java -jar xxx.war方式启动项 ...

  4. 【DevOps】Jenkins+Git+Gitlab+Sonar+Nexus实现持续集成

    文章目录 什么是持续集成?CI/CD指的是什么? 如何实现持续集成 一.筹备工作,CentOS 7.6系统 1.安装JDK,配置环境变量 2.Maven下载 3.Git安装 4.GitLab安装 5. ...

  5. CI/CD——构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台

    构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台 CI/CD是什么? 持续集成(CI)/持续交付(CD)的优势 自动化部署流程图 Git Github Gi ...

  6. CentOS 6.7 源码搭建LNMP架构部署动态网站环境

    源码搭建LNMP架构部署动态网站环境 Nginx 简介 Nginx是一款相当优秀的用于部署动态网站的服务程序,Nginx具有不错的稳定性.丰富的功能以及占用较少的系统资源等独特特性. Nginx (& ...

  7. 第20章 使用LNMP架构部署动态网站环境

    章节概述: 本章节将从Linux系统的软件安装方式讲起,带领读者分辨RPM软件包与源码安装的区别.并能够理解它们的优缺点. Nginx是一款相当优秀的用于部署动态网站的服务程序,Nginx具有不错的稳 ...

  8. Git介绍及常用操作演示(一)--技术流ken

    Git介绍及常用操作演示(一)--技术流ken Git介绍 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus To ...

  9. LinuxProbe 0x20 使用LNMP架构部署动态网站环境

    LNMP动态网站部署架构是一套由Linux + Nginx + MySQL + PHP组成的动态网站系统解决方案,具有免费.高效.扩展性强且资源消耗低等优良特性,目前正在被广泛使用. 源码包程序 在R ...

最新文章

  1. 世界在音乐中得到了完整的再现和表达。
  2. Exploring the 7 Different Types of Data Stories
  3. Redis学习笔记(4)-List
  4. Python实训day04pm【网络爬虫(文本、图片)】
  5. 如何遍历当前进程中的AppDomain
  6. openwrt 遍译php_openwrt安装编译
  7. Property Bags Object Model中的小“陷阱”
  8. 剑指Offer--二维数组中的查找
  9. 追求神乎其技的程序设计之道(一)
  10. 关于Keil 5 下载及安装教程
  11. WinDirStat – 硬盘空间都用在哪里了
  12. 正则表达式的简单学习
  13. 矩阵的分解——LU分解
  14. 第三(关于set、file、args)
  15. 计算机cpu温度显示原理图,什么原理测cpu温度_cpu天梯图
  16. 两个程序员(Chris和Steve)的故事
  17. 憎恨之心最强套装攻略_憎恨之心新手刷BOSS攻略 最强武器介绍[多图]
  18. 【闲来无事】微博热搜实时数据图表
  19. Visual Studio 2017 设置语言以及下载语言包
  20. OpenFire+Spark构建实时协作平台

热门文章

  1. 用sharesdk第三方等陆或分享到QQ空间,qq好友,微信,朋友圈,新浪微博,腾讯微博等
  2. JAVA社交平台项目第七天 JUC多线程
  3. 电子技术课程设计-正弦波发生及频率显示电路-电子线路CAD原理图
  4. 求∑(k=1~100)k+∑(k=1~50)k2+∑(k=1~10)
  5. java物联网第二天 感悟下
  6. 剑灵洪门崛起怎么修改服务器,剑灵洪门崛起新手操作指南 剑灵洪门崛起新手必看攻略...
  7. 第四回:matplotlib文字图例尽眉目
  8. 什么是协同系统?--信息化入门扫盲
  9. Android通过反射获取手机是否有NavigationBar方法
  10. Redis min-slaves-to-write