Jenkins 修改成流水线
我们目前有个项目还是手动构建jar包,然后上传到服务器,手动执行脚本启动这种特别古早的部署方式,主要还是生产环境异常严格的网络限制造成的,最早我是搭建了一套Jenkins,但是因为机器不通网的问题,导致很多插件无法安装,包括最重要的流水线。
那么之前的话,我都是使用maven 直接构建,然后通过shell脚本的方式上传的我们的应用服务器,然后执行远程脚本实现的一键部署的操作,但是也有很多不方便的地方,比如分支得手动修改,有时候忘了修改就白弄了。去年年底有空的时候,我把原来的Jenkins铲了,重新搞了一套。因为没有网,我就在本地搭建了一个虚拟机,安装好了Jenkins,以及所有能用到的插件,然后重新在这台机器上安装并搬运了所有的插件,这样才完成了jenkins 的升级跟插件安装,就此,有了流水线的插件。
接下来就是将maven 构建直接转换成流水线的方式构建了,可以做到构建之前自动拉去分支,然后选择分支构建的能力,这样就做到了完美的一件部署的能力了。🎉🎉🎉
配置流水线之前,我已经提前配置好ssh密钥,可以做到免密拉取代码跟scp了
pipeline {
agent any
parameters {
string(name: 'GIT_REPO', defaultValue: '[email protected]', description: 'Git 仓库地址')
choice(name: 'BRANCH', choices: getGitBranches(), description: '请选择要构建的分支')
}
stages {
stage('Checkout') {
steps {
echo "Checking out branch: ${params.BRANCH}"
git branch: "${params.BRANCH}",
url: "${params.GIT_REPO}"
}
}
stage('Build') {
steps {
echo "Running Maven Build"
sh '/usr/local/apache-maven-3.8.8/bin/mvn clean package -DskipTests'
}
}
stage('Upload Artifact') {
steps {
echo "Uploading build artifact to target server"
sh """
scp /var/lib/jenkins/workspace/gtjai-bpm-pip/bpm-admin/target/xxxxxxx.jar [email protected]:/data/apps/xxxxxxxx/
"""
}
}
stage('Restart Application') {
steps {
echo "Restarting application on target server"
sh """
ssh [email protected] "cd /data/apps/xxxxxxx && sh bpm-run.sh restart"
"""
}
}
}
}
// 动态获取 Git 分支列表的函数
def getGitBranches() {
def branches = []
// 使用 Jenkins 凭据进行 Git 操作
node {
// 获取远程 Git 仓库的分支列表
branches = sh(script: """
git ls-remote --heads [email protected] | awk '{print \$2}' | sed 's/refs\\/heads\\///g'
""", returnStdout: true).trim().split("\n")
// 输出分支列表
echo "Branches: ${branches.join(', ')}"
}
// 返回分支列表
return branches.collect { it.trim() } // 确保返回的是一个列表
}
其他文章