前言

在之前已经写了关于Git,Gitlab以及Ansible的两篇博客《Git+Gitlab+Ansible剧本实现一键部署Nginx–技术流ken》,《Git+Gitlab+Ansible剧本实现一键部署动态网站(二)–技术流ken》,以及关于jenkins的简单使用《Jenkins持续集成介绍及插件安装版本更新演示(一)–技术流ken》。相信大家也已经完全掌握了这三项工具的使用,也可以使用这几项工具可以部署静态以及动态网站了。

以前的博客可以实现一键部署网站了,但是并没有实现持续化集成部署网站。沉重的工作还是落在了可怜的运维工程师上面。

但是你有没有想过这样一个问题,假如网站全部部署成功了,现在我们的开发程序员隔三差五的修改网站上的某些功能或者修改页面内容,难道都需要运维人员再手动执行命令吗?有没有一种方法使得程序员修改完成代码之后可以自己测试、部署上线哪?

回答是有的!jenkins就可以完成上述的工作了。

本篇博客将使用git+gitlab+ansible+jenkins实现真正的持续化一键部署静态网站

下一篇博客将介绍如何使用git+gitlab+ansible+jenkins部署一套动态的网站。敬请期待。

Gitlab创建项目

第一步:gitlab的安装即配置

请参考我之前的博客《Gitlab在linux/windows中免密使用(二)–技术流ken

第二步:创建项目

如下图,我创建了一个static_web的项目

Git下载仓库

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

  1. [root@ken ~]# mkdir /ken
  2. [root@ken ~]# cd /ken
  3. [root@ken ken]# git clone http://10.220.5.137/webg1/static_web.git
  4. Cloning into 'static_web'...
  5. Username for 'http://10.220.5.137': root
  6. Password for 'http://root@10.220.5.137':
  7. remote: Counting objects: 3, done.
  8. remote: Total 3 (delta 0), reused 0 (delta 0)
  9. Unpacking objects: 100% (3/3), done.

Ansible剧本编写

第一步:进入到上面下载下来的工作目录中

  1. [root@ken ken]# ls
  2. static_web
  3. [root@ken ken]# cd static_web/
  4. [root@ken static_web]# ls -a
  5. . .. .git README

第二步:使用roles来编写剧本

首先需要创建相关的目录

  1. [root@ken static_web]# mkdir roles/httpd/{tasks,vars,files} -p

第三步:编写tasks文件

  1. [root@ken static_web]# vim roles/httpd/tasks/main.yml
  2. [root@ken static_web]# cat roles/httpd/tasks/main.yml
  3. - name: install httpd
  4. yum: name=httpd state=present
  5. - name: start httpd
  6. service: name=httpd state=restarted
  7. - name: copy test file to httpd
  8. copy: src=roles/httpd/files/index.html dest=/var/www/html

第四步:编写file下的测试文件

  1. [root@ken static_web]# vim roles/httpd/files/index.html
  2. [root@ken static_web]# cat roles/httpd/files/index.html
  3. test for static web

第五步:编写主机清单

  1. [root@ken static_web]# cat inventory/test
  2. [ken]
  3. 10.220.5.138

第六步:编写剧本文件

  1. [root@ken static_web]# vim ken.yml
  2. [root@ken static_web]# cat ken.yml
  3. - hosts: ken
  4. remote_user: root
  5. roles:
  6. - httpd

第七步:执行剧本

注意:在执剧本的时候需要使用-i指定你创建的主机列表清单,否则会找不到需要执行的节点

可以看到剧本执行完成也没有报错

  1. [root@ken static_web]# ansible-playbook -i inventory/test ken.yml
  2.  
  3. PLAY [ken] ***********************************************************************
  4.  
  5. TASK [Gathering Facts] ***********************************************************
  6. ok: [10.220.5.138]
  7.  
  8. TASK [httpd : install httpd] *****************************************************
  9. changed: [10.220.5.138]
  10.  
  11. TASK [httpd : start httpd] *******************************************************
  12. changed: [10.220.5.138]
  13.  
  14. TASK [httpd : copy test file to httpd] *******************************************
  15. changed: [10.220.5.138]
  16.  
  17. PLAY RECAP ***********************************************************************
  18. 10.220.5.138 : ok=4 changed=3 unreachable=0 failed=0

第八步:网页浏览

现在就可以登录该节点进行访问了

文件提交至gitlab

经过上面的步骤之后,已经部署完成了一个静态页面

现在把这些文件提交至gitlab

第一步:文件提交至仓库

  1. [root@ken static_web]# git add .
  2. [root@ken static_web]# git commit -m "v1"

第二步:报错

