搭建Jenkins并构建项目

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需要的目录下,比如/usr/local/git,执行命令tar -zxvf git-2.32.0.tar.gz 将其解压。
然后配置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文件,我们通过两个命令解压:
xz -d node-v14.17.4-linux-x64.tar.xz tar -xcf node-v14.17.4-linux-x64.tar

进入到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"

  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的war包,并将其放到上一步搭建好的tomcat目录./webapp目录下。等待Jenkins解压并启动后,访问http://ip:9300/jenkins,就能进入到jenkins的页面了。效果如下图
搭建Jenkins并构建项目
文章图片

第一次访问新的Jenkins时,系统会要求使用自动生成的密码对其进行解锁。这个密码可以在tomcat输出的日志中找到,也可以在页面上提供的路径中找到。
第二步 插件选择 这时会出现一个选择题:
  1. 安装推荐插件
  2. 选择所需插件安装
    下一步就会推荐安装插件,这里我选择了后者(我第一次按照推荐来安装插件,可能是我网不好,于是第二次我就选择了自己装插件)。
搭建Jenkins并构建项目
文章图片

官方也提供了插件的查询方式,这里可以直接找到需要的插件,以及当前插件需要的其他依赖插件,非常方便
搭建Jenkins并构建项目
文章图片

或者也提供了所有插件的下载地址,这里就可以找到所有的插件。
下面贴出我安装的插件列表,只安装了汉化和maven,git等基础插件,这里只有36个。可以一次性都安装后重启,已经包含所有插件依赖关系,不需要再有额外的插件。
搭建Jenkins并构建项目
文章图片

安装完成后大概在插件管理列表中会存在大概几十个插件。
第三步 创建用户 此时我们需要创建第一个用户,不想记太多的账号密码,索性就不创建了,直接跳过到下一步。这个账号以后需要也是可以创建。这样就到了Jenkins的工作页面了。
第四步 系统管理》全局工具配置 在使用前我们还需将上几步中的maven和git等做一定的配置:
1.Maven配置:默认就好,因为我们配置交由Maven自己管理了
搭建Jenkins并构建项目
文章图片

2.JDK:新增JDK,并配置我们jdk路径
搭建Jenkins并构建项目
文章图片

3.Git:添加git,并配置git安装路径
搭建Jenkins并构建项目
文章图片

4.Maven:新增Maven,使用我们自己安装的maven
搭建Jenkins并构建项目
文章图片

最后保存。
第五步 系统管理》凭据 这个就是用来配置项目git账号,服务器账号等设计到权限的地方
搭建Jenkins并构建项目
文章图片

可以在全局新增一个
搭建Jenkins并构建项目
文章图片

其中ID和描述就是用来描述这个凭证的,随便填写
构建项目
这里先贴出来一个官方的用户手册,不明白的也可以参考这里的创建流程。
下面贴出来两个我自己使用的例子:
示例一:创建一个React工程: 1.左侧列表选择新建任务:
搭建Jenkins并构建项目
文章图片

2.接下来会出现创建项目类型:
搭建Jenkins并构建项目
文章图片

我们先择创建一个自由风格的软件项目,填写名称并确定:
3.从git上获取源码,其中Credentials是在系统管理》凭据中创建。
搭建Jenkins并构建项目
文章图片

4.打包命令,就是几个shell命令:
搭建Jenkins并构建项目
文章图片

其中的备份是通过参数化构建来实现的:
搭建Jenkins并构建项目
文章图片

这样每次构建开始前,都会有一个确认,勾选则对上一个版本做一个备份:
搭建Jenkins并构建项目
文章图片

示例二:创建一个Maven工程 1.新建任务;
2.选择创建一个Maven工程;
3.Pre Steps,这个是指构建前操作,比如项目是一个maven父子项目,我们就需要在这里配置(如果不是父子项目可忽略):搭建Jenkins并构建项目
文章图片

4.Build,配置pom文件路径,这个pom文件路径从项目根目录开始,Goals and options就是打包时的其他参数,比如我去掉了打包中的Test过程:
搭建Jenkins并构建项目
文章图片

5.Post Steps,指构建后操作,我们构建完包后可以通过shell命令将打出来的包部署。
搭建Jenkins并构建项目
文章图片

下面贴出完整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 fiecho "是否备份上个版本:$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 21echo '检查启动进程号……' pid=`pgrep -f $serverName` if [ -n "$pid" ] then echo "$serverName$pid启动成功 ^-^ " else echo "$serverName 启动失败 -_-@" fiecho '构建结束,等待Jenkins反馈结果'

【搭建Jenkins并构建项目】最后保存。

    推荐阅读