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

时间:2021-05-02

如今,许多公司都使用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('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'

}

}

}

//执行构建

stage('Versioningandexecutingthebuild'){

steps{

dir("${WSPACE}/repo1"){

script{

shlabel:'',script:'''/usr/bin/env

cd/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_Value

sed-i"s/$original/$New_Version/g"patch_info

echo"$New_Version"

cd/var/jenkins/workspace/path/repo4/

echo"StartingtheUnitTesting"

exportGOPATH=$HOME/go

exportPATH=$PATH:/usr/local/go/bin:$GOPATH/bin

makeformat

makecleanbuild

ifmakeunit-test;then

cd/var/jenkins/workspace/path/repo1/dir

else

cd/var/jenkins/workspace/path/repo2/dir2

fi

ifmakeunit-test;then

echo"unittestingcompleted"

fi

'''

}

}

}

}

//发布HTML报告

stage('PublishHTMLReport'){

steps{

dir("/jenkins/workspace/"){

script{

shlabel:'',script:'''/usr/bin/env

perl/jenkins/generate_build_meta_data.pl-jrhttp://gitlab.com:8080-bNum${BUILD_NUMBER}-bName${JOB_NAME}-o/tmp-t/jenkins/template.html

exportGOPATH=$HOME/go

exportPATH=$PATH:/usr/local/go/bin:$GOPATH/bin

cd/var/jenkins/workspace/path/repo1/service/

gotoolcover-html=c.out-ocoverage.html

cd/var/jenkins/workspace/path/repo2/dir3

gotoolcover-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:''])

}

}

}

}

//发送邮件

stage('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显示了主要空间,因为自由风格是启动您的第一份Jenkins工作的简便方法。

【原文地址】:https://mp.weixin.qq.com/s/aDAqAxOu16HM1QDYso97VA

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章