本文正在参加「金石计划 . 瓜分6万现金大奖」

欢迎关注系列专栏:《小团队web技能建立》

《小团队web技能建立》(一)环境和东西的预备-榜首部分
《小团队web技能建立》(二)环境和东西的预备-第二部分
《小团队web技能建立》(三)环境和东西的预备-第三部分
《小团队web技能建立》(四)虚拟机的装置运用
《小团队web技能建立》(五)项意图简单布置方法
《小团队web技能建立》(六)主动化布置方法(CI/CD)(一)
《小团队web技能建立》(七)主动化布置方法(CI/CD)(二)
继续更新中…

在上一篇文章中,咱们介绍了比较传统的布置方法,咱们需求手动登上服务器上传和构建项目,功率也比较低,项目多时也不方便管理。

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

项目要发布时,担任运维的兄弟出去浪了联系不上怎样办?(运维同学随身携带电脑,不理你时一般是成心的)

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

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

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

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

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

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

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

当然是有的!

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

CI/CD介绍

为了解决手动布置出现的功率低、出错率高等缺陷,出现了集成、测验、布置流程主动化的概念,咱们常常称之为CI/CD,其间CI是继续集成(Continuous integration),CD是继续布置(continuous deployment)或继续交给(Continuous Delivery)。

咱们不必过于纠结上面三个概念,其间继续布置和继续交给是不同角度上不同的叫法,都是要求流程化主动化、高效发布到意图环境;继续集成便是把环境、团队成员代码、测验流程等流程化。

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

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

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

下面咱们介绍下干流的和非干流的CI/CD东西。

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

Jenkins

说到干流,Jenkins名副其实。现在,我再来折磨下在第四篇文章中装好的Ubuntu虚拟机,用它来装Jenkins并演示完整流程。

装置Jenkins

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

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

咱们用docker查找一下jenkins相关的镜像,关注榜首个(star数榜首的):

docker search jenkins

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

提示让咱们拉取jenkins/jenkins:lts镜像,也能够直接拜访DockerHub的Jenkins主页检查阐明。下面咱们拉取这个镜像:

docker pull jenkins/jenkins:lts

为了方便在必要的时分拜访到Jenkins的一些数据,咱们建一个Jenkins目录,相关阐明可在DockerHubJenkins主页看到:

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

新建jenkin home目录(自行设置,记住它),并修正它的权限(否则docker运转容器会报权限过错):

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

检查咱们下载的镜像,确保jenkins镜像现已就绪:

docker images

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

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

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

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

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

docker logs testjenkins

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

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

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

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

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

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

cat /var/jenkin_test_home/secrets/initialAdminPassword

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

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

然后按照它的提示渐渐往下点(能够自己按需挑选少量插件装置加快速度,后边还能够加装;或许在这一步之前把它换成国内镜像源会快些),等候它装置,:

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

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

装备一个账号或许点击下方的运用admin账号:

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

装置完结:

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

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

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

预备一个项目

咱们以前次用的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

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

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

  • Passphrase 填写长途服务器ssh登录密码
  • Key 填写方才仿制的私钥
  • SSH Server Name 写一个你能分辨的称号
  • Hostname 长途服务器地址
  • Username 长途服务器ssh登录用户名
  • Remote Directory 写一个长途服务器的目录,这个目录必须要存在,这儿因为咱们要布置的位置在/www就填写了/www

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

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

点击下方的测验装备按钮,出现Success就阐明衔接装备ok,然后点击保存就行:

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

装备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一栏:

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

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

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

最终点击Create即可。

新建主动使命

现在咱们有CI/CD东西了,需求上去配一些主动流程,在Jenkins里叫job(使命),现在让咱们点击Create a job:

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

在源码管理填写git信息,Credentials挑选咱们方才新建的:

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

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

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

装备构建步骤:

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

装备构建构建操作,便是把构建产品传输到咱们方才新建的衔接的服务器:

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

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,现在运转下它:

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

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

然后再次等候:

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

在这个进程,假如你觉得无聊或许它报红了,你能够点进去检查日志:

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

在过错中尝试和排错多次后,我总算运转成功:

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

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

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

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

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

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

感谢阅读!欢迎关注系列专栏:《小团队web技能建立》