前言
当前后端联调完成之后,需要将部署项目到服务器,小规模团队没有专门运维的情况下。后端可以通过idea的docker插件进行部署。前端没处理过暂时不知道,但印象中也有响应的容器部署技术。
这里主要介绍的是,推送代码到代码仓库,然后在jenkins中通过脚本去部署前后端项目。
另外,部署jenkins需要一些额外的东西:nodejs、jdk、maven环境,其他的像是docker环境就不提了,肯定都是有的了。
1、安装前置环境
1.1、安装nodejs
1.1.1、下载nodejs
下载nodejs:Node.js — Download Node.js® (nodejs.org)
1.1.2、上传并解压缩文件
#切换目录
cd xxx
#上传文件
rz node-v14.17.4-linux-x64.tar.xz
#解压缩文件
tar xf node-v14.17.4-linux-x64.tar.xz
#改名
mv node-v14.17.4/ nodejs
1.2、安装jdk
先通过java-version查看服务器有没有安装想要的jdk
java -version
java version "1.8.0_411"
Java(TM) SE Runtime Environment (build 1.8.0_411-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.411-b09, mixed mode)
如果是openjdk,就先删除旧的jdk再安装新的jdk
1.2.1、下载jdk
先下载好jdk文件,我是通过解压下载好的文件进行安装的。
申请账号,下载对应版本的jdk即可
1.2.2、上传到服务器并解压文件
通过xftp或者安装rz指令
#切换文件夹路径到你期望的位置
cd xxx
#上传文件到服务器
rz 回车选择上传的文件
#解压文件
tar -zxvf jdk-8u411-linux-x64.tar.gz
#修改文件夹名称
mv jdk1.8.0_161/ jdk
1.3、安装maven
1.3.1、下载maven
下载地址:Maven – Download Apache Maven
1.3.2、上传并解压缩文件
#切换路径
cd xxx
#上传文件
rz 回车
#解压缩文件
tar -zxvf apache-maven-3.1.1-bin.tar.gz
#改名
mv apache-maven-3.1.1 maven
1.4、配置环境变量
#打开并编辑配置文件
vim /etc/profile
#在文件最后添加下面的内容,文件路径换成自己的路径
#java环境
JAVA_HOME=/usr/local/java/jdk8
JRE_HOME=/usr/local/java/jdk8/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
#maven环境
export MAVEN_HOME=/usr/local/maven/maven311
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
#nodejs环境
export NODEJS_HOME=/usr/local/nodejs/nodejs14
export PATH=$NODEJS_HOME/bin:$PATH
配置完成之后保存并刷新配置
source /etc/profile
至此,全部的基础配置都已经齐了
可以通过指令查看有没有安装成功
#查看java环境
java -version
#查看nodejs环境
npm -v
node -v
#查看maven环境
mvn -v
2、拉取并部署jenkins
2.1、拉取jenkins
#查询镜像
docker search jenkins
#下载镜像
docker pull jenkins/jenkins
然后是编写docker-compose.yml文件
2.2、编写compose文件并部署jenkins
version: '3'
services:
jenkins:
user: root
image: jenkins/jenkins:latest
ports:
- "8080:8080"
- "5000:5000"
volumes:
- "/jenkins/jenkins_home:/var/jenkins_home"
- "/etc/localtime:/etc/localtime"
- "/var/run/docker.sock:/var/run/docker.sock"
- "/usr/bin/docker:/usr/bin/docker"
- "/etc/docker/daemon.json:/etc/docker/daemon.json"
- "/usr/local/java/jdk1.8.0_411:/usr/local/java/jdk8"
- "/usr/local/maven/apache-maven-3.6.3:/usr/local/maven/maven311"
- "/usr/local/nodejs/nodejs:/usr/local/nodejs/nodejs14"
- "/root/.ssh:/root/.ssh"
restart: always
container_name: jenkins
最好是新建个文件夹放不同的东西,我这里建了个jenkins的文件夹用来放文件
jenkins文件夹中再新建jenkins_home文件夹,并赋权777
chmod +777 jenkins
docker-compose.yml文件核jenkins_home放在同一个文件夹下面,方便管理
2.3、启动jenkins
指令
#启动jenkins -d后台启动
docker-compose up -d
#关闭jenkins
docker-compsoe down
3、jenkins配置
3.1、初始化jenkins
访问端口进入到jenkins
输入管理员密码管理员密码位于挂载的目录里面:/jenkins_home/secrets/inst...key
复制粘贴到页面上即可
接下来安装推荐的插件
进入到jenkins后先安装一些插件,publish over ssh、 maven integration、最好再装个汉化插件,页面换成汉字,重启服务,让插件生效
3.2、配置环境
3.2.1、配置jdk
点击系统管理->全局工具配置->找到jdk安装
填写jdk位置,也就是挂载的目录
3.2.2、配置nodejs
nodejs配置同理
3.2.3、配置maven
maven配置同理
maven多了个setting文件配置,进入界面第一个就是
3.2.4、配置服务器连接
在系统管理中找到publish over ssh这是之前安装的插件,配置好登陆的账号密码(如果是选择这个方式连接服务器,不能关闭账号密码登录服务器)
如果是通过密钥登陆的,把密钥粘进去就行了。(推荐关闭账号密码登录,采用米密钥登录,能安全些)
这里配置用户名和ip,以及一个文件路径,这个文件路径可配可不配,为了后续方便点,设置成你用来发版的文件夹就行,例如后端需要个jar包,通过脚本启动,这个目录就是后端文件的通用包,后续根据不同的文件夹区分不同项目,但是所有的项目都是在这个文件夹下面的。
配置完了点一下test connection,测试链接的,左下角显示success就成功了。
3.2.5、发版后端
3.2.5.1、新建任务
选择流水线
3.2.5.2、源码管理
输入仓库地址,以及给定一个权限足够的账号,有些账号权限不够会导致代码拉取失败。
点击添加,添加一个账户。
我这里是用的管理员账号
设定拉取的分支,可能有些项目主分支代码不是最新的,二而是最稳定的,类似的还有uat分支,当联调以及测试的时候就拉取uat分支进行发版,这里注意区分。
3.2.5.3、build steps
发版之前要做什么,这里我采取的策略是,先拉取代码,再将代码打包成jar包,通过java -jar的方式进行启动。这里有个小坑,后面会讲。
选择之前配置好的maven环境,设定好执行的目标 -P 是指按照那个配置文件打包。由于项目配置了多个环境,所以需要指定打包的环境,否则会按照默认的dev进行打包(这里分了dev\uat\prod),因为是发布到生产环境,所以选择了prod进行打包。
接下来是,把打包好的jiar包送到指定的文件夹下面。
linux是之前配置的服务器连接的别名。
然后配置一下需要执行的指令,我这里是执行了三个指令。
第一个指令是:拷贝,从jenkins的文件夹下面拷贝到我需要的文件夹下面。
第二个指令是:切换路径,切换到脚本执行的路径
第三个指令是:执行脚本,启动项目
3.2.6、发版前端
前端发版和后端发版是差不多的
这里我发版前端是采用将项目打包成一个dist文件,再将这个文件挂载到nginx上,以nginx作为前端服务器
3.2.6.1、新建任务
选择流水线模式
3.2.6.2、源码管理
同样的输入仓库地址,配置一个权限足够的账号
3.2.6.3、环境构建
选择之前配置的nodejs环境,其余的默认即可
3.2.6.4、build steps
增加构建步骤,选择执行shell
指令的内容是,一、强制install,二、以生产环境运行,三、将dist打包程tar包
再增加一个构建步骤:Send files or execute commands over SSH。把文件传到服务器指定地址
name一栏是之前定义的服务器配置
transfer set是配置传输,source files :源文件,要操作的文件
另外两个配置不用管,全部交给指令处理
指令一共五个,第一个mv ,把dist压缩包拷贝到指定目录,二、切换文件路径到压缩包对应路径,三、解压缩文件,四、删除压缩包,五、重启docker(可有可无)
3.2.6.5、构建后操作
点击添加构建后操作步骤,选择当完成构建后删除工作空间,解除文件占用服务器空间。
至此,前端发版完成