本文目录导读:

我来详细介绍Jenkins脚本的生成方式,主要包括两种:声明式流水线和脚本式流水线。
声明式流水线 (Declarative Pipeline)
基础结构
pipeline {
agent any
stages {
stage('构建') {
steps {
echo '执行构建...'
}
}
stage('测试') {
steps {
echo '执行测试...'
}
}
stage('部署') {
steps {
echo '执行部署...'
}
}
}
}
使用流水线语法生成器
通过Jenkins界面生成
-
进入流水线语法
- 打开任意Pipeline任务
- 点击左侧的"流水线语法"
-
选择步骤类型
- 从下拉菜单中选择需要的步骤
git,sh,echo等
-
配置参数
- 填写所需的参数
- 点击"生成流水线脚本"
示例:生成git步骤
// 通过语法生成器生成的Git步骤
git branch: 'main',
url: 'https://github.com/your-repo/project.git',
credentialsId: 'github-credentials'
常用脚本模板
完整CI/CD示例
pipeline {
agent any
environment {
APP_NAME = 'myapp'
NODE_VERSION = '16'
}
tools {
nodejs 'NodeJS-16'
}
parameters {
string(name: 'BRANCH', defaultValue: 'main', description: '分支名称')
choice(name: 'ENV', choices: ['dev', 'staging', 'prod'], description: '部署环境')
}
stages {
stage('Checkout') {
steps {
checkout scmGit(
branches: [[name: parameters.BRANCH]],
userRemoteConfigs: [[url: 'https://github.com/example/project.git']]
)
}
}
stage('安装依赖') {
steps {
sh 'npm install'
}
}
stage('运行测试') {
steps {
sh 'npm test'
}
post {
success {
junit 'reports/**/*.xml'
}
}
}
stage('构建') {
steps {
sh 'npm run build'
}
}
stage('代码质量检查') {
steps {
sh 'npm run lint'
sonarQubeEnv: 'SonarQubeServer'
}
}
stage('Docker构建') {
steps {
sh """
docker build -t ${APP_NAME}:${BUILD_NUMBER} .
docker tag ${APP_NAME}:${BUILD_NUMBER} registry.example.com/${APP_NAME}:latest
"""
}
}
stage('部署') {
when {
expression { ENV == 'prod' }
}
steps {
sh 'kubectl apply -f deployment.yaml'
}
}
}
post {
always {
archiveArtifacts artifacts: 'dist/**/*.zip'
cleanWs()
}
success {
echo '构建成功!'
}
failure {
echo '构建失败!'
}
}
}
高级脚本模式
使用共享库
// libraries.groovy
def buildDockerImage(String imageName) {
sh """
docker build -t ${imageName}:${BUILD_NUMBER} .
docker push ${imageName}:${BUILD_NUMBER}
"""
}
// Jenkinsfile
@Library('my-shared-library')_
import com.example.DockerUtils
pipeline {
agent any
stages {
stage('使用共享库') {
steps {
script {
DockerUtils.buildAndPush('myapp', 'latest')
}
}
}
}
}
包含外部脚本
// 方法1: 使用sh步骤
stage('运行外部脚本') {
steps {
sh './scripts/deploy.sh'
}
}
// 方法2: 使用load步骤
stage('加载外部Groovy脚本') {
steps {
load 'pipeline/helpers.groovy'
// 现在可以使用helpers中定义的方法
}
}
生成特定步骤的示例
发送邮件
emailext(
subject: "构建结果: ${env.JOB_NAME} - ${env.BUILD_NUMBER}",
body: "构建状态: ${currentBuild.currentResult}\n\n查看详情: ${env.BUILD_URL}",
to: 'team@example.com',
from: 'jenkins@example.com'
)
触发下游任务
build job: 'deploy-service',
parameters: [
string(name: 'VERSION', value: env.BUILD_NUMBER),
string(name: 'ENVIRONMENT', value: 'production')
]
最佳实践建议
代码复用
def buildAngularApp() {
sh 'npm install && npm run build'
}
def runUnitTests() {
sh 'npm test -- --coverage'
}
pipeline {
agent any
stages {
stage('Build') {
steps { buildAngularApp() }
}
stage('Test') {
steps { runUnitTests() }
}
}
}
使用Credential
withCredentials([string(credentialsId: 'api-token', variable: 'TOKEN')]) {
sh 'curl -H "Authorization: Bearer $TOKEN" http://api.example.com/deploy'
}
常用助手资源
-
Jenkins Pipeline Syntax Generator
- 路径: 任务 → 流水线语法
- 提供可视化的代码生成
-
Pipeline Steps Reference
- 路径: http://your-jenkins/pipeline-syntax/
- 查看所有可用步骤
-
Declarative Directive Generator
- 路径: http://your-jenkins/pipeline-syntax/declare
- 生成声明式指令
需要我针对特定场景(如Docker构建、Kubernetes部署、多分支流水线等)提供更详细的示例吗?