jenkins+git+gitlab+ansible实现持续集成自动化部署动态网站--技术流ken(代码片段)

kenken2018 kenken2018     2023-01-24     543

关键词:

 

项目前言

 

在上一篇博客《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远程仓库内容

[[email protected] ~]# mkdir t
[[email protected] ~]# cd t
[[email protected] 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://[email protected]: 
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.
[[email protected] t]# ls
wordpress

 

Ansible剧本的编写

 

第一步:创建相关目录

在ansible服务器端操作

[[email protected] ~]# mkdir /project/roles/wordpress/vars,tasks,files,templates -pv

 

第二步:编写templates模版

技术分享图片
  [[email protected] ~]# cp /etc/httpd/conf/httpd.conf /project/roles/wordpress/templates/httpd.conf.j2
  [[email protected] ~]# grep -v -E ‘^#|^$| +#‘ /project/roles/wordpress/templates/httpd.conf.j2
  ServerRoot "/etc/httpd"
  Listen  port     #定义成变量
  Include conf.modules.d/*.conf
  User  user        #定义成变量
  Group apache
  ServerAdmin [email protected]
  ServerName  ansible_eth0.ipv4.address   #引用内置变量
  DocumentRoot  root                #定义成变量
技术分享图片

 

第三步:编辑hosts配置文件

[[email protected] project]# vim /etc/ansible/hosts
[devser]
10.220.5.139

 

第四步:编写测试文件

[[email protected] project]# vim roles/wordpress/files/index.php
<?php
phpinfo();
?>

 

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

技术分享图片
[[email protected] project]# cd roles/wordpress/files/
[[email protected] files]# ls
[[email protected] files]# vim check.sh 
[[email protected] 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 ];then
    echo "$1 status is ok"
else
    echo "$1 status is not ok"
fi
技术分享图片

 

第六步:编写tasks下的文件

技术分享图片
[[email protected] wordpress]# cat tasks/main.yml
######## 安装 httpd php mysql ###############
- name: install httpd
  yum: name=httpd state=present
- name: install mysql
  yum: name=mariadb-server state=present
- name: install php
  shell: yum install php php-mysql -y
######## 配置httpd #########################
- name: make configrantion file
  template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
- name: install test page
  copy: src=index.php dest= root 
######## 启动服务 ####################
- name: start httpd
  service: name=httpd state=restarted
- name: start mysql
  service: name=mariadb state=restarted
######### 检查部署结果是否正常 ##########
- name: make health check
  shell: sh roles/wordpress/files/check.sh  ansible_eth0.ipv4.address   port 
  delegate_to: localhost
  register: health_status
- debug: msg=" health_status.stdout "
########## 从gitlab拉取代码 #################
- name: backup old files
  shell: mv  root   backup_to 
- name: close ssl authtication
  shell: git config --global http.sslVerify false
- name: git clone wordpress from gitlab
  git: "repo=http:// gitlab_user : gitlab_pass @10.220.5.137/webg1/wordpress.git dest= root  version=master"
技术分享图片

 

第七步:编写vars下的文件

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

 

第八步:编辑剧本

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

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

[[email protected] ~]# vim /project/wordpress.yaml
- hosts: all
  vars:
     backup_to: " root _ ansible_date_time.epoch "
  roles:
   - wordpress

 

第九步:一键部署wordpress

[[email protected] ~]# cd /project/
[[email protected] project]# ansible-playbook -i inventory/dev dev.yaml

 

第十步:查看执行结果

可以发现没有报错

[[email protected] project]# ansible-playbook -i inventory/den dev.yaml 
 [WARNING]: Found variable using reserved name: port


PLAY [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

[[email protected] project]# cd ..
[[email protected] wordpress]# ls
da  project  wordpress
[[email protected] wordpress]# ls -a
.  ..  da  .git  project  wordpress
[[email protected] wordpress]# git add .
[[email protected] wordpress]# git commit -m "v3"
[master e533bc1] v3
 2 files changed, 3 insertions(+)
 create mode 100644 project/dev.retry
 create mode 100644 project/inventory/den
[[email protected] wordpress]# git push

 

第二步:web端查看

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

技术分享图片

 

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

 

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

技术分享图片

 

第二步:填写gitlab仓库信息

技术分享图片

 

第三步:构建shell

填写如下信息并保存

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

 技术分享图片

 

 

第四步:开始构建

可以发现已经部署完成

技术分享图片

 

 

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

 

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

技术分享图片

 

第二步:编写pipeline

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

#!groovy

pipeline 
 agent node label master

 environment 
  PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
 

 parameters 
  choice(
   choices: dev
rprod,
   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 +x
     ansible-playbook -i inventory/$env ./dev.yaml -e branch=$branch -e env=$deploy_env
     set -x
     """
     echo "[INFO] Deployment finished..."
    
   
  

 

 

第三步:查看执行结果

发现执行成功

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

技术分享图片

 

第四步:数据库授权

[[email protected] ~]# 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 Server

Copyright (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 [email protected]localhost identified by 123;
Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> exit
Bye

 

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

技术分享图片

 

第六步:配置成功页面

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

 技术分享图片

 

jenkins+ansible+gitlab自动化部署三剑客--jenkinsgit集成

JenkinsGit集成1.新建项目  2.新建gitlab项目  克隆地址  3.添加git选项  4.build并查看日志  查看详情

jenkins+ansible+gitlab自动化部署三剑客--ansible

Ansible简介Ansible是一个开源部署工具开发语言:python特点:SSH协议通讯,全平台,无需编译,模块化部署管理作用:推送Playbook进行远程节点快速部署Ansible与Chef,Saltstack的区别Chef  Ruby语言编写,C/S架构,配置需要Git依赖,Recipe... 查看详情

gitlab+jenkins日常操作(代码片段)

GitLab+Jenkins日常操作一、Jenkins回滚操作1.通过Git来回滚2.通过Build来回滚二、Jenkins实现邮件报警1.配置邮件报警3.配置项目三、Jenkins远程管理方式1.通过SSHPlugin插件2.通过Shell命令3.通过Ansible一、Jenkins回滚操作注意:Jenkins上... 查看详情

jenkins+gitlab+ansible--playbook代码上线流程(文末有免费视频)(代码片段)

 jenkins构建是支持git选择分支安装GitParameter插件在系统管理中的插件管理然后点击选插件,在右上角输入GitParameter,找到GitParameter后点击左下方的的直接安装。参数化构建过程插件安装成功后,在项目配置中后看到多了一个"... 查看详情

gitlab+jenkins+ansible集成持续发布

1.Gitlab安装gitlab10.0.1安装使用 内存最少2G否则系统安装完会502报错 安装如想使用Postfix来发送邮件,在安装期间请选择’InternetSite’.您也可以用sendmai或者配置SMTP服务 并使用SMTP发送邮件.在Centos6系统上,下面的命令将在... 查看详情

jenkins+gitlab+ansible自动化部署(代码片段)

PipelineJob实现Nginix+MySQL+PHP+Wordpress实现自动化部署交付(Jenkins+Gitlab+Ansible自动化部署(五)https://www.cnblogs.com/zd520pyx1314/p/10249094.html)环境准备编写ansibleplaybook脚本实现Wordpress远程部署将wordpress源码与playbook部署脚本提交到gitlab仓... 查看详情

jenkins+ansible+gitlab自动化部署三剑客

最近一直在学习Ansible的一些playbook的写法,所以一直没有怎么更新,想到目前大家对诸如saltstack,docker, Ansible等自动化部署相关的工具很感兴趣,但又苦于没有可学习的中文实例,这里我就把我这几个月所接触到目前国外比较流行... 查看详情

ci/cd之jenkins结合ansible部署apache(代码片段)

jenkins结合ansible部署apache演示环境部署步骤安装ansible创建新git项目ansible主控端配置jenkins测试配置用户设置jenkins部署部署测试在测试环境测试在生产环境部署建议演示环境server1 192.168.122.11 gitlab端 4G内存server2 192.168.122.12 j... 查看详情

jenkins+ansible+gitlab自动化部署三剑客-gitlab本地搭建

Jenkins+Ansible+Gitlab自动化部署三剑客-gitlab本地搭建实际操作准备linux初始环境关闭防火墙systemctlstopfirewalld开机自己关闭systemctldisablefirewalld设置安全配置为关闭vim/etc/sysconfig/selinux重启虚拟机reboot查看安全策略是否关闭getenforce安装g... 查看详情

ci/cd之jenkins结合ansible部署apache(代码片段)

jenkins结合ansible部署apache演示环境部署步骤安装ansible创建新git项目ansible主控端配置ansible主配置文件编写配置清单编写下载apache的playbook修改apache配置文件最终目录结构如下jenkins测试配置用户设置jenkins部署部署测试在测试环境测... 查看详情

jenkins+ansible+gitlab自动化部署三剑客--jenkins参数集成(代码片段)

Jenkins参数集成1.新建项目  2.添加选项       #!/bin/shecho"Currentdeployenvironmentis$deploy_env"echo"Thebuildis$version"echo"Thepaaswordis$pass"if$boolthenecho"Requestisapproved"elseecho"Requestisrejected"fi  3.BuildwithParameters&nb... 查看详情

jenkins对接gitlab和git

1需要的插件jenkins的git插件和jenkins的gitlab插件。2对接gitlab在系统配置中,随便起一个连接的名字,设置url,可以直接用ip地址,端口号默认是80,不需要写明。证书为gitlabapitoken,即gitlab的privatetoken。配置好之后,testconnection。3... 查看详情

jenkins+ansible+gitlab自动化部署三剑客--jenkinsansible集成(代码片段)

JenkinsAnsible集成准备工作参考https://www.cnblogs.com/bk770466199/p/12259007.html完成以下准备工作需要在jenkins服务器上,配置ansible2.5+python3.6虚拟环境配置jenkins.example.com主机到test.example.com主机的ssh免秘钥认证配置ansible,创建testservers文件1.... 查看详情

Jenkins 和 GitLab 的 Git SSH 签出失败

】Jenkins和GitLab的GitSSH签出失败【英文标题】:GitSSHcheckoutfailswithJenkinsandGitLab【发布时间】:2021-12-0612:28:22【问题描述】:当我尝试构建配置为从GitLab签出的Jenkins作业时,我得到以下错误输出(截断):....................ERROR:Errorfet... 查看详情

SSH 密钥未受保护的 terraform ansible jenkins

】SSH密钥未受保护的terraformansiblejenkins【英文标题】:SSHkeyunprotectedterraformansiblejenkins【发布时间】:2021-10-2010:40:42【问题描述】:我有一个gitlab存储库,其中包含我的ansible和terraform代码来部署我的基础架构。(CI/CD)我将ssh密钥存... 查看详情

ci/cd持续集成与持续交付(上)--------git,gitee远程共有仓库和gitlab私有仓库,jenkins(代码片段)

...结合远程共有仓库github/gitee三、远程私仓库gitlab搭建一、jenkins持续集成1jenkins简介2jenkins安装3.jenkins插件安装4.jenkins项目创建,每隔1分钟看gitlab的变化5.实时看gitlab的变化,g 查看详情

当由 gitlab webhook 调用时,jenkins 管道中的 git 分支名称是啥

】当由gitlabwebhook调用时,jenkins管道中的git分支名称是啥【英文标题】:whatisgitbranchnameinjenkinspipelinewheninvokedbygitlabwebhook当由gitlabwebhook调用时,jenkins管道中的git分支名称是什么【发布时间】:2019-04-0307:07:48【问题描述】:我可以... 查看详情

gitlab集成jenkins(代码片段)

项目:使用git+jenkins实现持续集成开始构建 General 源码管理 我们安装的是Git插件,还可以安装svn插件 我们将git路径存在这里还需要权限认证,否则会出现error  我们添加一个认证 选择一下认证方式(我... 查看详情