一直关注DevOps很久了,一直没有时间尝试,最近花了一些时间搭建了Jenkins,用的Docker方式安装的,刚开始用的镜像是Jenkins-blueocean版(海洋版),但是这个版本有个很大的问题,就是基于alpine linux的镜像,该操作系统操作方式和ubuntu、centos有区别,而且安装插件也不太方便(个人操作体验,网上也有人说这个方便)。
所以最后使用了 docker pull jenkins/jenkins 这个镜像,安装方式这里就不讲了,网上有很多教程。主要分享一下pipeline打包项目的脚本。我们的项目比较复杂,涉及Java、.NetCore、vue三种语言
前提:jenkins安装插件 maven、jdk
docker容器里安装插件svn、dotnet插件(进入容器的方法docker exec -it -uroot jenkins bash)
先创建一个流水线任务
2、提前安装插件 maven、jdk
def curDateTime=''
def path = 'tmp'
def svnUserName = ''
def svnPassword = ''
import java.text.SimpleDateFormat
pipeline {
agent any
environment {
def BUILDVERSION = sh(script: "echo `date +%Y%m%d%H%M%S`", returnStdout: true).trim()
}
tools {
// Install the Maven version configured as "M3" and add it to the path.
maven "Maven387"
jdk "java1.8"
}
stages {
stage('生成版本') {
steps{
script{
def dateFormat = new SimpleDateFormat('yyyyMMdd')
def date = new Date()
curDateTime = 'Build_'+ dateFormat.format(date)
}
}
}
stage('环境验证') {
steps {
nodejs('NodeJs14') {
sh 'node -v'
sh 'npm -v'
sh 'dotnet --info'
}
}
}
stage('拉取源码') {
steps {
echo '开始拉取代码'
checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[cancelProcessOnExternalsFail: true, credentialsId: 'zhangsan', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'SVN地址']], quietOperation: true, workspaceUpdater: [$class: 'UpdateUpdater']])
echo '拉取代码完成'
}
}
stage('生成web项目') {
steps{
dir('./web') {
echo '删除上次生成结果文件夹'
sh 'rm -rf ./dist'
echo '开始生成项目'
nodejs('NodeJs14') {
sh 'npm install'
sh "npm run build"
}
echo '生成项目结束'
}
}
}
stage('生成dotnet项目') {
steps{
dir('./dotnet') {
echo '删除上次生成结果文件夹'
sh 'rm -rf ./out'
echo '开始生成项目'
sh 'dotnet publish xxxxxxxxxxx.sln -c Release -r linux-x64 -o out --self-contained false'
//sh "\\cp -rf ./dotnet/resources/* ./out/" //一些静态资源的拷贝
echo '生成项目结束'
}
}
}
stage('生成java项目') {
steps{
dir('./java') {
echo '开始生成项目'
sh 'mvn -Dmaven.test.skip=true -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true clean package '
echo '生成项目结束'
}
}
}
stage('制作包') {
steps{
echo '打包程序结束....'
}
}
stage('上传到SVN') {
steps{
dir('./tmp') {
echo '开始上传'
sh "svn import -m \"上传包\" xxx.zip http://192.168.60.11/svn//${curDateTime}.zip --username ${svnUserName} --password ${svnPassword} "
echo '上传结束'
}
}
}
stage('部署项目') {
steps{
dir('./tmp') {
echo '开始部署'
echo '部署结束'
}
}
}
}
}