对于程序员来说,部署这个词已经是耳熟能详的了,你可能会觉得很可笑,连部署都不知道一定是个超级小白。
没错,对于刚入职不久的我来说的确还是个小白,虽然之前无数次听过部署这个概念,大概知道是啥,但老实说,如何解释部署,部署过程到底做了什么我整个都是懵的,可能就是传说中的“只可意会不可言传”吧。
人有时候就是这样不到非要用的时候永远都不知道自己不知道什么。
以前我知道的部署是将开发出的软件通过某种方式放到一个远程服务器上,然后在远程服务器上进行环境的配置使得代码能够工作,在这中间如何去做一概不知,更不知道这其实只是部署中的一种方式而已。
一切源于最近的一个作业,要求使用jenkins对一个git项目进行部署,由于只是简单的作业,所以只需要本地部署即可。
其实我一开始并不清楚要求的是本地部署,因为就不知道还有什么本地部署,嗯,感觉自己宛如一个智障。后来完成作业过程中遇到了一些问题,在求助他人的时候才发现原来自己一直在误区里面。
科科,开始说正事了。
所谓部署,就是让开发出的产品能够在某一环境中运行起来。
至于这个环境是什么,根据具体情况而定,可以是一个公司买的实体服务器,可以是类似AWS提供的云平台服务,也可以是本地环境,所以相应地部署就分为远程部署和本地部署。
远程部署很容易理解,因为是很常见的部署形式,对于本地部署,至少我最初是很难理解的,因为在我看来本地进行开发工作的时候项目本来就是可以正常工作的,为什么还要多此一举地去进行本地部署呢,这跟开发环境有什么区别呢,完全不能理解呀。
一般的软件都会存在至少两个阶段,开发和部署。
开发工作是在本地进行的,这时我们会使用一些编辑器,例如WebStorm,VScode等等类似的IDE,但是这个时候项目只能在我们本地环境才能正常工作,别人的电脑上是访问不到的,要想别人也能够正常使用我们的项目就得进行部署。
部署刚刚已经提到过,就是使得软件在某一环境中运行起来,这个过程中会将源代码生成可运行的软件包,然后将软件包放到要部署的环境中,通过一些配置使得这个软件包在目标环境上也能够正常工作。
因为对于一个项目来说,不同人群需要的“产品”类型是不一样的,假设我们要为某一个公司开发一个网站,开发人员关心的是源代码,而项目管理人员要的是一个可运行的软件包,然而客户要的是能够打开网页就能显示预期内容的页面。
从源代码到能够看到具体的页面就是一个部署的过程。
因此部署要做的工作大致分为三步:
1. 将源代码生成可运行的软件包,例如 jar 包或 war 包等;
2. 将可运行的软件包放到目标环境上;
3. 配置目标环境使得软件包能够运行起来;
知道了这些再去看开发和本地部署的确是有区别的,尽管都是在同一台机器上,但是本质不同,和远程部署相比只是目标环境不同而已,但依旧叫做部署。
部署的工具也有很多,在我本次的作业中使用的是jenkins,通过在本地启动一个虚拟机然后运行jenkins,将其作为目标环境使用jenkins的pipeline进行部署,因为是在一台机器上故而是本地部署了。
一般来说,我们提到的部署都是远程部署,因为毕竟是要真正地投入使用嘛,如果只是学习就可以本地部署啦。