示例
前端
groovy
pipeline {
agent any
options {
durabilityHint('PERFORMANCE_OPTIMIZED')
}
environment {
ENV_FILE = ''
}
stages {
stage('打印环境变量') {
steps {
sh 'printenv'
}
}
stage('拉取代码') {
steps {
script {
echo "开始拉取代码..."
echo "仓库地址: ${env.GIT_URL}"
echo "分支: ${env.GIT_BRANCH}"
}
checkout([
$class: 'GitSCM',
branches: [[name: env.GIT_BRANCH]],
userRemoteConfigs: [[
url: env.GIT_URL,
credentialsId: 'git-devops'
]]
])
sh 'pwd && ls -al'
}
}
stage('设置环境') {
steps {
script {
echo "current branches: ${env.GIT_BRANCH}"
def envFile = ''
switch(env.GIT_BRANCH) {
case 'origin/ci-dev':
case 'ci-dev':
envFile = '.ci/.env.dev'
break
case 'origin/ci-test':
case 'ci-test':
envFile = '.ci/.env.test'
break
case 'origin/ci-online':
case 'ci-online':
envFile = '.ci/.env.online'
break
default:
error "不支持的分支:${env.GIT_BRANCH}"
}
echo "当前构建分支:${env.GIT_BRANCH}"
echo "加载环境变量文件:${envFile}"
// 加载环境变量
def envMap = readProperties file: envFile
envMap.each { key, value ->
env."${key}" = value
}
sh 'printenv'
}
}
}
stage('Node 14 构建') {
agent {
kubernetes {
label 'node-14-pod'
defaultContainer 'node-14'
yaml """
apiVersion: v1
kind: Pod
spec:
hostNetwork: true
nodeSelector:
dns-access: 'true'
containers:
- name: node-14
image: node:14
env:
- name: JENKINS_TUNNEL
value: ${JENKINS_TUNNEL}
- name: JENKINS_URL
value: ${JENKINS_URL}
command: ['cat']
tty: true
volumeMounts:
- name: npm-cache
mountPath: /tmp/npm/
volumes:
- name: npm-cache
persistentVolumeClaim:
claimName: npm-cache-pvc
"""
}
}
steps {
container('node-14') {
sh 'npm config set sass_binary_site=https://npmmirror.com/mirrors/node-sass/'
sh 'npm config set strict-ssl false'
sh "npm config set cache /tmp/npm"
sh "npm ci --registry=https://registry.npmmirror.com && ${BUILD_COMMAND}"
sh 'pwd && ls -l'
sh 'tar czf dist.tar.gz -C dist .'
script {
archiveArtifacts artifacts: 'dist.tar.gz', fingerprint: true
}
}
}
}
stage('上传复制发布') {
steps {
copyArtifacts(
projectName: env.JOB_NAME,
selector: [
$class: 'SpecificBuildSelector',
buildNumber: "${BUILD_NUMBER}"
],
filter: "dist.tar.gz",
fingerprintArtifacts: true
)
sshagent (credentials: [env.SSH_KEY_ID]) {
sh """
scp dist.tar.gz ${SSH_USER}@${SSH_HOST}:${SSH_COPY_PATH}
ssh ${SSH_USER}@${SSH_HOST} ${DEPLOY}
"""
}
}
}
}
}
后端
groovy
pipeline {
agent any
options {
durabilityHint('PERFORMANCE_OPTIMIZED')
}
environment {
ENV_FILE = ''
}
stages {
stage('打印环境变量') {
steps {
sh 'printenv'
}
}
stage('拉取代码') {
steps {
script {
echo "开始拉取代码..."
echo "仓库地址: ${env.GIT_URL}"
echo "分支: ${env.GIT_BRANCH}"
}
checkout([
$class: 'GitSCM',
branches: [[name: env.GIT_BRANCH]],
userRemoteConfigs: [[
url: env.GIT_URL,
credentialsId: 'git-devops'
]]
])
sh 'pwd && ls -al'
}
}
stage('设置环境') {
steps {
script {
echo "current branches: ${env.GIT_BRANCH}"
def envFile = ''
switch(env.GIT_BRANCH) {
case 'origin/ci-dev':
case 'ci-dev':
envFile = '.ci/.env.dev'
break
case 'origin/ci-test':
case 'ci-test':
envFile = '.ci/.env.test'
break
case 'origin/ci-online':
case 'ci-online':
envFile = '.ci/.env.online'
break
default:
error "不支持的分支:${env.GIT_BRANCH}"
}
echo "当前构建分支:${env.GIT_BRANCH}"
echo "加载环境变量文件:${envFile}"
// 加载环境变量
def envMap = readProperties file: envFile
envMap.each { key, value ->
env."${key}" = value
}
sh 'printenv'
}
}
}
stage('Maven 构建') {
agent {
kubernetes {
label 'maven-pod'
defaultContainer 'maven'
yaml """
apiVersion: v1
kind: Pod
spec:
hostNetwork: true
nodeSelector:
dns-access: 'true'
containers:
- name: maven
image: maven:3.9.6-eclipse-temurin-8
env:
- name: JENKINS_TUNNEL
value: ${JENKINS_TUNNEL}
- name: JENKINS_URL
value: ${JENKINS_URL}
command: ['cat']
tty: true
volumeMounts:
- name: maven-settings
mountPath: /root/.m2/settings.xml
subPath: settings.xml
- name: maven-cache
mountPath: /tmp/maven/
volumes:
- name: maven-settings
configMap:
name: maven-settings-config
- name: maven-cache
persistentVolumeClaim:
claimName: maven-cache-pvc
"""
}
}
steps {
container('maven') {
sh "mvn clean package -T 8C -s ${MAVEN_SETTINGS}"
sh 'pwd'
script {
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
}
}
}
}
stage('上传与重启服务') {
parallel {
stage('API 服务部署') {
steps {
copyArtifacts(
projectName: env.JOB_NAME,
selector: [
$class: 'SpecificBuildSelector',
buildNumber: "${BUILD_NUMBER}"
],
filter: "**/${JAR_NAME_API}",
fingerprintArtifacts: true
)
sshagent (credentials: [env.SSH_KEY_ID]) {
sh """
scp ${JAR_PATH_API}/${JAR_NAME_API} ${SSH_USER}@${SSH_HOST}:${SSH_COPY_PATH_API}
ssh ${SSH_USER}@${SSH_HOST} ${RESTART_API}
"""
}
}
}
stage('SCHEDULE 服务部署') {
steps {
copyArtifacts(
projectName: env.JOB_NAME,
selector: [
$class: 'SpecificBuildSelector',
buildNumber: "${BUILD_NUMBER}"
],
filter: "**/${JAR_NAME_SCHEDULE}",
fingerprintArtifacts: true
)
sshagent (credentials: [env.SSH_KEY_ID]) {
sh """
scp ${JAR_PATH_SCHEDULE}/${JAR_NAME_SCHEDULE} ${SSH_USER}@${SSH_HOST}:${SSH_COPY_PATH_SCHEDULE}
ssh ${SSH_USER}@${SSH_HOST} ${RESTART_SCHEDULE}
"""
}
}
}
}
}
}
}