使用jenkins+svn自动部署java/vue项目

之前发布代码需要每次本地打包–>发到服务器–>重启tomcat等一系列操作,服务器多了会很繁琐,使用jenkins可以自动部署和统一管理,解放人力,挤出很多喝茶时间。

1、下载jenkins.war
官网地址 http://jenkins-ci.org/
下载最新版本
http://mirrors.jenkins-ci.org…

2、把下载的war包放到到服务器tomcat的webapps目录下,启动tomcat
3、启动成功后log会打印一个UUID密码,复制,登陆时用
4、输入tomact地址,进入jenkins首页,会提示自动安装需要的插件(如果不能在线安装,需要去自己下载之后上传
插件下载地址 http://updates.jenkins-ci.org…

5、创建项目
  
首页点击新建item

未分类

创建一个自由风格项目,自定义一个名称projectName,确认

未分类

6、配置svn,点击add 添加自己的svn账户

未分类

7、配置触发器(指定时间自动部署)

不需要自动触发的同学可略过此步骤,之后手动点击立即构建按钮即可
05 10 * * * 为cron表达式,表示每天上午10:05

未分类

8、设置execute shell(部署时执行的脚本)

这里用java项目举例

BUILD_ID=DONTKILLME
# ProjectName是刚才**第5步**中填入的名称,jenkins默认工作空间为/root/.jenkins/workspace
cd /root/.jenkins/workspace/projectName/
# 将代码打包
mvn package
# 将打包后的代码移到服务器的tomcat目录下,这里我自己写了一个deploy.sh去处理copy-解压-备份-重启tomcat等一系列操作
cd /root/.jenkins/workspace/projectName/target
mv projectName.war /home/shibo && deploy.sh

以上shell脚本只是举例,具体可根据自己需求更改,比如vue的话就将mvn package改为npm run build……

到这就可以保存了,然后测试一下是否可以正常使用。首页点击制定项目下三角,点击立即构建即可。

未分类

下面是我在搭建的时候遇到的一些问题,仅供参考:
1、第一次登录后下线,第二次不能用user账户登陆
解决方法:去/root/.jenkins/secrets下找到initialAdminPassword ,复制密码,用admin登陆
2、maven分布式子项目没有web.xml,导致mvn打包报错
解决方法:在pom.xml中添加

<properties>
    <failOnMissingWebXml>false</failOnMissingWebXml>
</properties>

3、execute shell中执行deploy.sh脚本时,有用到shutdown.sh和startup.sh两个命令,
发现tomcat关闭后,startup不能自动启动
原因是execute会自动kill掉tomcat
解决方法:在execute shell第一行添加BUILD_ID=DONTKILLME
4、execute shell时,有时有一些不是很重要的脚本命令出错,我们需要忽略他们,继续执行,
需要点开 高级–>设置Exit code to set build unstable = 1

Jenkins不同job之间依赖关系的两种配置方式

项目之间总有依赖,比如A Job执行完执行B Job,如下图所示,如何建立依赖呢?

未分类

配置上游

我们通常喜欢配置上游依赖,在B中配置

未分类

配置如下信息。选择在其他项目构建完成后进行构建:
Project to watch:依赖的项目名称
Trigger only if build is stable:只有在A项目构建文档后进行构建,过滤条件。

这样我们执行A项目构建,紧接着B项目也会构建。

未分类

配置下游

现在把上面的B job的配置删除了,我们在A中配置它的下游。

未分类

上面的配置下游项目变为了B,其他都一样。然后我们执行A构建,B也会在A构建完成后,进行构建。

未分类

Done!

Jenkins之配置Maven和JDK-yellowcong

系统管理->Global Tool Configuration

未分类

1、配置jdk

#获取到服务器上JAVA_HOME配置的地址
echo $JAVA_HOME

未分类

设置到Jenkins上

未分类

2、配置Maven

echo $M2_HOME
#一般都放到usr/local目录下
#/usr/local/maven/apache-maven-3.5.0

Maven的HOME路径

未分类

路径配置上,完事

未分类

3、安装Maven插件

Maven Integration Plugin 这个插件

未分类

点击直接安装后,结果看到,这个地方有一堆插件,等待这安装,排着队呢

未分类

要是失败了,就会变成红色,这为啥失败,还是国内的网络问题

未分类

全部都挂掉了,这是够了。。

未分类

4、手动安装插件

首先我到网址
http://updates.jenkins-ci.org/download/plugins/
http://mirrors.jenkins-ci.org
中下载了下面几个插件: 所有的插件是以hpi 结尾的,比如 maven-plugin.hpi,这个实在是太坑了网络问题,这个是大坑。

未分类

需要下载依赖包和自己需要安装的包,这个是Maven 3.0的插件

未分类

在插件管理项目下,高级选项,可以直接上传插件

未分类

Gitlab利用Webhook实现Push代码后的jenkins自动构建

之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台。通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布。这种方式每次在发版的时候,需要人工去执行jenkins上的构建动作,有时显得过于繁琐。于是就想到了Gitlab的Webhook功能,通过Webhook的相关设置,可以实现代码Push后,自动去触发jenkins上的构建动作,这样就不需要人工干预去执行发版操作了。设置如下:

1)Jenkins上的操作

