本文讲述了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 files 与 Remove 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,执行脚本。配置如下:
脚本命令如下:文章来源:https://www.toymoban.com/news/detail-769998.html
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://www.toymoban.com/news/detail-769998.html
到了这里,关于Jenkins自动化构建部署前端项目(Linux+gitee)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!