持续集成框架jenkins介绍02-持久集成git仓库+maven项目
一。 git代码管理
一般使用jenkins集成时jenkins需要从代码仓库中抓取源代码进行编译打包运行等 这里的仓库可以使用svn或者git 我这里使用git
代码开发 使用eclipse git远程服务器使用gitblit(参考http://blog.csdn.net/liaomin416100569/article/details/78466294 章节2 第三方git服务器)
gitblit默认的账号和密码时admin和admin gitblit下创建一个版本库 jk
eclipse下创建maven项目(jar项目)jk 我这里简易使用springboot发布一个helloworld的web程序
pom.xml配置为:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.et</groupId>
<artifactId>jk</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
springboot具体参考官网(https://projects.spring.io/spring-boot/)添加一个主类(发布一个rest服务)用于运行
package cn.hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@EnableAutoConfiguration
public class HelloController {
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
//System.setProperty("server.port","8889");
SpringApplication.run(HelloController.class, args);
}
}
application.yml
server:
port: 8888
大致项目结构图解为:
添加当前项目的本地仓库 关联到远程仓库 从gitblit上拷贝git的http地址(http://admin@192.168.58.150:8080/gitblit-1.8.0/r/jk.git)
添加当前项目本地仓库 过程如下
本地仓库关联到远程仓库
提交代码到远程仓库
查看gitblit发现内容已经提交
二。jenkins集成
jekins配置从git仓库抓取源码 同时使用maven进行打包 使用java命令运行
jekin安装过程 参考http://blog.csdn.net/liaomin416100569/article/details/78431720
登录jeken配置 jdk和maven和git环境
假设我的jdk,maven,git 已经下载安装好
1》配置环境
点击左侧菜单 系统管理->点击Global Tool Configuration
界面上添加 JAVA_HOME路径 git执行命令
同一页面滚动到下面设置maven
2》配置用于连接git的用户名密码信息
点击左侧菜单的Credentials 新增一个登陆的用户和密码
输入git的用户名和密码保存
3》创建构建项目
接下来 jenkins首页创建一个新任务. 输入项目名称 比如我的jk 选择构建一个自由风格的软件项目
以下介绍构建的几个面板数据的作用
Genernal配置 一般用于配置项目名称等信息 比如
源码管理配置 主要配置git仓库的位置 及选择之前设置的用户名密码信息
构建触发器 就是在什么时候触发构建 这里选择第一项(也就是在浏览器敲入 地址 JENKINS_URL/job/jk/build?token=run就可以触发构建)
构建 真实的代码编译运行的步骤 我这里需要执行两个步骤
源代码从git仓库下载后
需要首先maven打jar包
使用java -jar jar包来运行
构建是 存在一些内置的临时变量 使用 ${变量名} 获取 比如 拉取的git源码的工作目录是${WORKSPACE}
具体 可以点击右侧的 ?按钮跳转过去查看(http://192.168.58.150:8080/jenkins/env-vars.html/)
这里配置运行maven打包的jar包可谓一波三折
刚开始添加运行jar命令 是
java -jar ${WORKSPACE}/target/jk-0.0.1-SNAPSHOT.jar
结果发现 这个命令阻塞 jenkins的运行 所以构建一直不完成 这种shell不行 后面使用 nohup或者setsid
nohup java -jar ${WORKSPACE}/target/jk-0.0.1-SNAPSHOT.jar >${WORKSPACE}/target/myjar.log 2>&1 &
结果发现 只要有 >符号出现在命令中 都直接不执行
后面想将这个命令 放到sh文件中去
在 /usr/share/tomcat/.jenkins/workspace/jk 新建文件jk_run.sh添加内容
nohup java -jar ${WORKSPACE}/target/jk-0.0.1-SNAPSHOT.jar >${WORKSPACE}/target/myjar.log 2>&1 &
命令行就执行这个文件
sh ${WORKSPACE}/jk_run.sh
发现执行后的java进程被 jenkins给干掉了 后面看了官网(https://wiki.jenkins.io/display/JENKINS/ProcessTreeKiller)
需要在命令前添加一个变量 用于修改当前jk构建线程的id 才能不被杀掉 最后修改为
BUILD_ID=dontKillMe sh ${WORKSPACE}/jk_run.sh
如果多次构建每次都启动 端口会被占用所以这里 构建启动之前先将该程序干掉 最终运行脚本就是
ps -ef | grep java | grep jk | awk '{system("kill -9 "$2)}'
BUILD_ID=dontKillMe sh ${WORKSPACE}/jk_run.sh
最后我的构建是:
配置好后 可以使用构建触发器指定的token(我上面填的token是run) 来触发一次构建了
http://192.168.58.150:8080/jenkins/job/jk/build?token=run
首页左下角看到构建执行状态 多出一行有进度条
在右侧点击项目名称进入 看到构建历史记录
点击这个历史记录 超链接进去 可以看到构建控制台输出 成功与否都可以从这里看到
我的控制台 出现了maven构建和我自己的脚本运行
Started by remote host 192.168.58.1
Building in workspace /usr/share/tomcat/.jenkins/workspace/jk
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url http://admin@192.168.58.150:8080/gitblit-1.8.0/r/jk.git # timeout=10
Fetching upstream changes from http://admin@192.168.58.150:8080/gitblit-1.8.0/r/jk.git
> git --version # timeout=10
using GIT_ASKPASS to set credentials
> git fetch --tags --progress http://admin@192.168.58.150:8080/gitblit-1.8.0/r/jk.git +refs/heads/*:refs/remotes/origin/*
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision f98704b5db306ac5e7cb9afa3390163d15768975 (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f f98704b5db306ac5e7cb9afa3390163d15768975
Commit message: "jjjj"
> git rev-list f98704b5db306ac5e7cb9afa3390163d15768975 # timeout=10
[jk] $ /soft/apache-maven-3.0.4_localtest/bin/mvn -f pom.xml package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building jk 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ jk ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ jk ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ jk ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /usr/share/tomcat/.jenkins/workspace/jk/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ jk ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ jk ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ jk ---
[INFO] Building jar: /usr/share/tomcat/.jenkins/workspace/jk/target/jk-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:1.5.8.RELEASE:repackage (default) @ jk ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.800s
[INFO] Finished at: Tue Nov 07 03:53:24 PST 2017
[INFO] Final Memory: 15M/36M
[INFO] ------------------------------------------------------------------------
[jk] $ /bin/sh -xe /var/cache/tomcat/temp/jenkins5793360651956692863.sh
+ BUILD_ID=dontKillMe
+ sh /usr/share/tomcat/.jenkins/workspace/jk/jk_run.sh
Finished: SUCCESS
构建成功后 linux查看查看
[root@node3 jk]# jps
7955 Jps
3173 Bootstrap
7865 jk-0.0.1-SNAPSHOT.jar
我的springboot程序也可以通过浏览器访问