Jenkins是个自动化构建部署工具。不需要我们在使用原始的部署手段,极大的缩短了维护成本。
下面简要说一下自己使用的过程构建的maven项目和react项目
一.准备环境
Jenkins既然是做为构建部署工具,首先就需要拿到我们的源码,其次再做编译打包,最后放到我们的服务器目录下,启动。那么就需要我们开发时用到的各种工具,比如jdk,maven,git,nodejs等,有的项目可能还会涉及到Python,所以我们还需要安装这些工具及环境。
jdk安装
在线下载:
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
手动下载及安装:
官网下载一个jdk8(当然别的版本也可以),然后将jdk-8u131-linux-x64.tar.gz
放到我们需要的目录下,比如/usr/local/java/
,使用命令tar -zxvf jdk-8u131-linux-x64.tar.gz
将其解压。
然后需要配置java的环境变量,执行 vim /etc/profile
命令并在文件最后加上如下配置:
# Java 8u131 environment
export JAVA_HOME=/usr/local/java/jdk1.8.0_131
export JRE_HOME=/usr/local/java/jdk1.8.0_131/jre
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
保存退出,最后确保修改的/etc/profile
文件生效,并用命令验证安装成功
source /etc/profile
java -version
maven 安装
在线下载:
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
手动下载及安装:
在官网上下载了tar.gz
包,这里不建议使用最新的3.8.1
版本,而是选择了3.6.3
(点此下载)这个版本(3.8.1对https敏感,如果是http,则会出现 downloading from maven-default-http-blocker: http://0.0.0.0/xxx
这种问题)。
将我们下载的apache-maven-3.6.3.tar.gz
放到目录下,比如 /usr/local/maven
。
cd /usr/local/maven/
tar -zxvf apache-maven-3.6.3.tar.gz
这里需要配置maven的本地仓库地址以及镜像地址,这个都是在apache-maven-3.6.3/config/setting.xml
中设置。不设置则使用默认的配置。
/data/maven/maven-repository
...
...
public
central
public
http://maven.aliyun.com/nexus/content/groups/public/
当设置完毕后,我们还需要配置maven的环境变量,在/etc/profile
文件末尾加上
# Maven
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
export PATH=${PATH}:${MAVEN_HOME}/bin
保存退出,最后确保修改的/etc/profile
文件生效,并用命令验证安装成功
source /etc/profile
mvn -v
git安装
在线下载:
wget https://www.kernel.org/pub/software/scm/git/git-2.32.0.tar.gz
手动下载及安装:
官网找到linux版本的git,将其下载并放到linux需要的目录下,比如/opt/git
,执行命令tar -zxvf git-2.32.0.tar.gz
将其解压。进入git-2.32.0
目录,使用命令make prefix=/usr/local/git all
等待编译。
如果出现下面错误:
[root@hdp002 git-2.32.0]# make prefix=/usr/local/git all
make: curl-config: Command not found
* new build flags
CC fuzz-commit-graph.o
In file included from commit-graph.h:4:0,
from fuzz-commit-graph.c:1:
git-compat-util.h:306:25: fatal error: openssl/ssl.h: No such file or directory
#include
^
compilation terminated.
make: *** [fuzz-commit-graph.o] Error 1
则说明缺少编译所需的依赖,比如此处我缺少openssl
的依赖,所以执行了yum install curl-devel openssl-devel
,安装完成后如下图,输入y
等待完成:
下面是完整的依赖,仅供参考:yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
。
依赖安装完成后:
再次执行 make prefix=/usr/local/git all
,等待编译完成;
然后执行make prefix=/usr/local/git install
安装
最后配置git的环境变量,这一步与配置jdk
一样,需要在 vim /etc/profile
文件的末尾加上如下内容:
# Git 2.32.0
export GIT_PATH=/usr/local/git/bin
export PATH=${PATH}:${GIT_PATH}
保存退出,最后确保修改的/etc/profile
文件生效,并用命令验证安装成功
source /etc/profile
git -v
nodeJS安装
在线下载:
wget http://nodejs.org/dist/v14.17.4/node-v14.17.4.tar.gz
当然也有人用上一步搭建好的git
来下载的,这里就不做说明了。
手动下载及安装:
官网下载LTS
版本,放到服务器比如/usr/local/nodejs
下,可以看到是一个tar.xz
文件,我们通过命令解压:
tar -xf node-v14.17.4-linux-x64.tar.xz
进入到node-v14.17.4-linux-x64目录下 执行./bin/node -v
,能正确得到版本号即可
接下来我们需要配置一个软连接使node环境生效:
ln -s /usr/local/nodejs/node-v14.17.4-linux-x64/bin/npm /usr/local/bin/
ln -s /usr/local/nodejs/node-v14.17.4-linux-x64/bin/node /usr/local/bin/
最后命令验证:
node -v
Tomcat 安装
Tomcat在我们的系统中是作为Jenkins的服务容器
在线下载:
wegt https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.69/bin/apache-tomcat-8.5.69.tar.gz
手动下载及安装:
官网中找到左侧的Download
,选择自己需要的版本进行下载,我这里下载了8.5.69这个版本,然后将tar.gz
放到需要的目录下,比如 /opt/software/tomcat/
。并将其解压:
tar -zxvf apache-tomcat-8.5.69.tar.gz
然后我们做一些简单配置
- 修改
tomcat
端口号
修改./config/server.xml
文件,将SHUTDOWN
端口的8005 ,http
端口的8080分别修改为9127和9300。 - 配置字符集(可以先不改,出现乱码再考虑)
修改./config/server.xml
文件,在上一步修改的http
端口下加入配置URIEncoding="UTF-8"
- 配置
tomcat
内存(可以先不改,出现性能问题再考虑)
修改./bin/catalina.sh
文件,可以在文件第二行加入下面代码(这里内存大小按照实际需求调整)
JAVA_OPTS="-server -Xms128m -Xmx256m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m"
最后我们启动tomcat
,进入 ./config/bin
下,执行命令 ./start.sh
,会在./logs/
下生成Catalout.log
文件,我们再访问http://ip:9300
就可以看到tomcat
的页面了
二.Jenkins启动配置
配置工作目录
jenkins工作目录会随着构建项目的增多而增大,默认的工作路径会在工作目录下的config.xml
中
。 如果用root用户启动,则会生成在/root/.jenkins
下,其他普通用户则会在/home/用户目录/.jenkins
下,为了保证服务器存储,人为的指定工作目录:
在/var
下mkdir jenkins_home
(这个路径可以按照自己的机器来,比如/data/jenkins
),其次在/etc/profile
中加入export JENKINS_HOME=/var/jenkins_home
,保存后用source
命令生效。
第一步 启动
官网下载jenkins
的war包(此处使用2.295版本),并将其放到上一步搭建好的tomcat目录./webapp
目录下。等待Jenkins
解压并启动后,访问http://ip:9300/jenkins
,就能进入到jenkins的页面了。效果如下图
第一次访问新的Jenkins时,系统会要求使用自动生成的密码对其进行解锁。这个密码可以在tomcat输出的日志中找到,也可以在页面上提供的路径中找到。
第二步 插件选择
这时会出现一个选择题:
- 安装推荐插件
- 选择所需插件安装
下一步就会推荐安装插件,这里我选择了后者(我第一次按照推荐来安装插件,可能是我网不好,于是第二次我就选择了自己装插件)。
官方也提供了插件的查询方式,这里可以直接找到需要的插件,以及当前插件需要的其他依赖插件,非常方便
或者也提供了所有插件的下载地址,这里就可以找到所有的插件。
下面贴出我安装的插件列表,只安装了汉化和maven,git等基础插件,这里只有36个。可以一次性都安装后重启,已经包含所有插件依赖关系,不需要再有额外的插件。
安装完成后大概在插件管理列表中会存在大概几十个插件。
第三步 创建用户
此时我们需要创建第一个用户,不想记太多的账号密码,索性就不创建了,直接跳过到下一步。这个账号以后需要也是可以创建。这样就到了Jenkins
的工作页面了。
第四步 系统管理》全局工具配置
在使用前我们还需将上几步中的maven和git等做一定的配置:
1.Maven配置:默认就好,因为我们配置交由Maven自己管理了
2.JDK:新增JDK,并配置我们jdk路径
3.Git:添加git,并配置git安装路径
4.Maven:新增Maven,使用我们自己安装的maven
最后保存。
第五步 系统管理》凭据
这个就是用来配置项目git账号,服务器账号等设计到权限的地方
可以在全局新增一个
其中ID和描述就是用来描述这个凭证的,随便填写
构建项目
这里先贴出来一个官方的用户手册,不明白的也可以参考这里的创建流程。
下面贴出来两个我自己使用的例子:
示例一:创建一个React工程:
1.左侧列表选择新建任务:
2.接下来会出现创建项目类型:
我们先择创建一个自由风格的软件项目,填写名称并确定:
3.从git上获取源码,其中Credentials是在系统管理》凭据
中创建。
4.打包命令,就是几个shell命令:
其中的备份是通过参数化构建来实现的:
这样每次构建开始前,都会有一个确认,勾选则对上一个版本做一个备份:
示例二:创建一个Maven工程
1.新建任务;
2.选择创建一个Maven工程;
3.Pre Steps,这个是指构建前操作,比如项目是一个maven父子项目,我们就需要在这里配置(如果不是父子项目可忽略):
4.Build,配置pom文件路径,这个pom文件路径从项目根目录开始,Goals and options就是打包时的其他参数,比如我去掉了打包中的Test过程:
5.Post Steps,指构建后操作,我们构建完包后可以通过shell命令将打出来的包部署。
下面贴出完整shell脚本,因为项目配置不一样,不可能拿过来就能直接用,大家还需自行修改:
#!/bin/bash
# 当前shell脚本执行结束后,jenkins会关闭所有衍生进程,这里修改jenkins构建id防止关闭启动进程
BUILD_ID="$WORKSPACE-$BUILD_NUMBER"
echo "$JOB_NAME 构建分支: $GIT_BRANCH"
# 获取pom.xml 中的版本号,父子结构工程会获取父工程版本
# version=`awk '/[^<]+<\/version>/{gsub(/|<\/version>/,"",$1);print $1;exit;}' pom.xml`
# echo "构建版本: $version"
# 子工程路径(针对父子工程)
serverPath="xxx"
# 服务名
serverName="xxx-SNAPSHOT.jar"
# 服务部署路径
basePath="/data/xxx/"
# 日志路径
logPath="logs/xxx-debug.log"
echo '检查之前的进程……'
oldPid=`pgrep -f $serverName`
if [ -n "$oldPid" ]
then
echo '停止之前的进程……'
kill -9 $oldPid
fi
echo "是否备份上个版本:$backup"
if [[ -f "$basePath/server/$serverName" ]] && [[ $backup == 'true' ]]; then
cd $basePath/server/
bakJar="$serverName.bak-$[$BUILD_NUMBER - 1]"
cp $serverName $bakJar
echo "备份上个版本到: $basePath/server/$bakJar"
fi
# maven工程瘦身后将第三方依赖包提取出来
echo '复制新lib……'
cd $WORKSPACE/$serverPath/target/lib/
cp *.jar $basePath/lib/
# 将打好的包放到指定的启动位置
echo '复制新jar……'
cd $WORKSPACE/$serverPath/target/
cp $serverName $basePath/server/
# 这里简单写个启动参数,并将日志写到对应的路径中去,或者项目中已经配置好了日志路径,则后面就不需要了
echo '启动服务中……'
nohup java -jar -Xms256m -Xmx512m $basePath/server/$serverName > $basePath/$logPath &
# 建议使用脚本启动,毕竟还是要规范
#cd $basePath/bin/
#./start-xxx.sh
# 等待服务启动,单位秒
sleep 21
echo '检查启动进程号……'
pid=`pgrep -f $serverName`
if [ -n "$pid" ]
then
echo "$serverName $pid 启动成功 ^-^ "
else
echo "$serverName 启动失败 -_-@"
fi
echo '构建结束,等待Jenkins反馈结果'
最后保存。