node { environment { static_BUILD_NUMBER = '9' //dotnet = 'C:/Program Files/dotnet/sdk/3.0.100-preview8-013656/dotnet.exe' } stage 'Checkout' checkout scm stage 'Build' // clean artifacts folder, otherwise version file from previous build may still there. dir('sln_build/LiteFccCore3') { deleteDir() } def jkBuildNumber = env.BUILD_NUMBER def buildTimeStr = new Date().format('yyyy-MM-dd_HH-mm-ss') echo "Jenkins env.BUILD_NUMBER: " + jkBuildNumber + ", buildTimeStr: " + buildTimeStr def manualVersionFromFile = readFile("version.txt") manualVersionFromFile = manualVersionFromFile.replaceAll(~/\n/, "").trim() echo "Manual Version read from file version.txt is: " + manualVersionFromFile currentBuild.description = "manual Ver: " + manualVersionFromFile def assemblyVersionStr = manualVersionFromFile + "." + jkBuildNumber echo "AssemblyVersionStr (manualVersion + JenkinsBuildNumber) set to: " + assemblyVersionStr //bat 'dotnet restore LiteFccCore.sln' //bat 'dotnet build -c release LiteFccCoreMain/LiteFccCoreMain.csproj' //def dotnetPublishCommandText = "dotnet publish /p:AssemblyVersion=\"${env.BUILD_NUMBER}\" -c release LiteFccCoreMain/LiteFccCoreMain.csproj" def dotnetPublishCommandText_win_x64 = "dotnet publish -f netcoreapp3.1 -r win-x64 --self-contained false /p:AssemblyVersion=\"${assemblyVersionStr}\" /p:Version=\"${assemblyVersionStr}\" /p:FileVersion=\"${assemblyVersionStr}\" -c release LiteFccCore.sln -o sln_build/LiteFccCore3/win_x64" bat dotnetPublishCommandText_win_x64 def dotnetPublishCommandText_win_x86 = "dotnet publish -f netcoreapp3.1 -r win-x86 --self-contained false /p:AssemblyVersion=\"${assemblyVersionStr}\" /p:Version=\"${assemblyVersionStr}\" /p:FileVersion=\"${assemblyVersionStr}\" -c release LiteFccCore.sln -o sln_build/LiteFccCore3/win_x86" bat dotnetPublishCommandText_win_x86 def dotnetPublishCommandText_linux_arm = "dotnet publish -f netcoreapp3.1 -r linux-arm --self-contained false /p:AssemblyVersion=\"${assemblyVersionStr}\" /p:Version=\"${assemblyVersionStr}\" /p:FileVersion=\"${assemblyVersionStr}\" -c release LiteFccCore.sln -o sln_build/LiteFccCore3/linux_armhf" bat dotnetPublishCommandText_linux_arm def dotnetPublishCommandText_linux_arm_64 = "dotnet publish -f netcoreapp3.1 -r linux-arm64 --self-contained false /p:AssemblyVersion=\"${assemblyVersionStr}\" /p:Version=\"${assemblyVersionStr}\" /p:FileVersion=\"${assemblyVersionStr}\" -c release LiteFccCore.sln -o sln_build/LiteFccCore3/linux_arm64" bat dotnetPublishCommandText_linux_arm_64 //def dotnetPublishCommandText_linux_arm_self_contained = "dotnet publish -f netcoreapp3.1 -r linux-arm --self-contained true /p:AssemblyVersion=\"${assemblyVersionStr}\" /p:Version=\"${assemblyVersionStr}\" /p:FileVersion=\"${assemblyVersionStr}\" -c release LiteFccCore.sln -o sln_build/LiteFccCore3/linux_arm_self_contained" //bat dotnetPublishCommandText_linux_arm_self_contained stage 'UnitTests' bat returnStatus: true, script: "dotnet test \"${workspace}/LiteFccCore.sln\" --logger \"trx;LogFileName=unit_tests.xml\" " step([$class: 'MSTestPublisher', testResultsFile:"**/unit_tests.xml", failOnError: true, keepLongStdio: true]) stage 'Archive' def releaseNoteFileName = manualVersionFromFile + "." + jkBuildNumber + "_(" + buildTimeStr + ")_ReleaseNote.txt" echo "ReleaseNote file name will be set to (ManualVersion + JenkinsBuildNumber + buildTime): " + releaseNoteFileName releaseNoteFileContentHeader = "BUILD_NUMBER: " + env.BUILD_NUMBER + ", BUILD_ID: " + env.BUILD_ID + ", BUILD_URL: " + env.BUILD_URL + ", NODE_NAME: " + env.NOTDE_NAME + ", JOB_NAME: " + env.JOB_NAME //echo releaseNoteFileContentHeader echo "ReleaseNoteFileContentHeader: " + releaseNoteFileContentHeader latestCommit = bat(returnStdout: true, script: "git log -n 80") releaseNoteFileContent = releaseNoteFileContentHeader + "\r\n\r\n\r\n" + latestCommit // echo shortCommit // prepare a release note file in artifacts root folder writeFile(file: releaseNoteFileName, text: releaseNoteFileContent, encoding: "UTF-8") // write the releaseNote file into publish folder, need modify, will break for other net core version (from 2.1) writeFile(file: "sln_build/LiteFccCore3/" + releaseNoteFileName, text: releaseNoteFileContent, encoding: "UTF-8") archiveArtifacts artifacts: 'sln_build/LiteFccCore3/**', casesensitive: false archiveArtifacts artifacts: releaseNoteFileName, casesensitive: false } def sendmail(jobName,committer){ def mailRecipients = "YourEmail1@company.com YourEmail2@company.com YourEmail3@company.com" emailext body: '''${JELLY_SCRIPT,template="PlaygroundMerge"}''', mimeType: 'text/html', subject: "Merge job create by ${committer} status - ${currentBuild.result}", to: "${mailRecipients};${committer}", replyTo: "${mailRecipients}", recipientProviders: [[$class: 'CulpritsRecipientProvider']] } def changelist() { def changes = "" currentBuild.changeSets.each { set -> set.each { entry -> changes += "${entry.commitId} by ${entry.author.fullName}\n" } } return changes } def notifyBitbucket(String state) { println "Notify Bitbucket With " + state + ", Commit = " + "${Commit}" if('SUCCESS' == state || 'FAILED' == state) { currentBuild.result = state // Set result of currentBuild !Important! } notifyBitbucket commitSha1: '${Commit}', credentialsId: 'Bitbucket_PG_Global_For_Notification_User_Pass', disableInprogressNotification: false, considerUnstableAsSuccess: false, ignoreUnverifiedSSLPeer: true, includeBuildNumberInKey: false, prependParentProjectKey: false, projectKey: '', stashServerBaseUrl: 'http://www.your_BitBucket_Server:7990' }