阿里云服务器(2、jenkins实现前端自动化部署)

先直接怼成品

工程项目开源在GitHub上,平时迭代提交一些功能后,点击对应的Jenkins工程一键构建,即完成发布。是不是听了后感觉很高大上!

听起来是不是感觉很省事,平时我们要发布工程代码到自己的服务器上,像那种(vue/angular/react)项目的话,总是要跑很多npm命令,然后打包啊,移动啊,解压啊。想想每次都这样是不是很浪费时间,要是一个工程build10分钟,那你还要时刻看着,以便接着运行命令。

如何解决问题呢?接下来我们进入正文。

简介

Jenkins是一款开源自动化服务器,旨在自动化连续集成和交付软件所涉及的重复技术任务。 Jenkins是基于Java的,可以从Ubuntu软件包安装,也可以通过下载和运行其Web应用程序ARchive(WAR)文件进行安装 - 构成一个完整的Web应用程序的集合,该文件旨在在服务器上运行。

准备工作

GitHub账号方便Jenkins直接从平台上拉取代码,然后做一系列操作,云服务器用于安装Jenkins不用每次用都需要启动,小编的为阿里云Ubuntu 16.04 64位,没有对号入座的请酌情参考。在配置Jenkins前需要先配置下nginx,需要的请参考我的文档 阿里云服务器(1、nginx配置实战)

先安装java

Jenkins基于Java, 所以需要先安装java。到官网下载即可jdk-8u191-linux-x64.tar.gz

我一般习惯把安装的软件放到目录/usr/local下。下载上传好后,解压java到相应目录

1
tar -zxvf jdk-8u65-linux-x64.tar.gz /usr/local

编辑环境变量,在/etc/profile文件中添加环境变量,Linux的所有用户都可以使用。

1
vim /etc/profile

在文件最后添加内容如下:

1
2
3
export JAVA_HOME=/usr/local/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jart

到此,java已安装完成,检查时候出现如下图即安装完成

后安装Jenkins

包含在默认Ubuntu软件包中的Jenkins版本往往落后于项目本身的最新版本。 为了利用最新的修复和功能,我们将使用项目维护的软件包来安装Jenkins

首先,我们将存储库密钥添加到系统。

1
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -

添加密钥后,系统将返回 OK 。 接下来,我们将Debian包存储库地址附加到服务器的sources.list :

1
echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list

当这两个都到位时,我们将运行update ,以便apt-get将使用新的存储库:

1
sudo apt-get update

最后,我们将安装Jenkins及其依赖项

1
sudo apt-get install jenkins

启动Jenkins

使用systemctl我们将启动Jenkins

1
sudo systemctl start jenkins

由于systemctl不显示输出,我们将使用其status命令来验证它是否成功启动:

1
sudo systemctl status jenkins

如果一切顺利,输出的开始应显示服务处于活动状态。

注意:我在安装的过程中遇到了java路径找不到的问题,解决方案是建立一个软连接即可,请参考 ERROR: No Java executable found in current PATH

设置防火墙(ufw)

ufw是一个主机端的iptables类防火墙配置工具 安装的话,ubuntu很友好,一般都会给安装命令的

1
sudo apt-get install ufw

开启,建议默认关闭所有外部访问

1
2
sudo ufw enable
sudo ufw default deny

默认情况下,Jenkins在端口8080上运行,因此我们将使用ufw打开该端口:(自定义的端口需另外开启)

1
sudo ufw allow 8080

查看防火墙状态

1
sudo ufw status

注意:既然开启了防火墙,那不要吧自己给墙了,比如ssh,nginx,http,https等这些端口可别忘记打开了。

可以使用sudo netstat -plntu 查看端口占用情况

1
sudo netstat -plntu

然后根据端口占用情况按需开启防火墙

1
2
3
4
5
sudo ufw allow 80  #允许外部访问80端口(nginx默认端口)
sudo ufw allow ssh #ssh默认端口
sudo ufw allow http #http默认端口
sudo ufw allow https #https默认端口
sudo ufw allow 9180 #Jenkins自定义端口端口

