0


Jenkins自动化构建部署前端项目(Linux+gitee)

本文讲述了Jenkins自动化构建部署前端项目,内容包括Linux系统安装Jenkins、如何配置构建项目并发布到目标服务器。

背景

因公司系统项目众多,前端项目打包麻烦,项目代码管理混乱,因此需要gitee+Jenkins做自动化构建,优化项目打包流程及代码管理。
本次教程可实现最简单的自动化打包发布流程:从gitee上拉取前端项目代码 -> 执行命令打包构建 -> 将打包文件传输到目标服务器的指定位置

服务器之间使用ssh服务器账密连接。代码使用gitee管理。gitee的配置暂时也是使用gitee账密设置凭证来拉取代码

前提条件

1、Linux服务器
2、服务器 ip + 账密
3、gitee账密

安装Jenkins

Jenkins有四种安装部署方式,具体可以看下这篇文章。

知识点一
Jenkins官网有提到:Jenkins requires Java 11 or 17 since Jenkins 2.357 and LTS 2.361.1。
(翻译:从 Jenkins 2.357 和 LTS 2.361.1 版本开始,Jenkins 需要 Java 11或17版本)

● 不安装Java,需要安装2.357之前版本的Jenkins,不然运行时会报jdk版本的错。
● 安装2.357之后版本的Jenkins,Java安装版本不低于11

本次选择安装新版Jenkins,所以该需要安装Java。接下来就是安装步骤了。

安装Java11
yum install fontconfig java-11-openjdk -y

在这里插入图片描述

安装Jenkins源
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

若链接出现证书过期,根据提示加上 --no-check-certificate,即执行下面命令安装

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate

如果出现sudo: wget: command not found错误,需要先安装wget,装完重新安装源

yum -y install wget
导入下载密钥
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

在这里插入图片描述

安装Jenkins

以上步骤执行结束后,可以安装Jenkins了。安装过程中,提示输入yes或y就行。

yum install jenkins

在这里插入图片描述

如果出现以下报错:

warning: /var/cache/dnf/jenkins-0919f06c02b07800/packages/jenkins-2.249.3-1.1.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 45f2c3d5: NOKEY
Public key for jenkins-2.249.3-1.1.noarch.rpm is not installed

在这里插入图片描述

解决方案一:
解决办法(“”曲线救国“”),参考文章
修改已经下载好的Jenkins的yum源,原本是“”1“” 更改为“”0“” 零意思是不开启key的校验安装 Jenkins
在这里插入图片描述

解决方案二:
安装命令后面加上 --nogpgcheck

yum install jenkins--nogpgcheck

知识点二
卸载jenkins命令:

sudo yum remove jenkins
启动Jenkins
sudo service jenkins start//启动Jenkins
systemctl start jenkins   //启动Jenkins
sudo systemctl status jenkins // 检查 Jenkins 服务的状态

启动失败:多启动几次

若多次启动jenkins命令,还是显示启动失败,jdk还是引用的1.8,默认的加载usr/lib/jvm下的jdk,此时我们需要在usr/lib/jvm下安装对应的jkd11。

yum install java-11-openjdk* -y 

安装完成后需要改变下jdk的选中版本

alternatives --config java

列出可选的jdk版本,输入jdk11对应的序号即可
此时再启动jenkins成功

访问Jenkins界面。

在浏览器,通过服务器ip + 8080端口访问。例:http://192.168.0.118:8080/

如果访问失败,出现以下错误:
在这里插入图片描述

可能是开了防火墙,没有设置允许访问8080端口,解决方案:请看这篇文章

解锁Jenkins

解锁Jenkins需要密码,启动过程会给一个密钥,可以存下来。
在这里插入图片描述

或者执行下面命令可以获取密码,将控制台输出的密码复制到解锁Jenkins的界面中。然后耐心等待……

sudo cat/var/lib/jenkins/secrets/initialAdminPassword

解锁Jenkins成功后,直接关闭安装插件界面进入。推荐安装的插件绝大部分用不上,下载还很慢。后续可以自主选择插件安装。
在这里插入图片描述

知识点三
若是跳过了安装插件这一步,便会直接跳过创建用户实例配置这两步。直接来到登录页面。
若没跳过安装插件这一步,则不会有登录这一步。

登录