通常,jenkins在项目配置时是可以配置远程构建触发器,设置好jenkins的回调url后就可以让jenkins进行自动构建。这就需要先下载Gitlab Hook Plugin 插件。登陆Jenkins,分别点击”系统管理”->”插件管理”->”可选插件”,选择Gitlab Hook Plugin

未分类

然后构建相应的项目工程,比如下面的test-wx(下面最关键的是第2步中查看url,然后用这个url回调地址去Gitlab的webhook上添加)
a)先设置代码的git下载路径,这里通过ssh方式(需要提前将Jenkins本机的key添加到Gitlab上)

未分类

b)查看jenkin生成回调地址。在任务重构建触发器下获取回调URL。下面的URL那一行只有Gitlab Hook Plugin插件下载成功后才能显示。

未分类

c)然后设置代码发布的推送脚本

未分类

2)Gitlab上的操作

登陆Gitlab上的testwx3项目中,添加webhook(用上面Jenkins中生成的回调url)

未分类

然后点击这个项目的”Settings”

未分类

未分类

添加成功后,点击此webhook后面的test进行测试

未分类

如果返回Hook successfully executed.表示配置成功。
这样,下次push代码后,就会自动触发jenkins上相关的构建工程进行自动发布了!无需人工干预~

未分类


如上设置后,比如在gitlab的testwx3项目代码库中push一个test.txt文件,然后测试下是否自动发布了

未分类

然后去Jenkins上查看,如下发现已经自动发布了!

未分类

最后去目标机器192.168.1.19的/tmp/testwx目录下发现test.txt文件已经发布过来了~

未分类

适用于DevOps的10款最佳Jenkins插件

目前 Jenkins 有超过 1500 个插件,用于支撑整个持续集成流程。由于插件数量众多,要选择一些合适的 Jenkins 插件会比较困难,本文介绍了一些比较有用的 Jenkins 插件,能够提升开发者效率。
尽管目前在 CI/CD 领域有着众多的平台,Jenkins 一直是最著名的持续集成平台之一。虽然它经历了和 Oracle 的争斗,最终从之前的 Hudson 单独分离出来,但是凭借社区和大公司的支持,目前 Jenkins 有超过 1500 个插件,用于支撑整个持续集成流程。
不过由于插件数量众多,要选择一些合适的 Jenkins 插件会比较困难,本文介绍了一些比较有用的 Jenkins 插件,能够提升开发者效率。

Job DSL Plugin

参考链接:https://github.com/jenkinsci/job-dsl-plugin
对于很多开发者来说,不同的仓库和项目分支都需要去 Jenkins 上重新创建任务。这是一个重复且单调的工作,对于开发者来说非常不友好。
Jenkins Job DSL Plugin 可以让开发者通过 Groovy 脚本来定义和配置任务,随后插件会通过执行这些脚本来维护 Jenkins 任务。这样开发团队可以定制自己的模板文件,通过领域特定语言(Domain Specific Language,DSL)直接定义和创建任务。

Job Generator Plugin

参考链接:https://wiki.jenkins.io/display/JENKINS/Job+Generator+Plugin
和 Job DSL Plugin 类似,Job Generator Plugin 也是用于快速创建任务。对于大团队来说,整个持续集成流程应该类似,不同的项目的区别主要就是代码分支等。该插件可以让团队的配置管理员为整个团队定义一个参数化的模板,项目开发人员可以通过这个模板快速的在 Jenkins 上创建出任务。
该插件和 Job DSL 插件的最大区别是使用者无需了解 Groovy。

