《小团队web技术搭建》(六)自动化部署方式(CI/CD)(一)

简介: 《小团队web技术搭建》(六)自动化部署方式(CI/CD)(一)
欢迎关注系列专栏《小团队web技术搭建》


《小团队web技术搭建》(一)环境和工具的准备-第一部分

《小团队web技术搭建》(二)环境和工具的准备-第二部分

《小团队web技术搭建》(三)环境和工具的准备-第三部分

《小团队web技术搭建》(四)虚拟机的安装使用

《小团队web技术搭建》(五)项目的简单部署方式

《小团队web技术搭建》(六)自动化部署方式(CI/CD)(一)

《小团队web技术搭建》(七)自动化部署方式(CI/CD)(二)

持续更新中...

上一篇文章中,我们介绍了比较传统的部署方法,我们需要手动登上服务器上传和构建项目,效率也比较低,项目多时也不方便管理。

image.png

项目要发布时,负责运维的兄弟出去浪了联系不上怎么办?(运维同学随身携带电脑,不理你时一般是故意的)

13LLg.gif

我想起几年前一朋友描述他们家公司抢占运维同学的场景,那场面挺难忘的,就像大学的时候大家去自习的教室帮好基友“占座”,有放鞋子的、放书包的、放吃的、把自己放上去的(躺着)。

“占座”常见,“占人”怎么占?有直接到运维同学的工位上的直接等着的,有直接让部门里的女孩子去预约的,还有直接拿手抓饼和老酸奶之类的去“贿赂”的,各种手段,基本就差把运维绑起来供到自己部门里去了。

image.png

不过人家那是大公司,运维拥有着“至高无上”的权限,掌控着公司的发布大权,普通人是不能直接去操作,只能排队求人办事,这就是人情世故

image.png

小公司可能就一两个运维人员,甚至没有运维,权限管控相对宽松;有没有什么方法,只要一次配好,发布的时候就点击一下就行,实现一键无痛发布,就像小时候妈妈出门前跟你说“饭妈妈做好了,你要吃的时候就热一下”的那种感觉,舒服,温馨,温暖。

当然是有的!

image.png

CI/CD介绍

为了解决手动部署出现的效率低、出错率高等缺点,出现了集成、测试、部署流程自动化的概念,我们经常称之为CI/CD,其中CI是持续集成(Continuous integration),CD是持续部署(continuous deployment)或持续交付(Continuous Delivery)。

我们不用过于纠结上面三个概念,其中持续部署和持续交付是不同角度上不同的叫法,都是要求流程化自动化、高效发布到目的环境;持续集成就是把环境、团队成员代码、测试流程等流程化。

除了以上好处,还有很重要的一点,运维同学不至于被你们烦死

image.png

空出更多运维资源,可以更专注到性能、安全问题上,所以CI/CD是个双赢的东西,岂不美哉。

下面我们介绍下主流的和非主流的CI/CD工具。

image.png

Jenkins

说到主流,Jenkins当之无愧。现在,我再来折磨下在第四篇文章中装好的Ubuntu虚拟机,用它来装Jenkins并演示完整流程。

安装Jenkins

为了不进行复杂繁琐的安装步骤,我选择Docker进行安装Jenkins。Docker的安装我们有在第二篇第四篇文章都有介绍(不同系统版本)。

image.png

我们用docker搜索一下jenkins相关的镜像,关注第一个(star数第一的):

docker search jenkins

image.png

提示让我们拉取jenkins/jenkins:lts镜像,也可以直接访问DockerHub的Jenkins主页查看说明。下面我们拉取这个镜像:

docker pull jenkins/jenkins:lts

为了方便在必要的时候访问到Jenkins的一些数据,我们建一个Jenkins目录,相关说明可在DockerHubJenkins主页看到:

image.png

新建jenkin home目录(自行设置,记住它),并修改它的权限(不然docker运行容器会报权限错误):

mkdir -p /var/jenkin_test_home
sudo chown -R 1000:1000 /var/jenkin_test_home/

查看我们下载的镜像,确保jenkins镜像已经就绪:

docker images

image.png

接下来咱们用它来跑一个容器:

docker run -d --name testjenkins -p 8080:8080 -p 50000:50000 -v /var/jenkin_test_home:/var/jenkins_home jenkins/jenkins:lts

我们来解释一下这行命令

  • -d 是让它到后台运行这样不用一直保持终端开启;
  • -p 8080:8080 -p 50000:50000 把容器的端口映射出来,支持多个,8080和50000端口都是Jenkins需要的,其中8080将是我们访问Jenkins应用端的端口;
  • --name testjenkins 是起一个你中意的名字;
  • -v /var/jenkin_test_home:/var/jenkins_home容器的某个目录映射到你刚才新建的目录;
  • jenkins/jenkins:lts 镜像名称,我们下载时候用的就是它

容器后台运行了,我们看看它是否真的在跑,可以用ps查看容器状态:

docker ps

image.png

或者去看看容器的日志是否正常:

docker logs testjenkins

image.png

看起来是正常了,查看一下服务器(这里我用的是虚拟机,所以查看本地ip,正常服务器需要去访问公网ip):

image.png

浏览器访问jenkins(8080端口)http://192.168.1.100:8080/,看到界面已经出来了,需要我们做一些初始化工作。

image.png

按照它给的提示我们我们去找下我们映射的jenkins home目录下的文件内容,把它复制粘贴到密码输入框,然后点继续(这字符串也是作为jenkins的admin密码):

