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中设置。不设置则使用默认的配置。

<localRepository>/data/maven/maven-repository</localRepository>
...
...
<mirrors>
    <mirror>
      <id>public</id>
      <mirrorOf>central</mirrorOf>
      <name>public</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
  </mirrors>

当设置完毕后,我们还需要配置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 <openssl/ssl.h>
                         ^
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

然后我们做一些简单配置

  1. 修改tomcat端口号
    修改./config/server.xml文件,将SHUTDOWN端口的8005 ,http端口的8080分别修改为9127和9300。
  2. 配置字符集(可以先不改,出现乱码再考虑)
    修改./config/server.xml文件,在上一步修改的http端口下加入配置URIEncoding="UTF-8"
<Connector port="9300" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />
  1. 配置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<workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULL_NAME}</workspaceDir>。 如果用root用户启动,则会生成在/root/.jenkins下,其他普通用户则会在/home/用户目录/.jenkins下,为了保证服务器存储,人为的指定工作目录:
/varmkdir 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输出的日志中找到,也可以在页面上提供的路径中找到。

第二步 插件选择

这时会出现一个选择题:

  1. 安装推荐插件
  2. 选择所需插件安装
    下一步就会推荐安装插件,这里我选择了后者(我第一次按照推荐来安装插件,可能是我网不好,于是第二次我就选择了自己装插件)。

1548227941-1161-2223516-33c7ded732879540.png

官方也提供了插件的查询方式,这里可以直接找到需要的插件,以及当前插件需要的其他依赖插件,非常方便
image.png
或者也提供了所有插件的下载地址,这里就可以找到所有的插件。

下面贴出我安装的插件列表,只安装了汉化和maven,git等基础插件,这里只有36个。可以一次性都安装后重启,已经包含所有插件依赖关系,不需要再有额外的插件。
image.png

安装完成后大概在插件管理列表中会存在大概几十个插件。

第三步 创建用户

此时我们需要创建第一个用户,不想记太多的账号密码,索性就不创建了,直接跳过到下一步。这个账号以后需要也是可以创建。这样就到了Jenkins的工作页面了。

第四步 系统管理》全局工具配置

在使用前我们还需将上几步中的maven和git等做一定的配置:
1.Maven配置:默认就好,因为我们配置交由Maven自己管理了
image.png
2.JDK:新增JDK,并配置我们jdk路径
image.png
3.Git:添加git,并配置git安装路径
image.png
4.Maven:新增Maven,使用我们自己安装的maven
image.png
最后保存。

第五步 系统管理》凭据

这个就是用来配置项目git账号,服务器账号等设计到权限的地方
image.png
可以在全局新增一个
image.png
其中ID和描述就是用来描述这个凭证的,随便填写

构建项目

这里先贴出来一个官方的用户手册,不明白的也可以参考这里的创建流程。
下面贴出来两个我自己使用的例子:

示例一:创建一个React工程:

1.左侧列表选择新建任务:
image.png
2.接下来会出现创建项目类型:
image.png
我们先择创建一个自由风格的软件项目,填写名称并确定:
3.从git上获取源码,其中Credentials是在系统管理》凭据中创建。
image.png
4.打包命令,就是几个shell命令:
image.png
其中的备份是通过参数化构建来实现的:
image.png
这样每次构建开始前,都会有一个确认,勾选则对上一个版本做一个备份:
image.png

示例二:创建一个Maven工程

1.新建任务;
2.选择创建一个Maven工程;
3.Pre Steps,这个是指构建前操作,比如项目是一个maven父子项目,我们就需要在这里配置(如果不是父子项目可忽略):image.png
4.Build,配置pom文件路径,这个pom文件路径从项目根目录开始,Goals and options就是打包时的其他参数,比如我去掉了打包中的Test过程:
image.png
5.Post Steps,指构建后操作,我们构建完包后可以通过shell命令将打出来的包部署。
image.png
下面贴出完整shell脚本,因为项目配置不一样,不可能拿过来就能直接用,大家还需自行修改:

#!/bin/bash
# 当前shell脚本执行结束后,jenkins会关闭所有衍生进程,这里修改jenkins构建id防止关闭启动进程
BUILD_ID="$WORKSPACE-$BUILD_NUMBER"

echo "$JOB_NAME 构建分支: $GIT_BRANCH" 

# 获取pom.xml 中的版本号,父子结构工程会获取父工程版本
# version=`awk '/<version>[^<]+<\/version>/{gsub(/<version>|<\/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反馈结果'

最后保存。


虚惊一百场
19 声望7 粉丝

1 + 1 = 2