Performance Plugin

参考链接:https://plugins.jenkins.io/performance
该插件可以读取和解析测试框架输出的报告,并且在 Jenkins 上绘制性能和稳定性相关的图表。Performance Plugin 支持的测试框架有 JUnit、JMeter, Twitter 的 Lago 和 Taurus。下图是该插件输出的示例图:

未分类

Gitlab Merge Request Builder Plugin

参考链接:https://github.com/timols/jenkins-gitlab-merge-request-builder-plugin
Gitlab Merge Request Builder Plugin 可以方便的自动发起代码审查,它在创建 pull request 的时候,会自动带上关联任务的运行结果,以方便代码审查着确认改动的正确性。
同时,这款插件还支持自动合并,既在代码审查通过后自动合并该 pull request 内容。

JIRA Plugin

参考链接:https://plugins.jenkins.io/jira
JIRA Plugin 可以让 Jenkins 任务和 JIRA 集成起来,这样项目管理者可以通过 JIRA 了解项目进度,开发者也可以通过该插件直接更改 JIRA 上的 issue 状态。

Kubernetes Plugin

参考链接:https://github.com/jenkinsci/kubernetes-plugin
和最近大热的容器编排框架 Kubernetes 集成当然不能落下了。另外,Jenkins 对执行机的管理一直比较弱,无法做到快速的扩容和缩容。Kubernetes Plugin 通过引入 Kubernetes 的容器编排能力,让 Jenkins 执行机运行在 Kubernetes 环境中。

Build Pipeline plugin

参考链接:https://github.com/jenkinsci/build-pipeline-plugin
对一个系统的持续集成会包含很多个方面,如果将它们都杂糅在一个 Jenkins 任务中,会提高排查成本,也不利于整个持续集成的运作。Build Pipeline plugin 可以让项目管理员针对系统持续集成步骤设置一系列关联的任务,任务之间可以设置不同的触发条件,以确认何时需要人工介入。该插件可以让整个持续集成流程变得非常直观:

未分类

SCM Sync Configuration Plugin

参考链接:https://plugins.jenkins.io/scm-sync-configuration
对于项目管理人员来说,项目配置的丢失和代码丢失一样是非常危险的。对于代码我们有代码仓库进行保存,对于配置也需要能够备份和版本管理。SCM Sync Configuration Plugin 可以自动将 Jenkins 任务配置同步到版本管理系统中。另外,该插件还可以跟踪配置的变更情况,让项目管理人员能够清晰的了解任务的修改情况。

Jenkins Maven plugin

参考链接:https://plugins.jenkins.io/maven-plugin
相比于 Jenkins 内置的 Maven 支持,Jenkins Maven plugin 对 Maven 工程提供了更丰富的功能。包括:自动配置报告插件(如 JUnit、Findbugs 等),增量构建,并行构建等。

Jenkins Subversion plugin

参考链接:https://plugins.jenkins.io/subversion
目前仍然有很多项目在使用 Subversion 作为版本控制软件,Jenkins Subversion plugin 让 Jenkins 任务可以支持托管在 Subversion 上的工程。它的功能包括监视 Subversion 仓库变更来触发新的构建和自动更新执行机工作目录,以确保构建的及时性和正确性。

Python-Jenkins API使用 —— 在后端代码中操控Jenkins

最近在工作中需要用到在后台代码中触发Jenkins任务的构建,于是想到Jenkins是否有一些已经封装好的API类库提供,用于处理跟Jenkins相关的操作。下面就简单介绍下我的发现。

Linux Curl

  
首先找到的是Jenkins官网的wiki:https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API

在官网首页就有关于触发job的方法:

未分类

个人尝试了下,该方式是通过命令行直接调curl去发POST请求的方式来触发job的构建。对于用openid管理的Jenkins,需要带上参数–user USER:PASSWORD,其中的USER和PASSWORD不是你的openID登录的账号密码,而是登录后显示在Jenkins中的User Id和API Token,它们的的查看方式如下:

用openID登录jenkins —> 点击右上角的用户名,进入用户个人页面 —> 点击左边的设置,打开设置页面 —> API Token,Show Api Token…

