搭建Jenkins并构建项目

软件维
• 阅读 2002

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等待完成:
搭建Jenkins并构建项目

下面是完整的依赖,仅供参考: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并构建项目
第一次访问新的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>[^<]+<\/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反馈结果'

最后保存。

点赞
收藏
评论区
推荐文章
DevOpSec DevOpSec
4年前
Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!
Jenkins安装配置,项目发布、管理详解,史上最清晰,值得收藏!:一、导语二、Jenkins介绍三、基础环境准备四、Jenkins安装五、Jenkins配置六、源码构建、打包、部署、运行七、常见问题汇总八、后记九、黑色小幽默一、导语Jenk
Tommy744 Tommy744
4年前
针对开发人员的21个Jenkins替代方案
当谈到CI/CD工具时,我们都会提到Jenkins。它是构建和测试项目的超级有效工具,从而使持续不断的轻松集成成为可能。但是,Jenkins并不是唯一的CI/CD工具。我们还有其他很多选择!1.GitLab它是一个开源的Web系统,可用于将持续集成,持续部署应用到你的项目中,而无需任何第三方应用程序。它提供了友好的用户界面以及分布式版本控制
Stella981 Stella981
3年前
Jenkins部署失败后快速回滚到指定版本
  jenkins部署过程中,有时会遇到构建后项目启动失败的情况,如果情况紧急那就要快速回滚代码,手动回滚是相当的麻烦。可以用Jenkins结合Shell脚本来完成一键回滚操作。新建一个maven工程设置历史版本的构建包个数,方便本次构建失败后能回滚回去!(https://oscimg.oschina.net/oscn
Stella981 Stella981
3年前
Jenkins 自动化部署上线
转载于互联网jenkins自动化部署项目,通过jenkins部署来节省运维时间,不需要手动cp上线及版本发布!(https://oscimg.oschina.net/oscnet/fd0711489bde0b14dde0599acc4b202de78.jpg)Jenkins自动化部署上线
Stella981 Stella981
3年前
Jenkins自动从git构建Spring boot项目实践
经过三天的不断尝试,终于成功构建了项目。下面分享一下我的构建过程。系统环境:Ubuntu17,Jenkins2.6,git2.14,jdk1.8git安装sudoaddaptrepositoryppa:gitcore/ppasudoaptgetupdates
Wesley13 Wesley13
3年前
3种创建Jenkins流水线的方法
Jenkins是一个DevOps工具,可以用来自动构建、测试和交付软件代码。如果你是Jenkins的新手,本教程将帮助你理解如何使用以下方法之一创建Jenkins流水线(Pipeline):经典的Jenkins用户界面JenkinsBlueOcean用户界面,减少杂波并增加清晰度Git仓库Jenkins
Stella981 Stella981
3年前
Docker学习8
前言相信不少小伙伴之前在用docker运行jenkins容器构建的时候,发现没有python3环境遇到了不少麻烦,导致无法运行测试脚本,但不要紧,安装就好了。接下来我们说用docker运行jenkins 构建自动化测试脚本。一、jenkins新建项目1、createnewjobs:输入项目名称后,选择自由风格
Stella981 Stella981
3年前
K8S环境的Jenkin性能问题处理
环境信息在K8S环境通过helm部署了Jenkins(namespace为helmjenkins),用于日常Java项目构建:1.kubernetes:1.152.jenkins:2.190.23.helm版本:2.16.1如果您想了解helm部署Jenkins的详情,请参考《》问题描述在Jenkins任
Stella981 Stella981
3年前
Jenkins+RF持续集成测试(一) 环境搭建
通常在自动化测试中,我们需要对自动化测试用例定时构建,并生成报告并通过邮件发给指定的人。最佳工具选择莫过于Jenkins了。通过Jenkins集成robotframework插件,我们能非常方便的定时从git/svn上拉取最新的自动化测试用例,然后执行用例并把最终结果以测试报告的形式发给指定的人群。下面我就来详细为大家介绍一下Jenkins集成RF插件
Wesley13 Wesley13
3年前
01.Flink笔记
Flink开发环境部署配置Flink是一个以Java及Scala作为开发语言的开源大数据项目,代码开源在github上,并使用maven来编译和构建项目。所需工具:Java、maven、Git。本次操作是在windows环境下。一、工具安装Java配置(略)maven配置1.
Stella981 Stella981
3年前
Jenkins集群构建一个Sprintboot项目
前置准备一台Liunx主机:主机需要安装Git,JDK,Maven。我们这里是通过集群的方式到子节点去构建项目,如需添加节点,欢迎查看文章:Jenkins添加服务器节点(https://my.oschina.net/piaoxianren/blog/4272201)一个Springboot项目我在这里提供了一个简单