• 持续集成框架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程序也可以通过浏览器访问






  • 相关阅读:
    学机器学习,不会数据分析怎么行——数据可视化分析(matplotlib)
    关于 tensorflow-gpu 中 CUDA 和 CuDNN 版本适配问题
    人工智能学习资料
    JAVA Socket通信 打造属于自己的网盘
    在 Windows 10 中使用 OpenAI Spinning Up
    【LeetCode】回文串专题
    【LeetCode】45.跳跃游戏2
    【LeetCode】23.最大子序和
    【LeetCode】3. 无重复字符的最长子串(典型滑动窗口)
    【LeetCode】202.快乐数
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331169.html
Copyright © 2020-2023  润新知