jinkensfile基本语法

发现了一个比较好的教程:https://blog.csdn.net/u011541946/category_8223796.html
官网教程:https://www.jenkins.io/doc/book/pipeline/


1 jinkensfile模板

#! groovy
//定义全局变量
def DEPLOY_ENVIRONMENT = "dev"
def DEPLOY_VER = "1.1"

pipeline {
    agent { //整个pipline在哪个环境里跑,node可在jinkens里配置
        label 'node'  
    }
    environment { //所有步骤的环境变量
        DB_USERNAME = 'admin'
        DB_PASSWORD = credentials('password')
    }
    options { //在Pipeline本身内配置Pipeline专用选项
        disableConcurrentBuilds()
        ansiColor('xterm')
    }
    parameters { //参数,可在UI上配置,也可以写在jinkensfile代码里,但是代码里是明文,并且是hardcode
        string(name: 'userName', defaultValue: 'Anthony', description: 'please give a name')
        choice(name: 'version', choices: ['1.1', '1.2', '1.3'], description: 'select the version to test')
        booleanParam(name: 'is_boy', defaultValue: true, description: 'you is boy or not')
        password(name:'PASSWORD',defaultValue:'SECRET',description:'A secret password')
        text(name:'',defaultValue:'One\nTwo\nThree\n',)
    }

    stages { //Pipeline的所有步骤都在stages里
        stage('Start') {//流水线的阶段
            steps { //阶段中的一个或多个步骤
                script {}//script脚本标签,可以通过此标签嵌入脚本式语法。
            }
        }
        stage('Init Env') {
            steps {
                dir("${WORKSPACE}/dir1/dir2/"){//执行脚本目录
                    sh "bash -xe install_packages.sh Albert"
                }
            }
        }
        stage('Test') {
            steps {
        echo "Test "
                dir("${WORKSPACE}/dir3/dir4/") {
                    sh "python3 test.py ${DB_USERNAME} ${DB_PASSWORD}"
                }
            }
        }
    }
    post {
       always{
        }
        }
    }
}

2 pipline执行配置部分

2.1 agent

agent放在顶级pipeline块或每个stage块中,指定整个Pipeline或特定阶段将在执行环境,取决于该agent部分的放置位置。在pipeline部分必须在pipeline块内的顶层定义,stage块内的agent是可选的 。
它可以为这几类型:any,none,label,node,docker

any:当 agent的参数为any时,将由jenkins自己决定,在任何可用的节点上执行pipeline。
none:当在pipeline块的顶层使用none时,将不会为整个pipeline运行分配全局agent,每个stage部分将需要包含其自己的agent部分。
label:在指定标签上的节点上运行Pipeline,可以时集成K8S后配置的 Pod Template 的 标签值。
node:agent{node{label 'labelName'}},等同于 agent{label 'labelName'},但node允许其它选项(如:customWorkspace)。
docker:定义此参数时,执行Pipeline或stage时会动态供应一个docker节点去接受Docker-based的Pipelines。docker可以接受一个args,直接传递给docker run调用。

2.2 environment

定义环境变量。环境变量的作用范围,取决你environment所写的位置。你可以写在顶层让所有的stage下的step共享这些变量;也可以单独定义在某一个stage下,只能供这个stage去调用变量。其他的stage不能共享这些变量。一般来说,我们基本上上定义全局环境变量,如果是局部环境变量,我们直接用def关键字声明就可以,没必要放environment里。

2.2 options

指令允许在Pipeline内配置pipeline专用选项,Pipeline提供了许多这些选项,例如 buildDiscarder,但它们也可能由插件提供,例如:timestamps。

buildDiscarder:持久化工件和控制台输出,用于保存pipeline最近几次运行的数据。
例如:options{buildDiscarder(logRotator(numToKeepStr:'1'))}
checkoutToSubdirectory:在工作区的子目录中执行源代码检出。
例如:options{checkoutToSubdirectory('foo')}
disableConcurrentBuilds:不允许并行执行Pipeline。可用于防止同时访问共享资源等。
例如:options{disableConcurrentBuilds()}
preserveStashes:保留已完成构建的存储,用于 stage 重新启动。
例如:options{preserveStashes()}保存最近完成的构建中的stash
或者:options{preserveStashes(5)}保留最近五次完成的构建中的stash
quietPeriod: 设置管道的静默期(以秒为单位),覆盖全局默认值。
例如:options{quietPeriod(30)}
retry: 如果失败,则按照指定的次数重试整个管道。
例如:options{retry(3)}。
skipDefaultCheckout: 在agent指令中默认跳过源代码检出。
例如:options{skipDefaultCheckout()}
skipStagesAfterUnstable: 一旦构建状态进入了“不稳定”状态,就跳过stage。
例如:options{skipStagesAfterUnstable()}
timeout:设置Pipeline运行的超时时间,之后Jenkins应该终止Pipeline。
例如:options{timeout(time:1,unit:'HOURS')}
timestamps:当执行时,预处理由Pipeline生成的所有控制台输出运行时间。
例如:options{timestamps()}

3 pipline组成部分

stages:流水线中督导各stage的容器。stages部分至少包含一个stage
stage:代表流水线的阶段。每个阶段都必须有名称。外部必须要有stages包裹着,内部必须有section:比如steps
steps:代表阶段中的一个或多个步骤, steps下可以分开写step,也可以不用写step
step:步骤,step 是最基本的操作单元,可以是打印一句话,也可以是构建一个 Docker 镜像,执行条件由 Jenkins 插件提供。比如命令:sh 'make',就相当于我们平时 shell 终端中执行 make 命令一样。

4 执行完成post

post定义将在Pipeline运行或stage结束时运行的操作。一些条件后的块的内支持
post支持的参数:always,changed,failure,success,unstable 和 aborted

always:无论pipeline运行的完成状态如何都会运行。
changed:只有当前pipeline运行的状态与先前完成的pipeline的状态不同时,才能运行
failure:仅当当前Pipeline处于“失败”状态时才运行,通常在Web UI中用红色指示表示
success:仅当当前pipeline具有“成功”状态时才运行,通常在web UI中用蓝色或绿色指示表示
unstable:只有当前pipeline具有“不稳定”状态,通常由测试失败,代码违例等引起,才能运行。
aborted:只有当前Pipeline处于“中止”状态时,才会运行,通常是由于Pipeline被手动中止。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容