如果跳过了安装插件,会直接来到登录界面,用户名是admin,密码是默认的解锁Jenkins 的密码(密钥)。
在这里插入图片描述
登陆后,建议修改密码,可以通过右上角进入个人中心。
在这里插入图片描述
进入configure(设置)-找到password(密码)。修改完密码后,重新登录一遍即可。
在这里插入图片描述

创建用户

没有跳过插件安装,来到这一步。输入账号密码,记住这次的账密,将作为下次登录Jenkins使用。
在这里插入图片描述

实例配置

建议使用默认值
在这里插入图片描述

装插件且配置插件

推荐安装的插件:一般前端项目需要Git插件、Gitee插件(拉取远程仓库代码)、NodeJS插件(运行项目打包)、Credentials Binding(凭据插件)、Publish Over SSH插件(远程文件发布/远程脚本执行)等等,想要Jenkins汉化,需要安装Chinese插件(中文插件)。
注:若无跳过,有些插件搜不到有可能就是已经安装了
在这里插入图片描述
在这里插入图片描述

插件安装后,重启一下Jenkins。
退出/重启Jenkins,在浏览器链接后面加上exit / restart就可以了,例如Jenkins访问地址是:http://49.235.74.26:8080/,就在浏览器访问http://49.235.74.26:8080/exit。

[访问地址]/exit// 例如 http://49.235.74.26:8080/exit[访问地址]/restart      // 例如 http://49.235.74.26:8080/restart
插件全局配置

插件全装完重启之后,Git、Node和SSH可以做一个全局的配置。Git、Node配置路径:Manage Jenkins -> Tools。
在这里插入图片描述

Git全局配置

首先在Linux服务器(即Jenkins所在服务器)安装git。

yum install git -y  // 服务器安装git

git --version //查看版本号

whereis git  //查看git所在路径

在这里插入图片描述
安装成功后需要在Jenkins配置git 安装,路径Manage Jenkins -> Tool ->Git installations。在Path to Git executable填上服务器查到的git所在路径。
在这里插入图片描述

Node全局配置

选择node版本,写上别名,保存。创建构建项目时会用到。
在这里插入图片描述

SSH配置

配置要部署项目的服务器。准备好服务器ip,端口,账密。SSH配置路径:Manage Jenkins -> System->Publish over SSH->SSH Servers
在这里插入图片描述
在这里插入图片描述

新建构建项目

创建(New Item)

Dashboard->左侧 ->New Item(新建项目);
在这里插入图片描述

源码配置(Source Code Management)

新建成功->项目配置页(configure)->源码管理(Source Code Management)->选git,配置如下图所示;
仓库链接,就是clone代码的那个链接。
在这里插入图片描述
凭据添加方式:可以全局配置凭证,或点击配置中的添加按钮添加。
若是公开仓库,凭据(Credentials)一栏可以选无,若是私有仓库,需要先添加一个可以访问该仓库的gitee账号作为凭据。
类型选用户名密码->下方填上登录gitee的账密->保存。
在这里插入图片描述

构建触发器配置(Build Triggers)

git配置成功后,下拉到构建触发器(Build Triggers)配置项,选择Poll SCM(轮询SCM),做以下配置(每3分钟检查gitee代码是否有更新,有的话执行构建):

H/3 ****

在这里插入图片描述

知识点四
Poll SCM(轮询SCM),是指定时扫描本地代码仓库的代码是否有变更,如果代码有变更就触发项目构建。 它与定时构建(Build periodically)唯一不同的在于,只有当代码仓库变动了,才会触发构建,如果不变动,则不会触发。

日程表中*****含义:

第一个星表示分钟 取值0–59

第二个星表示小时 取值0–23

第三个星表示日 取值1-31

第四个星表示月 取值1-12

第五个星表示星期 取值0-7

<!-- 常见触发构建的时间设置 是否触发构建具体看所选的构建方式-->
H/30 ****//每30分钟构建一次
H H/2 ***//每2小时构建一次
H 8,12,22 ***//每天的8点,12点,22点,一天构建3次 (多个时间点中间用逗号隔开) 
H 12 ***//每天中午12点定时构建一次
H(0-29)/10 ****//在每个小时的前半个小时内的每10分钟构建一次
H H(9-16)/2 ** 1-5      //每个工作日上午9点到下午5点内 每两小时 构建一次
构建环境配置(Build Environment)

前端项目需要打包构建->选择Provide Node & npm bin/ folder to PATH->选择适合项目运行的node环境(前面Node全局配置过的)
在这里插入图片描述

