服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - 编程技术 - 将自由风格项目转换为管道项目 CI/CD

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

2021-01-21 23:27DevOps云学堂泽阳 编程技术

如今,许多公司都使用Jenkins完成了他们的持续集成,测试和持续部署。他们中的大多数使用freestyle作为默认项目类型,但这有其自身的局限性。根据需要,我最近开始将所有Freestyle迁移到Pipeline项目。

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

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

自由风格项目

全局配置

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

GitHub存储库配置

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

启用webhook配置

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

基于Shell的构建步骤

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

发布-根据结果构建任务

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

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

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

为单元测试作业创建了相同的作业类型,在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工作的简便方法。

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

延伸 · 阅读

精彩推荐