我们通过Jenkins做自动化部署的过程中,建议安装以下插件
Simple Theme 插件
使用此插件可以隐藏pipeline打印的命令。比如下面的echo:
image.png-
安装
image.png - 配置
在 Manage Jenkins / Configure System / Theme 中,Add / Extra CSS,设置如下样式以隐藏:
.pipeline-new-node {
display: none;
}
Docker Pipeline
如果我们想在pipeline中使用docker作为agent,则必须安装此插件
Error: Invalid agent type "docker" specified.
You have to install 2 plugins: Docker plugin and Docker Pipeline plugin.
Pipeline Groovy Libraries
Pipeline Groovy Libraries是用来配置Jenkins Shared Library的。
Jenkins Shared Library可以把Pipeline中的片段抽象成通用的脚本,为不同的pipeline(比如maven\vue)等共用。
-
安装
image.png -
配置
Manage Jenkins » Configure System » Global Pipeline Libraries
Pipeline utility steps
如果想在pipeline的脚本中读取yaml配置文件,需要此插件
n: groovy.lang.MissingMethodException: No signature of method: readYaml.call()
要使用readYaml,jenkins必须安装插件:pipeline utility steps
-
安装
image.png
- 用法
#!groovy
def call() {
Map cfg = readYaml file: "pipeline.yaml"
return cfg
}
Active Choices插件
Jenkins Params默认情况下,只能输入一些简单的select或input,相互之间无法做联动。这时就需要Active Choices插件
image.png- 例如:
发布时,我有两个参数:发布的环境(test/pre/prod)、发布的分支
需求:当环境为prod时,分支只能为master,不能修改;当环境为test/pre时,分支默认是dev,可以修改
pipeline 如下:
pipeline {
agent any
stages {
stage('Params') {
steps {
script {
properties([parameters([
[$class: 'DynamicReferenceParameter',
choiceType: 'ET_FORMATTED_HTML',
description: '请选择要发布的环境(test:测试、pre:预生产、prod:生产)',
name: 'envType',
omitValueField: true,
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [],
sandbox: true,
script:
"return['Could not get The environemnts']"
],
script: [
classpath: [],
sandbox: true,
script:'''
return "<select name='value' class='setting-input' style='width:50%'> <option value='test' selected='true'>test</option><option value='pre'>pre</option><option value='prod'>prod</option></select>"
'''
]
]
],
[$class: 'DynamicReferenceParameter',
choiceType: 'ET_FORMATTED_HTML',
description: '请选择要发布的分支(prod环境下只能选择master分支)',
name: 'branch',
referencedParameters: 'envType',
// 删除原始的input,否则后端获取到的值会两个input用逗号拼接出来的(即多出一个,号)
omitValueField: true,
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [],
sandbox: true,
script:
"return['Could not get The environemnts']"
],
script: [
classpath: [],
sandbox: true,
script:'''
if (envType.equals("prod")){
return "<input name='value' class='setting-input' type='text' style='width:50%;background-color: lightgray;' value='master' disabled>"
}
else{
return "<input name='value' class='setting-input' type='text' style='width:50%' value='dev'>"
}
'''
]
]
]
])
])
}
}
}
stage('Checkout') {
steps {
echo '...'
}
}
stage('Test') {
steps {
echo '...'
}
stage('Build') {
steps {
echo '...'
}
}
stage('Deploy') {
steps {
echo '...'
}
}
}
post {
always {
echo '...'
}
}
}
网友评论