当前位置: 首页 > 科技观察

将Freestyle项目转换为流水线项目CI-CD

时间:2023-03-23 11:49:02 科技观察

今天,许多公司使用Jenkins进行持续集成、测试和持续部署。他们中的大多数使用自由式作为默认项目类型,但这有其自身的局限性。我最近开始根据需要将所有Freestyle迁移到Pipeline项目。那么这些工作是什么时候触发的呢?在开发人员/所有者通过推送/提交更新存储库后,这些作业将由jenkins作业触发——一个将生成二进制文件,另一个将运行单元测试以检查代码覆盖率。由于代码覆盖单元测试需要花费大量时间才能完成,因此有必要将这两项任务拆分为两项工作。只要存储库中有更新并签入受限于运行和执行构建前和构建后步骤的机器上的代码,就会触发此作业。FreestyleProjectGlobalConfigurationGitHubRepositoryConfiguration启用webhooks配置基于Shell的构建步骤Publish-on-results构建任务触发电子邮件通知以在构建执行后通知项目所有者外壳和一些单元测试代码被添加。为什么要转换为管道项目?Freestyle的主要问题之一是它不允许SCM轮询webhook触发器超过1个存储库。这是我们的主要关注点,为管道迁移铺平了道路。上面的快照涵盖了近7个任务,而单元测试有大约10个任务。然后我们可以使用管道代码来执行所有任务。下面是一个WSPACE='/var/jenkins/workspace/Directory_Name/'BRWSPACE='/var/jenkins/workspace/'pipeline{agent{node{label'Node_Name'customWorkspace"${WSPACE"从上面的Freestyle转换而来}"}}//清空构建目录stages{stage('Cleaningupthepreviousdirectory'){steps{echo'Deleteingthedirectory'sh"rm-rf/var/jenkins/workspace/Directory_Name/*"}}//下载代码和依赖stage('Checkingoutbuildrepoanditsdependencies'){steps{dir("${WSPACE}/RepoName"){gitbranch:'master',credentialsId:'UserName',url:'https://github.com/path/repo.git'}dir("${WSPACE}/dir"){gitbranch:'master',credentialsId:'UserName',url:'https://github.com/path/repo1.git'}dir("${WSPACE}/dir3"){gitbranch:'master',credentialsId:'UserName2',url:'https://github.com/path/repo4.git'}}}//执行构建阶段('Versioningandexecutingthebuild'){steps{dir("${WSPACE}/repo1"){script{shlabel:'',script:'''/usr/bin/envcd/var/jenkins/workspace/original=`catpatch_info`MAJOR=`catpatch_info|cut-d"。“-f1`MINOR=`catpatch_info|cut-d"."-f2`PATCH=`catpatch_info|cut-d"."-f3`New_Value=`expr$PATCH+1`New_Version=$MAJOR.$MINOR.$New_Valuesed-i"s/$original/$New_Version/g"patch_infoecho"$New_Version"cd/var/jenkins/workspace/path/repo4/echo"StartingtheUnitTesting"exportGOPATH=$HOME/goexportPATH=$PATH:/usr/local/go/bin:$GOPATH/binmakeformatmakecleanbuildifmakeunit-test;thencd/var/jenkins/workspace/path/repo1/direlsecd/var/jenkins/workspace/path/repo2/dir2fiifmakeunit-test;thenecho"unittestingcompleted"fi'''}}}}//发布HTML报告阶段('PublishHTMLReport'){steps{dir("/jenkins/workspace/"){script{shlabel:'',script:'''/usr/bin/envperl/jenkins/generate_build_meta_data.pl-jrhttp://gitlab.com:8080-bNum${BUILD_NUMBER}-bName${JOB_NAME}-o/tmp-t/jenkins/template.htmlexportGOPATH=$HOME/goexportPATH=$PATH:/usr/local/go/bin:$GOPATH/bincd/var/jenkins/workspace/path/repo1/service/gotoolcover-html=c.out-ocoverage.htmlcd/var/jenkins/workspace/path/repo2/dir3gotoolcover-html=c.out-ooutput.html'''publishHTML([allowMissing:false,alwaysLinkToLastBuild:false,keepAll:false,reportDir:'/tmp/${JOB_NAME}/${BUILD_NUMBER}',reportFiles:'${JOB_NAME}-${BUILD_NUMBER}-manifest.html',reportName:'EmailOutputSubject',reportTitles:''])}}}}//发送邮件阶段('SendEmail'){steps{dir("${WSPACE}/repo4"){emailextattachmentsPattern:'**/coverage.html,**/dir4.html',body:'${FILE,path="/tmp/${JOB_NAME}/${BUILD_NUMBER}/${JOB_NAME}-${BUILD_NUMBER}-manifest.html"}',subject:'UnittestingEmailOutput${BUILD_NUMBER}Successful',to:"EmailID@Domain2.com,EmailID2@Domain3.com"}}}}}上面的代码给了我们编辑的空间和它的凝聚力管道作业的一个重要特征是阶段的输出以一种有吸引力的方式呈现,我发现这很容易理解正在进行的过程。总结创建一个Freestyle或Pipeline项目完全取决于需求。在自定义方面,Pipeline显示了主要空间,因为freestyle是开始你的第一个Jenkins工作的简单方法。

最新推荐
猜你喜欢