cat /var/jenkin_test_home/secrets/initialAdminPassword

image.png

image.png

然后按照它的提示慢慢往下点(可以自己按需选择少量插件安装加快速度,后面还可以加装;或者在这一步之前把它换成国内镜像源会快些),等待它安装,:

image.png

image.png

配置一个账号或者点击下方的使用admin账号:

image.png

安装完成:
image.png

image.png

image.png

准备一个项目

我们以上次用的github仓库small-team-tech为例,并上传了一个加了构建流程的项目:

npm run build

执行上面的命令会显示Hello World + 构建时间,就知道是否发布成功了。

安装需要的jenkins插件

在首页依次进入Manage Jenkins->Configure System->Nanage Plugins,在可安装列表中依次搜索并安装如下插件:

  • NPM and Yarn Wrapper and Steps (npm构建)
  • Publish Over SSH (远程连接服务器)
  • NodeJS Plugin (Node支持)

点击install without restart,不用重启。

配置远程服务器连接

由于我们的jenkins和要部署上去的服务器不是同一台机器,我们要配置一些东西让jenkins能远程访问到服务器,并把jenkins自动构建的产物上传到这台服务器。这里我们要部署的就是上一篇文章中我们用于部署的那台。

在jenkins所在的服务器,复制私钥:

# 手动复制下行命令输出的内容
cat ~/.ssh/id_rsa

在首页依次进入Manage Jenkins->Configure System->Publish over SSH
image.png

在下列两张图的表单填写的东西我们说明下:

  • Passphrase 填写远程服务器ssh登录密码
  • Key 填写刚才复制的私钥
  • SSH Server Name 写一个你能分辨的名称
  • Hostname 远程服务器地址
  • Username 远程服务器ssh登录用户名
  • Remote Directory 写一个远程服务器的目录,这个目录必须要存在,这里因为我们要部署的位置在/www就填写了/www

image.png

image.png

点击下方的测试配置按钮,出现Success就说明连接配置ok,然后点击保存就行:

image.png

配置git权限

在首页依次进入Manage Jenkins->Manage Credentials->全局凭据 (unrestricted)->Add Credentials

我们先在jenkins服务器生成一个ssh key,并复制它的内容:

ssh-keygen -t rsa -C “youremail@qq.com”

# 内容显示出来后复制到git平台新增的一个ssh key,和下方添加凭据的Key一栏:
cat ~/.ssh/id_rsa

类型选SSH Username with private key,上面复制的内容粘贴到git平台新增的一个ssh key,和下方添加凭据的Key一栏:
image.png

image.png

image.png

最后点击Create即可。

新建自动任务

现在我们有CI/CD工具了,需要上去配一些自动流程,在Jenkins里叫job(任务),现在让我们点击Create a job:

image.png

在源码管理填写git信息,Credentials选择我们刚才新建的:

image.png

选一个你要拉取这个git仓库代码的分支(github现在默认分支为main):

image.png

配置构建步骤:

image.png

配置构建构建操作,就是把构建产物传输到我们刚才新建的连接的服务器:

image.png

OK,我们点击保存,新建Job完成!

配置nginx

首先为对应上面构建脚本,我们到要部署的目标服务器新建一个目录用于存放项目构建物:

mkdir -p /www/projects/demo/demo2

修改nginx:

# 可用nginx -t 命令查看nginx配置文件路径
vi /etc/nginx/nginx.conf

在http字段下加一个server:

server { 
    listen 8990; 
    root /www/projects/demo/demo2; 
}

让nginx配置生效:

nginx -s reload

运行jenkins任务

我们搭建好了任务和nginx,现在运行下它:

image.png

image.png

然后再次等待:
image.png

在这个过程,如果你觉得无聊或者它报红了,你可以点进去查看日志:
image.png

在错误中尝试和排错多次后,我终于运行成功:

image.png

image.png

访问浏览器(nginx配的8990端口)http://47.96.177.197:8990/:

image.png

由于篇幅关系,我们有机会再介绍别的一些CI/CD工具,有点顶不住。

ceeb653ely8h4o1kpd53mg20a00a0tnp.gif

感谢阅读!欢迎关注系列专栏《小团队web技术搭建》
相关文章
|
18天前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
71 19
Selenium IDE:Web自动化测试的得力助手
|
20天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
127 17
Selenium:强大的 Web 自动化测试工具
|
1月前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
39 6
|
1月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
52 3
|
1月前
|
jenkins Java 持续交付
软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分
随着软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分。本文以电商公司为例,介绍如何使用 Jenkins 自动发布 Java 代码,包括安装配置、构建脚本编写及自动化部署等步骤,帮助团队实现高效稳定的软件交付。
39 3
|
1月前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
74 1
|
1月前
|
缓存 安全 前端开发
构建高效Web应用的五大关键技术
【10月更文挑战第42天】在数字化浪潮中,Web应用已成为企业与用户互动的重要桥梁。本文将深入探讨提升Web应用性能和用户体验的五项核心技术,包括前端优化、后端架构设计、数据库管理、安全性增强以及API开发的最佳实践。通过这些技术的应用,开发者可以构建出更快、更稳定且更安全的Web应用,满足现代网络环境的需求。
|
1月前
|
人工智能 安全 物联网
区块链技术的未来展望:去中心化金融(DeFi)与Web 3.0的融合
区块链技术的未来展望:去中心化金融(DeFi)与Web 3.0的融合
|
1月前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
1月前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
53 0