自定义Jenkins端口

Jenkins 默认端口是8080,在配置文件/etc/default/jenkins 中定义。

1
2
3
4
# UMASK=027

# port for HTTP connector (default 8080; disable with -1)
HTTP_PORT=9180

自定义好端口后,需要重启下Jenkins,打开http:// ip_address_or_domain_name :8080应该看到”解锁Jenkins“屏幕

1
2
3
sudo systemctl start jenkins #启动
sudo systemctl status jenkins #查看
sudo systemctl restart jenkins #重启

配置Jenkins

Jenkins安装完成后,打开http:// ip_address_or_domain_name :8080应该看到”解锁Jenkins“屏幕如下图:

按照提示 输入如下命令获取到密码

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

将获取的密码字符串粘贴到password字段中,点击继续,跳转到插件安装页面

如果是Jenkins小白的话,还是建议用推荐的方式安装插件,安装过程中需要比较长的一段时间。

安装完成后,系统将提示您设置第一个管理用户。 可以跳过此步骤,并使用上面使用的初始密码作为admin继续,但是我们将花一点时间创建用户。

注意:默认Jenkins服务器未加密,因此使用此表单提交的数据不受保护。 当您准备好使用此安装时,请按照指南如何使用Nginx反向代理将SSL配置为Jenkins 这将保护用户凭据和关于通过Web界面发送的构建的信息。

注意:小编在安装Jenkins后,有出现过登录页白屏的情况,解决方案如下 jenkins配置权限不对导致无法登陆或者空白页面解决办法

1
2
3
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
<denyAnonymousReadAccess>true</denyAnonymousReadAccess>
</authorizationStrategy>

用Jenkins自动化部署一个GitHub工程

登录Jenkins后,我们先新建一个任务

输入一个任务名称,选择构建一个自由风格的软件项目

配置过程中可适当写点描述,源码管理选择git,然后贴上你GitHub上对应要构建的仓库克隆链接,可对应的分支。如下图:

在构建里面输入你拉取代码到Jenkins工作环境后,需要执行的一些命令行,如npm install,build等。

因为我是一个react工程,所以我先执行npm install,后打包构建,最后移到我服务器的根目录下面,即完成发布。命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
echo 'check project path'
pwd
ls
echo 'check npm && node version'
npm --version
node --version
echo 'start npm install'
npm install
echo 'start build project'
npm run build-prod
tar czvf www.tar.gz ./www/*
echo 'delete dist and cache-loader'
rm -rf www/
rm -rf .cache-loader/
mv -f www.tar.gz /usr/share/nginx/html/pc
cd /usr/share/nginx/html/pc
echo 'delete old dist'
rm -rf www/
tar -xzvf www.tar.gz
rm -rf www.tar.gz

构建完成后,显示蓝色即为构建成功,可以选择具体一次的构建,里面还可以看构建日志

注意:一个工程首次构建的话,为了保险起见,把工程clone下来后,先在工程对应的文件下,把需要执行的命令跑一遍,一步步测试成功后,在贴到Jenkins里面一键构建。

默认Jenkins 各个工程路径路径为

1
cd /var/lib/jenkins/workspace/

默认Jenkins 各个工程build详细结果的路径为

1
cd /var/lib/jenkins/jobs/

其他构建场景

Jenkins比较常见的除了构建自由风格工程外,还可以构建一条pipeline(中文名:流水线)

新建任务的时候,选择pipeline,再选择pipeline script,用pipeline语法编辑每个管道要执行的步骤即可,如图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
pipeline{
agent any
stages {
stage('Build') {
steps{
echo 'This is a build step'
}
}
stage('Test') {
steps{
echo 'This is a test step'
}
}
stage('Deploy') {
steps{
echo 'This is a deploy step'
}
}
}
}

这样构建完后,构建步骤一目了然

小编后续讲发布一篇在服务器搭建gitlab的文档,那时可以选择用pipeline构建自己的gitlab工程。

遇到的问题及解决方案

0%