如果需要参数化构建job,则要加上–data-urlencode json='{“parameter”: [{“name”:”param_name1″,”value”:”param_value1″}, {“name”:”param_name2″,”value”:”param_value2″}]}’

显然,这种方式比较繁琐,很容易出现因格式不正确导致触发任务失败,而且这种方式不能帮助我们获取更多的关于job的信息以便于我们后续对job的状态进行跟踪。

Python-Jenkins

  
继续寻找,然后我在Jenkins官网上找到了Python-Jenkins API,仔细阅读后发现,它几乎涵盖了大部分Jenkins的操作,大大方便了我们在后台进行对Jenkins的一些列操作。

Python-Jenkins官网:https://pypi.python.org/pypi/python-jenkins/

Python-Jenkins Doc:http://python-jenkins.readthedocs.io/en/latest/index.html

下面简单介绍下如何使用Python-Jenkins:

1.安装

   sudo pip install python-jenkins

  
2.进入python命令环境或创建新的.py文件jenkinsApiTest.py

   import jenkins

     #定义远程的jenkins master server的url,以及port

     jenkins_server_url='xxxx:xxxx'

     #定义用户的User Id 和 API Token,获取方式同上文

     user_id='xxxx'

     api_token='xxxx'

   #实例化jenkins对象,连接远程的jenkins master server

   server=jenkins.Jenkins(jenkins_server_url, username=user_id, password=api_token)

   #构建job名为job_name的job(不带构建参数)

   server.build_job(job_name)

   #String参数化构建job名为job_name的job, 参数param_dict为字典形式,如:param_dict= {"param1":“value1”, “param2”:“value2”} 

   server.build_job(job_name, parameters=param_dict)

   #获取job名为job_name的job的相关信息

   server.get_job_info(job_name)

   #获取job名为job_name的job的最后次构建号

   server.get_job_info(job_name)['lastBuild']['number']

     #获取job名为job_name的job的某次构建的执行结果状态

   server.get_build_info(job_name,build_number)['result']     

     #判断job名为job_name的job的某次构建是否还在构建中

   server.get_build_info(job_name,build_number)['building']

3.更多其他的API可以参考Python-Jenkins API:http://python-jenkins.readthedocs.io/en/latest/api.html

使用Jenkins自动化部署Java项目

Jenkins介绍

Jenkins是领先的开源自动化服务器,他提供了数百个插件来支持任何项目的构建、部署和自动化。

Jenkins下载

Jenkins的官方网站|下载地址

wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

Jenkins安装

  1. 启动Jenkins :java -jar jenkins.war
  2. 在浏览器中输入 localhost:8080
  3. 根据提示输入Jenkins的默认密码
  4. 安装建议的插件
  5. 创建admin用户
  6. 选择start using jenkins

Jenkins插件安装

rebuilder : 重新构建
safe restart: 安全重启

Jenkins基础配置

  • 配置全局安全属性
    在Configure Global Security中使用安装矩阵添加admin用户和test用户的权限

  • 添加自定义用户test01,并赋予test的用户权限

自动化部署项目

部署过程

  1. git同步最新代码
  2. 使用maven打包项目
  3. 停止tomcat服务器
  4. 部署项目
  5. 启动tomcat服务器

部署脚本

#!/usr/bin/env bash
#编译+部署order站点

#需要配置如下参数
# 项目路径, 在Execute Shell中配置项目路径, pwd 就可以获得该项目路径
# export PROJ_PATH=这个jenkins任务在部署机器上的路径

# 输入你的环境上tomcat的全路径
# export TOMCAT_APP_PATH=tomcat在部署机器上的路径

### base 函数
killTomcat()
{
    pid=`ps -ef|grep tomcat|grep java|awk '{print $2}'`
    echo "tomcat Id list :$pid"
    if [ "$pid" = "" ]
    then
      echo "no tomcat pid alive"
    else
      kill -9 $pid
    fi
}
cd $PROJ_PATH/order
mvn clean install

# 停tomcat
killTomcat

# 删除原有工程
rm -rf $TOMCAT_APP_PATH/webapps/ROOT
rm -f $TOMCAT_APP_PATH/webapps/ROOT.war
rm -f $TOMCAT_APP_PATH/webapps/order.war

# 复制新的工程
cp $PROJ_PATH/order/target/order.war $TOMCAT_APP_PATH/webapps/

cd $TOMCAT_APP_PATH/webapps/
mv order.war ROOT.war

