一。 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程序也可以通过浏览器访问






Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