jenkins的pipeline初探

97 阅读2分钟

Pipeline Utility Steps用于读取各种文件

Generic Webhook Trigger插件用于接收构建过程中,post Body中的参数,同时提供了一个用token指定构建任务的触发方式;

第一个测试的jenkins pipeline


pipeline{
    agent any
    options { checkoutToSubdirectory('foo') }
    environment { 
        WORKSPACE="${WORKSPACE}/subdir"
        tagName= "${ref}"
    }
    tools {
        maven 'maven-3.5.2' 
        jdk 'JDK8'
    }
    stages {
        stage('Build') {
            steps{
                script{
                     name = "caoyong"
                    
                }
                echo $name
                echo "${tagName}"
                withEnv(['tagName=12432432']){
                    echo "${tagName}"
                }
                echo "${tagName}"
                echo 'This is a build step,,,,,,,,,,,,,,,,' 
                echo("ref::::::::::::::::::::::${ref}")
                sh("ls .")
                
                dir("subdir"){
                    // git credentialsId:'caoyong-ssh', branch: "master", url:'${project.url}'
                    // sh "cat caoyong1.txt"
                    checkout scm: [$class: 'GitSCM', userRemoteConfigs: [[url: '${project.url}', credentialsId: 'caoyong-ssh']], branches: [[name: "${ref}"]]],poll: false
                    // sh("echo ${ref} |sed 's/refs\/tags\/\(\S*\)/\1/' ")
                    // sh("echo ${ref} |awk -F'/' '{print \$3}' |xargs git checkout ")
                    // sh("git checkout V1.0.0.2")
                    sh("mvn clear compile package")
                    echo '华丽的分割线-----------------------------------------------------------------------------------------'
                    sh 'mvn --version'
                }
                
               
            }
        }
        stage('Test') {
            steps{
               echo 'This is a build test-------------------------------------------------------------------------------------' 
            }
        }
        stage('Deploy') {
            steps{
                echo 'This is a deploy step begin....'   
                echo 'This is a deploy step end....'    
            }
            post{
                success{
                    echo 'caoyong post finished.....'
                }
            }
        }
    }
}

gitlab提供了很多的api,用于管理git

http://10.110.152.173:23456/api/v4/users?username=root
http://10.110.152.173:23456/api/v4/projects
http://10.110.152.173:23456/api/v4/users/1/projects?simple=true
http://10.110.152.173:23456/api/v4/projects/3/repository/tags
http://10.110.152.173:23456/api/v4/projects/3/repository/tags/V1.0.0.13/release
header{"PRIVATE-TOKEN":"3THFB5BPeguL69mCXoxD"}
http://10.110.152.173:23456/api/v4/projects/3/releases

使用maven自动化打包构建过程中如下:

代码结构是这样的:


在base目录下执行:mvn -pl server-provider -am clean compile package
-pl就是指定要清理,编译,打包的项目,
-am就是自动识别依赖的其他的项目,并安装之;
其中base是server-provider的父项目
server-provider依赖commons-pojo和commons-util

 

在使用springBoot插件打包的时候,会出现找不到模块之间依赖关系,是因为在使用插件打包的时候,将被依赖的jar的类都打包到了BOOT-INF下,解决办法是,将被依赖的基础项目去掉springBoot插件或者使用下面的配置即可:

1.spring-boot maven打包,一般pom.xml文件里会加

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
这样打的jar里会多一个目录BOOT-INF。

2.引起问题,程序包不存在。

3.解决办法,如果A子模块包依赖了B子模块包,在B子模块的pom文件,加入

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>
————————————————
版权声明:本文为CSDN博主「zsywangyi」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zsywangyi/article/details/78319130

使用SpringBoot插件的好处在于,将Main类放到了jar中,打出的jar就是可以运行的;
实际上,在实现过程中,在base中引入该插件,配置

<properties>
    <spring-boot.maven.plugin>false</spring-boot.maven.plugin>
</properties>

<configuration>
    <skip>${skip.spring.boot.maven.plugin}</skip>
</configuration>

即可。。。。。

 

说下spring.profiles.active:

spring.profiles.active=@profiles.active@ ,其实是配合 maven profile进行选择不同配置文件进行启动。

参考:www.cnblogs.com/maohuidong/…

 

 


 对于json数据以及for循环的测试如下:

前提是安装【pipeline-utility插件】

                
pipeline{
    agent any
    tools {
        maven 'maven-3.5.2' 
        jdk 'JDK8'
    }
    stages {
        stage('CheckOut Code And Image Stage...') {
            steps{
                script{
                    deployUrl="git@10.110.152.173:root/mmzx.git";     
                    localCredentialsId="8daffac3-4e12-4c9e-8474-cf256870eb83";
                    ns = "${namespace}"
                    v = "${version}"
                    jsonObj = readJSON text: "${person}"
                    array = readJSON text: '[ "a", "b","c","d"]'
                       for (int i = 0;i < array.size();++i){
                        echo "Testing the ${array[i]} browser"
                        sh("mkdir caoyong${array[i]}")
                    }
                }
                    echo "$jsonObj"
                    echo "${jsonObj.name}"
                    echo "$jsonObj.age"
            }
        }
 
    }
}

前端的请求:

curl -X POST \
  'http://10.110.152.173:8899/generic-webhook-trigger/invoke?token=demo.bot' \
  -H 'Accept: */*' \
  -H 'Accept-Encoding: gzip, deflate' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Length: 119' \
  -H 'Content-Type: application/json' \
  -H 'Host: 10.110.152.173:8899' \
  -H 'Postman-Token: 2e3f94ba-0c80-4925-b4dc-7c8d273039ea,14ae01e1-d5e9-4698-91cf-c8e1610a5794' \
  -H 'User-Agent: PostmanRuntime/7.20.1' \
  -H 'X-Gitlab-Event: Tag Push Hook' \
  -H 'X-Gitlab-Token: 93e7593af81a3862890f99dc53dee758' \
  -H 'cache-control: no-cache' \
  -d '{
   "namespace":"mmzx",
   "version":"v1.0.0.10",
   "person":{
   		"name":"caoyongxxx",
   		"age":34
   	}
}'

jenkins工作目录中,已经可以看到创建好的目录: 

 

 

对于scm的使用,参考:jenkins.io/doc/pipelin…