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

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

10年积累的成都网站制作、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有南安免费网站建设让你可以放心的选择与我们合作。

自由风格项目

全局配置

GitHub存储库配置

启用webhook配置

基于Shell的构建步骤

发布-根据结果构建任务

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

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

为什么要转换成Pipeline项目?

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

 
 
 
 
  1. WSPACE = '/var/jenkins/workspace/Directory_Name/' 
  2. BRWSPACE = '/var/jenkins/workspace/' 
  3. pipeline { 
  4.     agent { 
  5.         node { 
  6.             label 'Node_Name' 
  7.             customWorkspace "${WSPACE}" 
  8.         } 
  9.     } 
  10.      
  11.     //清空构建目录 
  12.     stages { 
  13.         stage('Cleaning up the previous directory') { 
  14.             steps { 
  15.                 echo 'Deleteing the directory' 
  16.                 sh "rm -rf  /var/jenkins/workspace/Directory_Name/* " 
  17.             } 
  18.         } 
  19.          
  20.     // 下载代码和依赖 
  21.     stage('Checking out build repo and its dependencies') { 
  22.              steps { 
  23.                 dir("${WSPACE}/RepoName") { 
  24.                     git branch: 'master',  
  25.                         credentialsId: 'UserName',  
  26.                         url: 'https://github.com/path/repo.git' 
  27.                 } 
  28.                 dir("${WSPACE}/dir") { 
  29.                     git branch: 'master',  
  30.                         credentialsId: 'UserName',  
  31.                         url: 'https://github.com/path/repo1.git' 
  32.                 } 
  33.                 dir("${WSPACE}/dir3") { 
  34.                     git branch: 'master',  
  35.                         credentialsId: 'UserName2',  
  36.                         url: 'https://github.com/path/repo4.git' 
  37.               }     
  38.            } 
  39.     } 
  40.      
  41.     //执行构建 
  42.     stage('Versioning and executing the build') { 
  43.          steps { 
  44.                 dir ("${WSPACE}/repo1") { 
  45.                     script{ 
  46.                         sh label: '', script: '''/usr/bin/env 
  47.        cd /var/jenkins/workspace/ 
  48.        original=`cat patch_info` 
  49.        MAJOR=`cat patch_info | cut -d "." -f1` 
  50.        MINOR=`cat patch_info | cut -d "." -f2` 
  51.        PATCH=`cat patch_info | cut -d "." -f3` 
  52.        New_Value=`expr $PATCH + 1` 
  53.        New_Version=$MAJOR.$MINOR.$New_Value 
  54.        sed -i "s/$original/$New_Version/g" patch_info 
  55.        echo "$New_Version" 
  56.        cd /var/jenkins/workspace/path/repo4/ 
  57.        echo "Starting the Unit Testing" 
  58.        export GOPATH=$HOME/go 
  59.        export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin 
  60.        make format 
  61.        make clean build 
  62.        if  make unit-test ; then 
  63.         cd /var/jenkins/workspace/path/repo1/dir  
  64.        else 
  65.         cd /var/jenkins/workspace/path/repo2/dir2 
  66.        fi 
  67.        if make unit-test ; then 
  68.         echo " unit testing completed" 
  69.        fi 
  70.                         ''' 
  71.                     }  
  72.                 } 
  73.          } 
  74.   } 
  75.    
  76.   //发布HTML报告 
  77.   stage ('Publish HTML Report') { 
  78.        steps { 
  79.           dir ("/jenkins/workspace/") { 
  80.                script{ 
  81.                 sh label: '', script: '''/usr/bin/env 
  82.                 perl /jenkins/generate_build_meta_data.pl -jr http://gitlab.com:8080 -bNum ${BUILD_NUMBER} -bName ${JOB_NAME} -o /tmp -t /jenkins/template.html 
  83.                 export GOPATH=$HOME/go 
  84.                 export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin 
  85.                 cd /var/jenkins/workspace/path/repo1/service/ 
  86.                 go tool cover -html=c.out -o coverage.html 
  87.                 cd /var/jenkins/workspace/path/repo2/dir3 
  88.                 go tool cover -html=c.out -o output.html 
  89.                ''' 
  90.               publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: false,  
  91.               reportDir: '/tmp/${JOB_NAME}/${BUILD_NUMBER}', reportFiles: '${JOB_NAME}-${BUILD_NUMBER}-manifest.html', 
  92.               reportName: 'Email Output Subject', reportTitles: '']) 
  93.                }     
  94.           } 
  95.        } 
  96.   } 
  97.    
  98.   //发送邮件 
  99.   stage ('Send Email') { 
  100.        steps { 
  101.         dir ("${WSPACE}/repo4") { 
  102.          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" 
  103.     } 
  104.    } 
  105.   } 
  106.  } 

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

总结

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

文章题目:将自由风格项目转换为管道项目 CI/CD
文章源于:http://www.mswzjz.cn/qtweb/news21/527121.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能