构建与发布

配置好触发构建的节点,接下来配置构建。首先要,明确是否跨端,部署的服务器是什么操作系统,常见Windows操作系统、Linux操作系统。
构建命令运行环境如何选:
○ Windows服务器:Execute Windows batch command
○ Linux服务器:Execute shell
构建命令如下:

npm install --registry=https://registry.npm.taobao.org
npm install
npm run build

构建情景:(跨端部署,Linux服务器构建,部署到Windows服务器)
首先需要配置Linux服务器,具体参考上面步骤的SSH配置
增加构建步骤(add build step)->选Execute shell->写构建命令。

node -v
npm install --registry=https://registry.npm.taobao.org
npm install
npm run build:dev

在这里插入图片描述

增加构建后操作(Post-build Actions)->选Send build artifacts over SSH->选即将部署的服务器->做相关配置
在这里插入图片描述
Transfer Set Source filesRemove prefix ,前者的配置将整个dist文件复制,后者在复制前把dist文件删除。整个配置结合起来就是将dist文件里所有内容复制到Remote directory配置的路径下。
在这里插入图片描述
配置好以后记得应用保存。

执行构建

当所有构建项目的配置完成后,Dashboard->右侧选择所创建的项目->执行构建
点击左下角进度条可进入打印台查看构建中的详细信息。
在这里插入图片描述
耐心等待,几分钟后,项目执行成功,进入控制台打印结果也是成功。
在这里插入图片描述
---------------------------------------------------- 23-12-14 更新下面内容 --------------------------------------------------

上面的跨端部署,其实是失败的。虽然控制台打印了成功,但Exec command里的命令没有执行成功。
在这里插入图片描述
需要在控制台看到Exec command的报错,需要在配置的服务器上勾选打印选项。
在这里插入图片描述

下面我将补充一下真正构建发布成功历程。

下面统一称呼。目标路径:C:\WWW\jkbuildtest(7001)\,目标服务器根目录(ssh根目录):C:\Program Files\OpenSSH\

特别说明
1、因为ssh配置问题, Remote directory 默认的根目录是目标服务器的ssh所在的安装目录(如:C:\Program Files\OpenSSH)。
2、Exec command 这里要特别说明:直接在这里写Windows操作系统的命令是不生效的。虽然该配置的说明表示的是在目标服务器执行的命令,但应该不是我们理解的那种。
3、Exec command 中默认的根目录也是目标服务器的ssh所在的安装目录。

原本的配置想实现的效果:文件会传到 Remote directory 目标路径文件夹中。
控制台查看打印结果,文件是传输成功,但文件并不在预期文件夹里。查找一番……

知识点
Remote directory 默认的根目录是ssh所在的安装目录(如:C:\Program Files\OpenSSH)。

因为根目录不是Windows系统的根目录。所以文件ssh根目录创了相应路径。但是目标路径并非在此目录里,如下图。
在这里插入图片描述

由此想出了两个解决方案:

一、修改ssh配置的根目录。
需要修改\etc\sshd_config 配置文件中的ChrootDirectory,但这配置也会影响其它服务器的根目录配置,且在一个文档看到这样的说法。

ChrootDirectory(在 v7.7.0.0 中添加的支持)

此指令仅在 sftp 会话中受支持。 到 cmd.exe 的远程会话不遵循

ChrootDirectory

。 若要设置仅限 sftp 的 chroot 服务器,请将 ForceCommand 设置为 internal-sftp。 还可以通过实现仅允许 scp 和 sftp 的自定义 shell,来通过 chroot 设置 scp。

二、执行Windows .bat脚本。

将要执行的复制文件命令写在一个.bat脚本文件中。放在目标服务器根目录所在的文件路径下。通过Exec command,执行脚本。配置如下:

脚本命令如下:

rd/s/q C:\WWW\jkbuildtest(7001)\
xcopy /s C:\"Program Files"\OpenSSH\var\www\web\server171\data-cleaning-dev\dist C:\WWW\jkbuildtest(7001)\

在这里插入图片描述


本文转载自: https://blog.csdn.net/weixin_46653360/article/details/134882274
版权归原作者 chowhound3 所有, 如有侵权,请联系我们删除。

“Jenkins自动化构建部署前端项目(Linux+gitee)”的评论:

还没有评论