# 启动Tomcat
cd $TOMCAT_APP_PATH/
sh bin/startup.sh

Jenkins部署任务

1.创建Jenkins任务

  • 输入Jenkins的任务名称
  • 选择构建一个自由风格的软件项目
  • 填写任务描述

2.填写Server信息
3. 配置git参数

  • 输入git地址
  • 在Additional Behaviours中选择Check out to a sub-directory并设置文件名为order

4.填写构建语句,部署环境

  • 在构建中添加构建步骤Execute shell
# 在Jenkins任务执行完毕之后只关闭Jenkins进程,不关闭Server进程,如果不设置Server也会被关闭
BUILD_ID=DONTKILLME
# 加载配置文件
. /etc/profile
# 配置运行参数
export RROJ_PATH=`pwd`
export TOMCAT_PATH=/root/apache-tomcat-9.0.8
# 运行部署脚本
sh $RROJ_PATH/order/deploy.sh
  • 点击立即构建

5.验证部署结果

使用浏览器访问192.168.100.133:8080验证项目是否部署成功

docker-compose运行jenkins集成sonarqube代码质量检测

  • 192.168.0.141 jenkins

  • 192.168.0.142 sonarqube

本实例用到2台机器,一台机器里面跑着jenkins服务,一台机器为sonarqube服务

jenkins服务部署这里就不做多的讲解,可以采用docker-compose部署,也可以单独部署,博主采用docker-compose部署的jenkins,我们在另外一台机器部署一个sonarqube服务,这里我们用mysql5.6的镜像和sonarqube的最新版的镜像镜像compose编排部署。

这里编排的是3个服务在一起了,有需要可以自行进行拆分

请参考博主开源项目:https://github.com/lizibin/docker-jenkins-sonarqube

1、拉取博主的项目,即可成功运行jenkins和sonarqube的代码质量检测

我们可以访问主机ip+9000端口访问到页面

未分类

2、这里我们还需要再jenkins进行配置一下插件,才可以自动分析代码质量

未分类

找到这个插件安装好这个插件就开始配置

3、配置jenkins 进入系统配置

未分类

继续配置Global Tool Configuration

未分类

然后我们就可以建立一个自由风格的项目来分析代码了

4、创建项目,需要勾上

未分类

未分类

修改Analysis properties

未分类

就可以开始构建了

5、构建完毕我们可以去9000端口查看页面详情

未分类

使用 Jenkins 自动化发布 PHP 项目

什么是 Jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

使用 Docker 安装 Jenkins

避免装环境的折腾, 直接使用 docker-compose 安装,具体如何安装在 Docker 快速搭建 LNMP 环境 已经描述了

docker-compose.yml

jenkins:
  image: jenkins:latest
  ports:
    - "8080:8080"
  volumes:
      - ./jenkins:/var/jenkins_home:rw

注意:volumes 配置 jenkins 目录映射到本地

docker-compose up -d 

# 等待下载镜像,创建容器
Creating dnmp_jenkins_1    ... done
# 安装就这么简单

访问 8080 端口,进入初始化页面

访问: http://localhost:8080/

首次打开,需要输入秘钥,根据提示,可以在对应的目录 /jenkins/secrets 找到该文件
设置登录用户名密码后,进入几分钟的初始化过程…

未分类

配置自动化构建发布

配置远程服务器 SSH

菜单 -> 系统管理 -> 系统设置 -> SSH Servers

未分类

如图,是我配置的内容

未分类

Remote Directory 这个配置很关键,表示构建时的相对目录。这里我配置 “/“
配置完成后,最好 Test Configuration , 返回 Success 就表示成功!

新建发布项目

填写项目名称如, test
并选择项目类型,这里我选择”自由风格项目”

未分类

General

选择对应项目路径,我使用 GitHub project

未分类

源码管理

使用 git 源码仓库管理

未分类

构建

这里是最关键的,你可以打包源码发布到对应的服务器之上

未分类

  • Source files 表示打包好的源文件
  • Remote directory 表示你需要将源文件上传的远程路径(这个路径相对于 SSH 配置目录)
  • Exec command 上传完成后,执行的命令( hexo g 这个是我发布博客时的构建命令)

立即构建

选择对应的项目,点击立即构建

未分类

在构建执行状态中,可以点击 console output 看到构建的过程信息

未分类