提交报了这个错

  1. *** Please tell me who you are.
  2.  
  3. Run
  4.  
  5. git config --global user.email "you@example.com"
  6. git config --global user.name "Your Name"
  7.  
  8. to set your account's default identity.
  9. Omit --global to set the identity only in this repository.
  10.  
  11. fatal: unable to auto-detect email address (got 'root@ken.(none)')

直接执行命令

  1. [root@ken static_web]# git config --global user.email "you@example.com"
  2. [root@ken static_web]# git config --global user.name "Your Name"

第三步:推送至gitlab

  1. [root@ken static_web]# git push
  2. warning: push.default is unset; its implicit value is changing in
  3. Git 2.0 from 'matching' to 'simple'. To squelch this message
  4. and maintain the current behavior after the default changes, use:
  5.  
  6. git config --global push.default matching
  7.  
  8. To squelch this message and adopt the new behavior now, use:
  9.  
  10. git config --global push.default simple
  11.  
  12. See 'git help config' and search for 'push.default' for further information.
  13. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
  14. 'current' instead of 'simple' if you sometimes use older versions of Git)
  15.  
  16. Username for 'http://10.220.5.137': root ####输入连接你的gitlab的用户名
  17. Password for 'http://root@10.220.5.137': ###输入该用户密码
  18. Counting objects: 12, done.
  19. Compressing objects: 100% (5/5), done.
  20. Writing objects: 100% (11/11), 815 bytes | 0 bytes/s, done.
  21. Total 11 (delta 0), reused 0 (delta 0)
  22. To http://10.220.5.137/webg1/static_web.git
  23. c47e814..e2ac703 master -> master

第四步:web端查看结果

发现v1版已经上传成功

jenkins 实现持续集成

经过上面的一些操作之后,我们已经完成了静态网站的部署,已经代码的上传

但是发现还是每次执行需要输入命令等

现在我们就使用jenkins来实现持续化部署

第一步:jenkins中创建任务

我创建了一个自由风格的软件项目

项目名称为test_for_static_web

输入完毕之后选择确定即可

第二步:添加源码管理信息

这里的url就是你的项目的地址

下面的凭证,点击Add输入你的gitlab的密码和账号即可

第三步:选择构建

增加侯建步骤选择执行shell

第四步:编写shell

第一行:指定bash为解释器,和编写shell一样

第二行:进入到工作目录,这里引用了了一个变量,意思是工作目录,因为我们的剧本里面都是相对路径所以我们需要进入到git拉取下来的文件中进行执行可以点击下面的可用环境列表了解更多

第三行: 即执行剧本

以上步骤完成之后点击下方的保存即可

第五步:查看执行结果

点击立即构建之后,在最下方会出现一个圆圈,这个圆圈红色代表失败,蓝色代表成功,可以鼠标放上去显示的

第六步:查看失败原因

点击下方的红色圆圈即可查看失败原因

这里的失败原因是因为运行jenkins程序的是jenkins用户,我们连接节点的秘钥是root的,所以现在连接不上

第七步:更改jenkins的配置文件

把运行jenkins的用户更改为root即可

更改完成之后重启jenkins

  1. [root@ken static_web]# sed -i 's/JENKINS_USER="jenkins"/JENKINS_USER="root"/' /etc/sysconfig/jenkins
  2. [root@ken static_web]# systemctl restart jenkins

第八步:再次执行构建

再次点击构建可以发现现在红色圆圈变成了蓝色的成功圆圈

点击一下这个成功的圆圈查看运行过程

第九步:查看工作目录

许多人会疑惑,在这里使用的git clone,它把文件下载到哪里去了那?

其实是放在jenkins的工作目录之下的你的项目名称里面了,还记得我们的项目名称是test_for_static_web吗?

  1. [root@ken static_web]# ls /var/lib/jenkins/workspace/
  2. test_for_static_web/

查看一下这个目录下面都有什么

看到了吧,从gitlab克隆的回来的文件都放在了这里即jenkins工作目录下>你的任务名称面

  1. [root@ken static_web]# ls /var/lib/jenkins/workspace/test_for_static_web
  2. inventory ken.retry ken.yml README roles

更改网站数据

现在我们的工程师就可以在他的电脑上面更改网站数据,并实现持久集成自动化部署了

第一步:克隆数据

现在我使用的电脑IP 为10.220.5.139,现在假如另外一位工程师的电脑是10.220.5.137上面

  1. [root@ken tmp]# mkdir p
  2. [root@ken tmp]# cd p
  3. [root@ken p]# git clone http://10.220.5.137/webg1/static_web.git
  4. Cloning into 'static_web'...
  5. Username for 'http://10.220.5.137': root
  6. Password for 'http://root@10.220.5.137':
  7. remote: Counting objects: 14, done.
  8. remote: Compressing objects: 100% (6/6), done.
  9. remote: Total 14 (delta 0), reused 0 (delta 0)
  10. Unpacking objects: 100% (14/14), done.
  11. [root@ken p]#

