Nay*_*iya 87 continuous-integration jenkins jenkins-pipeline
我正在尝试将旧式项目基础工作流转换为基于Jenkins的管道.在浏览文档时,我发现有两种不同的语法命名scripted和declarative.比如declarative最近的Jenkins web 语法发布(2016年底).虽然有一个新的语法版本,但Jenkins仍然支持脚本语法.
现在,我不确定这两种类型中哪一种最适合.scripted语法很快就会被弃用?那么declarativeJenkins管道的未来会是什么?
任何可以分享关于这两种语法类型的想法的人.
Nay*_*iya 74
当Jenkins Pipeline首次创建时,Groovy被选为基础.Jenkins长期以来一直使用嵌入式Groovy引擎为管理员和用户提供高级脚本编写功能.此外,Jenkins Pipeline的实现者发现Groovy是构建现在被称为"Scripted Pipeline"DSL的坚实基础.
由于它是一个功能齐全的编程环境,Scripted Pipeline为Jenkins用户提供了极大的灵活性和可扩展性.Groovy学习曲线通常不适合给定团队的所有成员,因此创建Declarative Pipeline是为了为Jenkins Pipeline创作提供更简单,更具见解性的语法.
这两个基本上都是下面的Pipeline子系统.它们都是"Pipeline as code"的持久实现.他们都能够使用Pipeline内置的步骤或插件提供的步骤.两者都能够使用共享库
然而,它们的区别在于语法和灵活性.声明性限制用户可以使用更严格和预定义的结构,使其成为更简单的连续交付管道的理想选择.Scripted提供的限制很少,因为结构和语法的唯一限制往往由Groovy本身定义,而不是任何管道专用系统,使其成为高级用户和需求更复杂的用户的理想选择.顾名思义,Declarative Pipeline鼓励声明性编程模型.脚本管道遵循更为命令式的编程模型.
复制自https://jenkins.io/doc/book/pipeline/syntax/#compare
Cod*_*dyK 51
另一件需要考虑的事情是声明性管道有一个script()步骤.这可以运行任何脚本化管道.所以我的建议是使用声明性管道,如果需要,可以使用script()脚本化管道.因此,您将获得两全其美.
eam*_*234 15
我最近从使用kubernetes代理编写的脚本切换到声明式。直到18年7月,声明性管道还没有完全指定kubernetes容器的能力。但是,通过添加该yamlFile步骤,您现在可以从存储库中的yaml文件中读取Pod模板。
然后,这使您可以使用例如vscode的出色kubernetes插件来验证您的pod模板,然后将其读入Jenkinsfile并按需要使用容器。
pipeline {
agent {
kubernetes {
label 'jenkins-pod'
yamlFile 'jenkinsPodTemplate.yml'
}
}
stages {
stage('Checkout code and parse Jenkinsfile.json') {
steps {
container('jnlp'){
script{
inputFile = readFile('Jenkinsfile.json')
config = new groovy.json.JsonSlurperClassic().parseText(inputFile)
containerTag = env.BRANCH_NAME + '-' + env.GIT_COMMIT.substring(0, 7)
println "pipeline config ==> ${config}"
} // script
} // container('jnlp')
} // steps
} // stage
Run Code Online (Sandbox Code Playgroud)
如上所述,您可以添加脚本块。具有自定义jnlp和docker的示例pod模板。
apiVersion: v1
kind: Pod
metadata:
name: jenkins-pod
spec:
containers:
- name: jnlp
image: jenkins/jnlp-slave:3.23-1
imagePullPolicy: IfNotPresent
tty: true
- name: rsync
image: mrsixw/concourse-rsync-resource
imagePullPolicy: IfNotPresent
tty: true
volumeMounts:
- name: nfs
mountPath: /dags
- name: docker
image: docker:17.03
imagePullPolicy: IfNotPresent
command:
- cat
tty: true
volumeMounts:
- name: docker
mountPath: /var/run/docker.sock
volumes:
- name: docker
hostPath:
path: /var/run/docker.sock
- name: nfs
nfs:
server: 10.154.0.3
path: /airflow/dags
Run Code Online (Sandbox Code Playgroud)
bur*_*ttk 13
声明似乎是更具有前瞻性的选择,也是人们推荐的选择.它是Visual Pipeline Editor唯一可以支持的.它支持验证.它最终拥有脚本的大部分功能,因为你可以在大多数情况下回归脚本.偶尔会有人提出一个用例,他们不能完全按照声明的方式做他们想做的事情,但这通常是那些已经使用脚本一段时间的人,这些功能差距很可能会及时关闭.
更多背景:https://jenkins.io/blog/2017/02/03/declarative-pipeline-ga/
Jenkins文档正确地解释并比较了这两种类型.
引用:"Scripted Pipeline为Jenkins用户提供了极大的灵活性和可扩展性.对于给定团队的所有成员来说,Groovy学习曲线通常并不理想,因此创建Declarative Pipeline是为了提供更简单,更具见解性的语法.创作詹金斯管道.
这两者基本上都是下面的管道子系统."
在这里阅读更多内容:https://jenkins.io/doc/book/pipeline/syntax/#compare
| 归档时间: |
|
| 查看次数: |
52993 次 |
| 最近记录: |