jenkins的pipeline初探

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:

[email protected]@ ,其實是配合 maven profile進行選擇不同配置文件進行啓動。

參考:https://www.cnblogs.com/maohuidong/p/11507362.html

 

 


 對於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="[email protected]: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的使用,參考:https://jenkins.io/doc/pipeline/steps/workflow-scm-step/#checkout-general-scm 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章