1、Jenkins介绍
是一款开源自动化服务器,旨在自动化连续集成和交付软件所涉及的重复技术任务。 Jenkins是基于Java的,可以从Ubuntu软件包安装,也可以通过下载和运行其Web应用程序ARchive(WAR)文件进行安装 - 构成一个完整的Web应用程序的集合,该文件旨在在服务器上运行
2、开始安装(我的是Ubuntu18.04服务器)
2.1 安装Java SDK
1 apt-get update
2
3 sudo apt-get install -y openjdk-8-jdk
4
5 apt-get clean all
测试是否安装成功
1、使用javac命令,不会出现command not found错误
java -version,出现版本为java version "1.8......",具体看自己安装的版本号
echo $PATH,看看自己刚刚设置的的环境变量配置是否都正确
2.2 安装jenkins
登陆ubuntu服务器
将存储库密钥添加到系统,执行如下代码
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
添加密钥后,系统将返回ok,然后将Debian包存储库地址附加到服务器的sources.list,执行如下代码
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
前面俩个完成后,运行update,以便apt-get将使用新的库存储
sudo apt-get update
最后安装Jenkins及其依赖
sudo apt-get install -y jenkins
以上都完成后我们启动jenkins
service jenkins start
systemctl start jenkins 或者 service jenkins start
由于systemctl不显示输出,我们将其使用status命令验证是否启动成功
sudo systemctl status jenkins
启动成功后如下图
然后我们打开浏览器访问http://你的服务器ip:8080/,打开后如下图
在终端我们使用cat命令显示密码,执行代码
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
我们将从终端复制32个字符的字母数字密码,并将其粘贴到“管理员密码”字段中,然后单击“继续”。 下一个屏幕提供安装建议的插件或选择特定插件的选项
点击安装推荐的插件,开始安装
安装完成后创建管理员用户
创建完成用户后,确认实例配置
点击开始使用Jenkins
Ok,Jenkins安装成功,默认端口为8080,如果端口占用,需要修改一下
1、检查
2、修改
3、重启jenkins
sudo systemctl restart jenkins
三、Jenkins实现自动化部署
实现目标是: 我们本地写好项目,发起git提交到github或者gitlaib,剩下的单元测试,打包构建,代码部署邮件提醒等
3.1、准备
首先我们随便准备一个项目,在git仓库新建一个项目,然后把本地项目提交上去
3.2 在jenkins中绑定github
我们现在要实现这么一个功能,当我们本地项目往github或者gitlab远程仓库push我们代码的时候,jenkins就能知道我们提交了代码,基本原理是我们在远程仓库上需要配置一个jenkins服务的接口地址,当本地向远程仓库发起push时候,远程仓库会向配置Jenkins服务器的接口地址发起一个带参数的请求,当jenkins收到后开始工作。
配置步骤如下:
Github配置
1、在github上获取token的值,需要一个对项目写权限的账户
2、实现自动构建,Jenkins需要获得远程代码仓库github的读取权
点击右上角的
创建成功会生成一个token的值如下
保存好这个token,后边需要用到
3、Github webhooks配置
进入Github上指定的项目 --> setting -> WebHooks --> add webhook, 如下图所示:
完成后点击add webhooks按钮,即可创建完成
Jenkins的github配置
4、安装github Plugin
点击
点击下面的
5、配置github Plugin
Manage Jenkins -> Configure System -> Github -> 点击添加Github服务器, 如下图所示:
我们之前在github上生成的token,在如上配置选择类型为Sercret text,在secret粘贴之前的token,ID随便写,可以不填,最后点击按钮回到主页,在凭据中选择我们刚才创建的凭据,然后点击连接测试,如果成功如下图,没有成功需要返回上述步骤重新配置。点击保存,基础配置就完成了。
6、Jenkins中创建任务
6.1、点击创建一个新任务,如下图:
输入一个任务名称,比如叫testJenkins,然后选择第一个即可
点击确定按钮进入下一步
点击确定按钮进入下一步
如上选择github,填写项目的URL,即我们github上的项目地址
6.2、源码配置管理配置
打开刚刚我们创建的任务,切换到
6.3、构建触发器
6.4、构建环境
其它暂时不用配置,回到列表页,看到基本效果如下图所示,现在我们将本地代码在push一遍
如上我们可看到,我们每次代码push的时候,Jenkins会自动帮我们构建一次,会有几秒的延迟
我们可以在控制台看输出信息
我们可以看到我们的testKenkins的项目中有github上的项目中的所有文件,如下图
以上只是简单的使用github的push命令,在Jenkins构建我们的代码,但我们希望的是,我们把项目推到github,Jenkins自动帮助我们打包,就行webpack那样,调用npm run build打包到dist文件夹,然后把dist的推到服务器上。下面我们就来实现自动化构建
6.5、自动化构建
为了能在Jenkins自动打包构建,首先我们需要安装依赖包,使用命令nom istall,最后使用npm run build构建文件
我们想要在Jenkins执行npm命令,首先需要在Jenkins里边配置node环境,安装插件
6.5.1、安装nodeJs Plugin
在插件管理界面搜索NodeJS,找到后安装,重启,如下图
6.5.2安装NodeJs
Manage Jenkins -> Global Tool Configuration -> NodeJs(点击新增NodeJS按钮) 如下图所示:
点击保存按钮即可。
6.5.3在构建坏境配置下安装nodeJs
构建环境勾选
每次build,都会先执行构建坏境。
6.5.4 构建
我们现在可以把我们的打包命令放到构建中了,在构建过程中会执行该命令进行打包。如下命令:
npm config set registry http://registry.npm.taobao.org/ && npm install && rm -rf dist && npm run build
如下所示:
然后点击保存按钮。
此时我在本地项目改下代码,推送到github,再看看Jenkins中如下图所示
等构建完成后,命令行最后一行是Finished的状态如果是SUCCESS,则证明执行的任务顺利完成了。如果是FAILURE则证明中间有重大错误导致任务失败。UNSTABLE代表有些小问题,但是不阻碍任务执行。
解决的办法在命令行中运行命令:
sudo npm -g install phantomjs-prebuilt@2.1.16 --ignore-script
稍等一会儿,我们可以看到构建成功信息了,如下图所示:
然后我们点击项目的工作空间,将会发现多了dist和node_modules两个文件夹了。如下图所示:
如上我们的代码已经自动构建完成了,但是我们目前还没有部署到某个服务器上去,因此我们现在要实现这么一个功能。
四、实现自动化部署
现在Jenkins上安装一个Public Over SSH插件,我们将会通过这个工具来实现服务器部署功能。
4.1安装插件
点击
4.2 配置
点击
上图是我jenkins配置,下图为网络博客的一张配置图
配置项的含义如下
Passphrase: 密码(key的密码,如果没有的话就不填写)
Path to key: key文件(私钥)的路径
SSH Server Name: 标示的名称(随便写)
Hostname: 需要链接ssh的主机名或ip地址,建议写服务器ip
Username: 用户名
Remote Directory: 远程目录(服务器文件目录: 比如 /usr/local/nginx/pcweb/)
如上填写完成后,点击保存按钮即可,我本地电脑没有对应的服务器,因此暂时不测试了。
配置完成后,我们需要到我们创建的任务,点击构建项tab,增加2行代码,如下:
cd dist && tar -zcvf dist.tar.gz *
含义是:进入dist文件夹内,把所有的文件打包成一个文件。如下所示:
最后点击保存按钮,选择我们在本地修改完代码,直接git push,在Jenkins会自动构建打包,并且会自动发布到服务器上。
等构建完成后,命令行最后一行是Finished的状态如果是SUCCESS,则证明执行的任务顺利完成了。如果是FAILURE则证明中间有重大错误导致任务失败。UNSTABLE代表有些小问题,但是不阻碍任务执行。