后台可回复【1024】即可获取相关宝藏内容分享 :)
Q1: Jenkins是什么??
A:Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
今天文章分为两部分 :)
PART1 Jenkins技术分享 / PART2 关于百度一面杂谈
5 Minutes to Jenkins:
PART 1 创建您的Pipline
学长五分钟带你走进Jenkins大世界 :)
首先什么是 Jenkins Pipeline?
Jenkins Pipeline(或简称为 "Pipeline")是一套插件,将持续交付的实现和实施集成到 Jenkins 中。持续交付 Pipeline 自动化的表达了这样一种流程:将基于版本控制管理的软件持续的交付到您的用户和消费者手中。
Jenkins Pipeline 提供了一套可扩展的工具,用于将“简单到复杂”的交付流程实现为“持续交付即代码”。Jenkins Pipeline 的定义通常被写入到一个文本文件(称为 Jenkinsfile )中,该文件可以被放入项目的源代码控制库中。他其实也有自己的语言逻辑,后面学长也有整理他的语法使用。
快速开始使用 Pipeline:
-
将以下示例 复制到您的仓库中并命名为
Jenkinsfile
-
单击Jenkins中的 New Item 菜单
-
为您的新工程起一个名字 (例如 My Pipeline) ,选择 Multibranch Pipeline
-
单击 Add Source 按钮,选择您想要使用的仓库类型并填写详细信息.
-
单击 Save 按钮,观察您的第一个Pipeline运行!
您可能需要修改 Jenkinsfile
以便应用在您自己的项目中。尝试修改 sh
命令,使其与您本地运行的命令相同。
这里说说pipline 使用语法分两种声明式和脚本式,
这里仅分享声明式
Declarative Pipeline(声明式)核心概念
核心概念用来组织pipeline的运行流程
1.pipeline :声明其内容为一个声明式的pipeline脚本
2.agent:执行节点(job运行的slave或者master节点)
3.stages:阶段集合,包裹所有的阶段(例如:打包,部署等各个阶段)
4.stage:阶段,被stages包裹,一个stages可以有多个stage
5.steps:步骤,为每个阶段的最小执行单元,被stage包裹6.post:执行构建后的操作
根据构建结果来执行对应的操作根据上面几个概念就能够轻易的创建一个简单的pipeline
pipeline{agent anystages{stage("first stage"){steps("first steps"){echo "this is first step"}}}post{always{echo "this is ending..."}}
}
下面针对几个核心概念,逐一进行说明
1.pipeline
作用域:应用于全局最外层,表明该脚本为声明式pipeline
是否必须:必须
参数:无
2.agent
作用域:可用在全局与stage内
是否必须:是,
参数:any,none, label, node,docker,dockerfile
pipeline{agent any //全局必须带有agent表明此pipeline执行节点stages{stage("first stage"){agent { label 'master' } //具体执行的步骤节点,非必须steps{echo "this is first step"}}}}
参数示例:
//运行在任意的可用节点上agent any//全局不指定运行节点,由各自stage来决定agent none//运行在指定标签的机器上,具体标签名称由agent配置决定agent { label 'master' }//node参数可以扩展节点信息agent { node {label 'master'customWorkspace 'xxx'} }//使用指定运行的容器agent { docker 'python' }
3.stages
作用域:全局或者stage阶段内,每个作用域内只能使用一次
是否必须:全局必须
参数:无
pipeline{agent anystages{stage("first stage"){stages{ //嵌套在stage里stage("inside"){steps{echo "inside"}}}}stage("stage2"){steps{echo "outside"}}}}
看下运行结果,发现嵌套的stage也是能够展现在视图里面的
4.stage
作用域:被stages包裹,作用在自己的stage包裹范围内
是否必须:必须
参数:需要一个string参数,表示此阶段的工作内容
备注:stage内部可以嵌套stages,内部可单独制定运行的agent
5.steps
作用域:被stage包裹,作用在stage内部
是否必须:必须
参数:无
6.post
作用域:作用在pipeline结束后者stage结束后
条件:always、changed、failure、success、unstable、aborted
在配置好 Pipeline 之后,Jenkins 会自动检测您仓库中创建的任何新的分支或合并请求, 并开始为它们运行 Pipelines。
关于并行执行
通过将阶段设置为parallel来表明该stage为并行运行,但是需要注意以下几点
-
一个stage只能有一个steps或者parallel
-
嵌套的stages里不能使用parallel
-
parallel不能包含agent或者tools
-
通过设置failFast 为true表示:并行的job中如果其中的一个失败,则终止其他并行的stage
pipeline {agent anystages {stage('Non-Parallel Stage') {steps {echo 'Non-parallel'}}stage('Parallel Stage') {agent anyfailFast trueparallel {stage('parallel 1') {agent anysteps {echo "parallel 1"}}stage('parallel 2') {steps {echo "parallel 2"}}}}}
}
脚本
在声明式的pipeline中默认无法使用脚本语法,但是pipeline提供了一个脚本环境入口:script{},通过使用script来包裹脚本语句,即可使用脚本语法
关于Jenkins的第一期的分享就到这里;
看到这里的同学有福啦,学长分享一波宝藏收藏资源
后台可回复【数据库】即可获取相关内容分享 :)
好!回归每周的闲言碎语!
PART2 >今天来分享一下百度一面的内容扒
分享仅供参考-
面试前的准备:
其实学长面试的岗位属于开发岗位,在此一周前我准备了很多基础知识内容,因为我觉得一面的内容会很基础,不会有太多的算法难题,就把基础巩固了些,每天的午饭时间会认真的看一些b站同学的面试大厂的经验分享,内容或多少些许帮助/其余上下班的路上会看很多的pdf基础考点,毕竟面对大厂的学长还是会有些许方。
其实之所以能够得到百度面试官的赏识是因为一点,我的项目经验有一个面试官觉得不错,这个不错的内容是关于我现在负责的自动化测试平台开发内容,今天的分享内容也是这个平台在用的主要内容,所以幸运的得到了百度的面试邀请,面试时间约在了周六十一点,我个人觉得时间并不是很好,因为饭点了面试官也会饿哈哈哈。
面试开始:
首先面试官直入主题,不需要我自我介绍,依我看来他是个技术,因为程序员都很直接可能,我也是,我理解。不过学长还是在介绍项目的同时强行加入些许自我介绍到其中了,说到自己毕业时间以及接触python的原因。我不想觉得面试把自我介绍省略掉,因为我准备了,心里的介绍背都背熟了/
面试的内容-我总结了较重要的五个问题:
时长-56min
问题1.
面试官欣赏的项目的介绍(具体介绍)因为毕竟他要真正的了解你这个项目到底有没有包装瞎扯,学长是真实的项目介绍,不过没有过多透露商业内容,遵守保密原则哈哈/
问题2.
项目如何搭建以及框架结构使用到了哪些内容。其实也就是他先了解一些,然后逐步进入下一问题。
问题3.
将你这个项目的具体实现描述,最好言简意赅。然后学长拿笔和纸在记录我说的项目内容,视频面试一定要做好纸和笔记录哦!强烈建议,备好🖊和📑这样思路才清晰 将每一个模块细化的说一说。这里我感觉说的时间很长。综上三个问题,我甚至觉得我有些泄露商业秘密,随便调侃了下自己签了保密协议,哈哈面试官也笑着说并不会涉及透露商业机密,大可不必担心,面试官小哥哥还是很nice的,面试到这里感觉卸下了所有防备,就像随意聊天了,面试时候情绪带动其实很重要的,礼仪以及细节等等,我觉得我做的并不会,有心的同学多多看看B站面经视频,或许对你我有所帮助。
问题4.
俱往矣,你做过的最完善的项目是哪一个?我回答的是之前的项目,因为我之前项目是一个产品化项目,现在的平台虽然也在做产品化内容了,但是还没有具体落地完成/这个问题回答的感觉也还好,因为我其实并不太了解这个产品卖给谁 但我知道是toB模式的商业路线,盈利多少我哪里知道 ,但是不知道这里也要强行装一下下。
问题5.
学习中那个技术让你觉得最困难最值得讲述? 这问题我有点懵,我觉得都,都难,但我本能的想了一下DRF(DJANGO-restframwork)这个框架其实深入理解的确很难,需要自己去读一些他的源码内容,因为默认返回的很多都不能满足后端或者前端的需求,总之熟悉一个框架你需要读他的源码,我认为算是“难点”。就将“读”DRF以及其他项目源码内容说了说,其中也讲述了些自己学习了机器学习分类聚合以及深度学习神经网络,以及自己爱记录自己学习遇到的难点到博客或者公众号中。
最后分享下我第一轮面试完的感悟和技巧:
第一轮面试总的来说,并不会很难,也不会问你算法或者数据结构或者造飞机的知识,问的很实际,问你项目具体内容,很具体很具体的那种,还会根据面试的过程,通过你的项目介绍掺杂问你一些用到的技术栈,如果有新意有亮点,面试官一定会给你的面试结果填上不错的一笔,同时会记录你的面试过程,在过程中你会发现自己的不足,面试结束我来总结了Jenkins的使用,哈哈算是给自己补一补课,下次面试发挥更好吧。
或许很多人在等待面试的时候都是非常严肃而焦虑的等待着,这里告诉大家千万别这样,这样只能增加你的紧张感,你要多和你身边的人聊天,其实在前一周收到通知时候学长还是很激动的,甚至会有些许失眠,但是面试一结束还是如释重负一般。生活是苦难的,我们还要迎着苦难而上才可以呀!加油!
希望分享的内容对你我都有帮助