jenkins 入门_Jenkins Pipelines入门

jenkins 入门

Jenkins是著名的开源持续集成和持续开发自动化工具。 它有一个出色的支持社区,数百年来,许多插件和开发人员一直在使用它。

本文将提供有关如何开始使用管道和多分支管道的简要指南。

为什么要管道?

  • 开发人员可以使用一个工具多次自动执行代码的集成,测试和部署,从源代码到产品使用者。
  • 可以将称为“ Jenkinsfiles”的管道“作为代码”保存在任何源代码控制系统中。 在以前的Jenkins版本中,仅使用UI配置作业。 使用Jenkinfiles,管道更易于维护和移植。
  • 多分支管道与Git集成在一起,因此不同的分支,功能和发行版可以具有独立的管道,从而使每个开发人员都可以自定义其开发/部署过程。
  • 团队的非技术人员可以使用参数触发和自定义构建,分析测试报告,接收电子邮件警报并通过管道阶段视图(在Blue Ocean UI的最新版本中进行了改进)更好地了解构建和部署过程。
  • Jenkins也可以使用Docker安装,并且管道可以与Docker代理进行交互。
在开始此处之前,请先阅读文档 ,因为其中包括对该技术的完整说明和介绍以及使用该技术的好处。

要求:

Jenkins Pipelines入门

这是我使用的Jenkinsfile(您也可以在GitHub上访问此代码 ):



   
   
pipeline {
    agent any
    stages {
stage('testing pipeline'){
          steps{
      echo 'test1'
                sh 'mkdir from-jenkins'
                sh 'touch from-jenkins/test.txt'
                }
        }
}
}

1.单击新建项目

Welcome to Jenkins

2.为项目命名,选择Pipeline ,然后单击OK

Enter pipeline name

3.创建项目后,将显示配置页面。 在“ 定义”部分中,您必须决定从源代码管理(SCM)获取Jenkins文件,或者在Jenkins中创建Pipeline脚本。 建议在SCM中托管Jenkinsfile,以便其可移植和可维护。

Advanced options in Jenkins

我选择的SCM是具有简单用户和通过凭据的Git(也可以使用SSH)。 默认情况下,除非在Script Path目录中另外指定,否则Jenkins将在该存储库中查找Jenkinsfile。

4.保存Jenkinsfile之后,返回作业页面,然后选择Build Now 。 詹金斯将触发这份工作。 它的第一步是从SCM下拉Jenkinsfile。 它报告上一次运行的所有更改并执行。

Jenkins dashboard

单击舞台视图可提供控制台信息:

Jenkins stage logs

使用蓝海

詹金斯的《 蓝色海洋》为管道提供了更好的UI。 可从作业的主页进行访问(请参见上图)。

Blue Ocean pipeline

这个简单的Pipeline有一个阶段(默认阶段除外): Checkout SCM ,它分三步拉取Jenkinsfile。 第一步回波的消息,所述第二创建一个名为目录from- jenkins在詹金斯的工作区,以及第三放一个称为文件test.txt该目录内。 Jenkins工作区的路径是$user/.jenkins/workspace ,位于执行作业的计算机中。 在此示例中,作业在任何可用节点中执行。 如果没有其他节点连接,则在安装了Jenkins的计算机中执行该节点-选中“管理Jenkins”>“管理节点”以获取有关节点的信息。

创建管道的另一种方法是使用Blue Ocean的插件。 (以下屏幕截图显示了相同的仓库。)

1.单击打开蓝海

屏幕快照:Miguel Suarez

2.单击新建管道

Blue Ocean New Pipeline

3.选择SCM并输入存储库URL; 将提供一个SSH密钥。 这必须添加到您的Git SSH密钥中(在Settings →SSH and GPG keys )。

Enter repository URL

4. Jenkins将自动检测分支和Jenkinsfile(如果存在)。 这也将触发工作。

Blue Ocean triggers job

管道开发:

以下Jenkinsfile从GitHub存储库触发Cucumber测试,创建并存档JAR,发送电子邮件,并公开该作业可以通过变量,并行阶段等执行的不同方式。本演示中使用的Java项目是从cumcum / cucumber- jvmmluyo3414 / cucumber-jvm 。 您也可以访问 Jenkinsfile GitHub上。 由于Jenkinsfile不在存储库的顶层目录中,因此必须将配置更改为其他路径:

Enter script path


   
   
