将自由风格项目转换为管道项目 CI/CD

 如今,将自许多公司都使用Jenkins完成了他们的由风持续集成,测试和持续部署。格项管道他们中的目转大多数使用freestyle作为默认项目类型,但这有其自身的项目局限性。根据需要,将自我最近开始将所有Freestyle迁移到Pipeline项目。由风那么什么时候触发这些工作呢?格项管道开发人员/所有者通过推送/提交更新存储库后,jenkins作业将触发这些作业-将生成一个二进制文件,目转另一个将运行单元测试以检查代码覆盖率。项目由于代码覆盖率单元测试需要大量时间才能完成,将自因此将这两个任务分成两个工作的由风必要性上升了。只要存储库中有更新,格项管道就会触发此作业,目转并在限制运行和执行构建前和构建后步骤的项目计算机中检入代码。

自由风格项目

全局配置

 

GitHub存储库配置

启用webhook配置

基于Shell的服务器租用构建步骤

发布-根据结果构建任务

 

触发电子邮件通知,以在构建执行后通知项目所有者

为单元测试作业创建了相同的作业类型,在Build shell中进行了很少的改动,并添加了一些单元测试代码。

为什么要转换成Pipeline项目?

Freestyle的主要问题之一是,它不允许超过1个存储库的SCM轮询webhook触发器。这是我们的主要担忧,为管道迁移铺平了道路。上面的快照涵盖了将近7项任务,而单元测试的任务数约为10。那么我们可以使用管道代码来执行所有任务。站群服务器下面是从上面的Freestyle转换而来的一个

WSPACE = /var/jenkins/workspace/Directory_Name/ BRWSPACE = /var/jenkins/workspace/ pipeline {      agent {          node {              label Node_Name             customWorkspace "${ WSPACE}"         }     }     //清空构建目录     stages {          stage(Cleaning up the previous directory) {              steps {                  echo Deleteing the directory                 sh "rm -rf  /var/jenkins/workspace/Directory_Name/* "             }         }     // 下载代码和依赖     stage(Checking out build repo and its dependencies) {               steps {                  dir("${ WSPACE}/RepoName") {                      git branch: master,                          credentialsId: UserName,                          url: https://github.com/path/repo.git                 }                 dir("${ WSPACE}/dir") {                      git branch: master,                          credentialsId: UserName,                          url: https://github.com/path/repo1.git                 }                 dir("${ WSPACE}/dir3") {                      git branch: master,                          credentialsId: UserName2,                          url: https://github.com/path/repo4.git               }                }     }     //执行构建     stage(Versioning and executing the build) {           steps {                  dir ("${ WSPACE}/repo1") {                      script{                          sh label: , script: /usr/bin/env        cd /var/jenkins/workspace/        original=`cat patch_info`        MAJOR=`cat patch_info | cut -d "." -f1`        MINOR=`cat patch_info | cut -d "." -f2`        PATCH=`cat patch_info | cut -d "." -f3`        New_Value=`expr $PATCH + 1`        New_Version=$MAJOR.$MINOR.$New_Value        sed -i "s/$original/$New_Version/g" patch_info        echo "$New_Version"        cd /var/jenkins/workspace/path/repo4/        echo "Starting the Unit Testing"        export GOPATH=$HOME/go        export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin        make format        make clean build        if  make unit-test ; then         cd /var/jenkins/workspace/path/repo1/dir         else         cd /var/jenkins/workspace/path/repo2/dir2        fi        if make unit-test ; then         echo " unit testing completed"        fi                     }                  }          }   }   //发布HTML报告   stage (Publish HTML Report) {         steps {            dir ("/jenkins/workspace/") {                 script{                  sh label: , script: /usr/bin/env                 perl /jenkins/generate_build_meta_data.pl -jr http://gitlab.com:8080 -bNum ${ BUILD_NUMBER} -bName ${ JOB_NAME} -o /tmp -t /jenkins/template.html                 export GOPATH=$HOME/go                 export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin                 cd /var/jenkins/workspace/path/repo1/service/                 go tool cover -html=c.out -o coverage.html                 cd /var/jenkins/workspace/path/repo2/dir3                 go tool cover -html=c.out -o output.html               publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: false,                reportDir: /tmp/${ JOB_NAME}/${ BUILD_NUMBER}, reportFiles: ${ JOB_NAME}-${ BUILD_NUMBER}-manifest.html,               reportName: Email Output Subject, reportTitles: ])                }               }        }   }   //发送邮件   stage (Send Email) {         steps {          dir ("${ WSPACE}/repo4") {           emailext attachmentsPattern: **/coverage.html,**/dir4.html, body: ${ FILE, path="/tmp/${ JOB_NAME}/${ BUILD_NUMBER}/${ JOB_NAME}-${ BUILD_NUMBER}-manifest.html"}, subject: Unit testing Email Output ${ BUILD_NUMBER} Successful, to: "EmailID@Domain2.com, EmailID2@Domain3.com"     }    }   }  } } 

上面的代码为我们提供了编辑的空间及其凝聚力。管道作业的一个重要特征是阶段的输出以一种吸引人的方式呈现,我发现这很容易理解正在进行的过程。

总结

创建Freestyle或Pipeline项目完全取决于需求。在定制方面,Pipeline显示了主要空间,因为自由风格是启动您的第一份Jenkins工作的简便方法。源码库

域名
上一篇:持续压强式投入 华为2022年研发费用1615亿元
下一篇:什么是PDU?如何为数据中心选择合适的PDU