第二步:更改网站数据

  1. [root@ken static_web]# echo "this is new data for static web">> roles/httpd/files/index.html

第三步:提交

  1. [root@ken static_web]# git add .
  2. [root@ken static_web]# git commit -m "v2"
  3. [master e5f5d42] v2
  4. 1 file changed, 1 insertion(+)
  5. [root@ken static_web]# git push
  6. warning: push.default is unset; its implicit value is changing in
  7. Git 2.0 from 'matching' to 'simple'. To squelch this message
  8. and maintain the current behavior after the default changes, use:
  9.  
  10. git config --global push.default matching
  11.  
  12. To squelch this message and adopt the new behavior now, use:
  13.  
  14. git config --global push.default simple
  15.  
  16. See 'git help config' and search for 'push.default' for further information.
  17. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
  18. 'current' instead of 'simple' if you sometimes use older versions of Git)
  19.  
  20. Username for 'http://10.220.5.137': root
  21. Password for 'http://root@10.220.5.137':
  22. Counting objects: 11, done.
  23. Compressing objects: 100% (4/4), done.
  24. Writing objects: 100% (6/6), 443 bytes | 0 bytes/s, done.
  25. Total 6 (delta 1), reused 0 (delta 0)
  26. To http://10.220.5.137/webg1/static_web.git
  27. e2ac703..e5f5d42 master -> master

第三步:jenkins持续化部署

点击构建

发现没有报错

第四步:网站查看

发现网站数据已经更新

 

Continue Reading

 

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

  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实现持续集成自动化部署静态网站(二)

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

  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. HotSpot的执行引擎-CallStub栈帧

    之前多次提到接触到调用JavaCalls::call()方法来执行Java方法,如: (1)Java主类装载时,调用JavaCalls::call()方法执行的Java方法checkAndLoadMa ...

  2. 快速排序&&归并排序

    快速排序 快速排序采用的是分治的策略,算法的具体实现过程是 1.确定一个数X(一般是选中间值X=q[l+r>>1]) 2.利用指针i,j,将数组中比X小的数放在一边,比X大的数放在另一边 ...

  3. SpringBoot--- SpringSecurity进行注销,权限控制

    SpringBoot--- SpringSecurity进行注销,权限控制 环境 IDEA :2020.1 Maven:3.5.6 SpringBoot: 2.0.9 (与此前整合的版本2.3.3 不 ...

  4. ES7异步函数解决进程等待相关业务问题

    业务需求场景描述: 在接口只能单一检测的情况下,批量检测资源名称是否存在数据库,如果资源群中某一个资源已存在:给出交互让用户决定是否覆盖资源,最后形成不存在的资源和用户确定覆盖的资源群,进行提交. 业 ...

  5. Alpha阶段项目复审(鸽牌开发小分队)

    团队:鸽牌开发专业小分队 项目:必备记 集合帖:集合帖 项目复审: 团队名字 项目链接 优点 缺点和bug报告 最终名次 歪瑞古德小队 海岛漂流 1.功能齐全,上手简单2.界面简洁美观3.想法新颖,可 ...

  6. day41:MYSQL:select查询练习题

    目录 1.表结构 2.创建表和插入数据 3.习题 1.表结构 2.建表和插入数据 # 创建班级表 create table class( cid int primary key auto_increm ...

  7. .Net 单元测试框架xUnit使用

    使用前需要导入下面的NuGet包:(不然可能会导致测试代码无法运行) .net版本 .net core3.1 Moq这个包只有需要Mock的时候才需要导入(不清楚Mock的话可以留言或自行百度) 开始 ...

  8. Laravel Pipeline原理及使用

    Laravel Pipeline原理及使用 开发中可能遇到非常冗长的逻辑,以至于我们想将针对性逻辑拆分出来,但是又拿不准该如何拆分才能实现较高的扩展性并保证较高的维护性,或者说不知道如何优雅的将待处理 ...

  9. 使用Android的硬件缩放技术优化执行效率

    Unity3D研究院之使用Android的硬件缩放技术优化执行效率 http://www.xuanyusong.com/archives/3205 Android中GLSurfaceView在横竖屏切 ...

  10. Codeforces 1337C Linova and Kingdom

    题意 给你一颗有根树,你要选择\(k\)个点,最大化\(\sum_{i \in S} val_i\),其中\(S\)是被选点的集合,\(val_i\)等于节点\(i\)到根的路径上未被选择点的个数. ...