pipeline {
    // 1. runs in any agent, otherwise specify a slave node
    agent any
    parameters {
// 2.variables for the parametrized execution of the test: Text and options
        choice(choices: 'yes\nno', description: 'Are you sure you want to execute this test?', name: 'run_test_only')
        choice(choices: 'yes\nno', description: 'Archived war?', name: 'archive_war')
        string(defaultValue: "your.email@gmail.com", description: 'email for notifications', name: 'notification_email')
    }
//3. Environment variables
environment {
firstEnvVar= 'FIRST_VAR'
secondEnvVar= 'SECOND_VAR'
thirdEnvVar= 'THIRD_VAR'
}
//4. Stages
    stages {
        stage('Test'){
             //conditional for parameter
            when {
                environment name: 'run_test_only', value: 'yes'
            }
            steps{
                sh 'cd examples/java-calculator && mvn clean integration-test'
            }
        }
//5. demo parallel stage with script
        stage ('Run demo parallel stages') {
steps {
        parallel(
        "Parallel stage #1":
                  {
                  //running a script instead of DSL. In this case to run an if/else
                  script{
                    if (env.run_test_only =='yes')
                        {
                        echo env.firstEnvVar
                        }
                    else
                        {
                        echo env.secondEnvVar
                        }
                  }
         },
        "Parallel stage #2":{
                echo "${thirdEnvVar}"
                }
                )
             }
        }
    }
//6. post actions for success or failure of job. Commented out in the following code: Example on how to add a node where a stage is specifically executed. Also, PublishHTML is also a good plugin to expose Cucumber reports but we are using a plugin using Json.
   
post {
        success {
        //node('node1'){
echo "Test succeeded"
            script {
    // configured from using gmail smtp Manage Jenkins-> Configure System -> Email Notification
    // SMTP server: smtp.gmail.com
    // Advanced: Gmail user and pass, use SSL and SMTP Port 465
    // Capitalized variables are Jenkins variables – see https://wiki.jenkins.io/display/JENKINS/Building+a+software+project
                mail(bcc: '',
                     body: "Run ${JOB_NAME}-#${BUILD_NUMBER} succeeded. To get more details, visit the build results page: ${BUILD_URL}.",
                     cc: '',
                     from: 'jenkins-admin@gmail.com',
                     replyTo: '',
                     subject: "${JOB_NAME} ${BUILD_NUMBER} succeeded",
                     to: env.notification_email)
                     if (env.archive_war =='yes')
                     {
             // ArchiveArtifact plugin
                        archiveArtifacts '**/java-calculator-*-SNAPSHOT.jar'
                      }
                       // Cucumber report plugin
                      cucumber fileIncludePattern: '**/java-calculator/target/cucumber-report.json', sortingMethod: 'ALPHABETICAL'
            //publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: true, reportDir: '/home/reports', reportFiles: 'reports.html', reportName: 'Performance Test Report', reportTitles: ''])
            }
        //}
        }
        failure {
            echo "Test failed"
            mail(bcc: '',
                body: "Run ${JOB_NAME}-#${BUILD_NUMBER} succeeded. To get more details, visit the build results page: ${BUILD_URL}.",
                 cc: '',
                 from: 'jenkins-admin@gmail.com',
                 replyTo: '',
                 subject: "${JOB_NAME} ${BUILD_NUMBER} failed",
                 to: env.notification_email)
                 cucumber fileIncludePattern: '**/java-calculator/target/cucumber-report.json', sortingMethod: 'ALPHABETICAL'
//publishHTML([allowMissing: true, alwaysLinkToLastBuild: false, keepAll: true, reportDir: '/home/tester/reports', reportFiles: 'reports.html', reportName: 'Performance Test Report', reportTitles: ''])
        }
    }
}

始终检查管道语法以了解如何在Jenkinsfile中使用不同的插件。

Pipeline Syntax

一封电子邮件通知表明构建成功:

Email notification of successful build

成功构建的归档JAR:

Build report

您可以在同一页面上访问Cucumber报告

Cucumber report graph
Cucumber report data

如何创建多分支管道

如果您的项目已具有Jenkins文件,请按照Jenkins文档中的Multibranch Pipeline项目说明进行操作。 它使用Git并假设凭据已配置。 这是传统视图中配置的外观:

Traditional Jenkins configuration

如果这是您第一次创建管道,请按照下列步骤操作:

1.选择打开蓝海

2.选择新建管道

New Pipeline

3.选择Git并插入Git存储库地址。 该存储库当前没有Jenkinsfile。 将会生成SSH密钥; 它将在下一步中使用。

Connect to Git repository

4.转到GitHub。 单击右上角的个人资料头像,然后选择设置。 然后从左侧菜单中选择SSH和GPG密钥 ,并插入Jenkins提供的SSH密钥。

Add new SSH key

5.返回到Jenkins,然后单击创建管道 。 如果项目不包含Jenkins文件,则Jenkins将提示您创建一个新文件。

Notification that no Jenkinsfile exists

6.单击创建管道后 ,交互式管道图将提示您通过单击+添加阶段。 您可以将并行或顺序阶段以及多个步骤添加到每个阶段。 列表为步骤提供了不同的选项。

Create pipeline

7.下图显示了三个阶段(阶段1,阶段2a和阶段2b),其中简单的打印消息指示步骤。 您还可以添加环境变量并指定将在哪个代理中执行Jenkinsfile。

Specify agent

单击“ 保存” ,然后单击“ 保存并运行”以提交新的Jenkinsfile。

Save pipeline

您也可以添加一个新分支。

Commit to new branch

8.作业将执行。

Executing job
Executing job

如果添加了新分支,则可以在GitHub中看到它。

Branch in GitHub

9.如果创建了另一个带有Jenkinsfile的分支,则可以通过单击立即扫描多分支管道来发现它。 在这种情况下,将在Master上的GitHub中创建一个名为new-feature-2的新分支(在Jenkins中仅显示具有Jenkinsfiles的分支)。

New feature added

扫描后,新分支出现在Jenkins中。

New branch in Jenkins

这个新功能是直接使用GitHub创建的; Jenkins执行扫描时将检测到新分支。 如果您不希望新发现的管道在发现时执行,请通过单击作业的“多分支管道”主页上的“ 配置 ”并添加属性“ 抑制自动SCM触发”来更改设置。 这样,詹金斯将发现新的管道,但必须手动触发它们。

Suppress automatic SCM triggering

本文最初发布在Medium的ITNext频道上,经许可转载。

翻译自: https://opensource.com/article/18/4/jenkins-pipelines-with-cucumber

jenkins 入门

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值