Jenkinsfile 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. node {
  2. environment {
  3. static_BUILD_NUMBER = '9'
  4. //dotnet = 'C:/Program Files/dotnet/sdk/3.0.100-preview8-013656/dotnet.exe'
  5. }
  6. stage 'Checkout'
  7. checkout scm
  8. stage 'Build'
  9. // clean artifacts folder, otherwise version file from previous build may still there.
  10. dir('sln_build/LiteFccCore3') {
  11. deleteDir()
  12. }
  13. def jkBuildNumber = env.BUILD_NUMBER
  14. def buildTimeStr = new Date().format('yyyy-MM-dd_HH-mm-ss')
  15. echo "Jenkins env.BUILD_NUMBER: " + jkBuildNumber + ", buildTimeStr: " + buildTimeStr
  16. def manualVersionFromFile = readFile("version.txt")
  17. manualVersionFromFile = manualVersionFromFile.replaceAll(~/\n/, "").trim()
  18. echo "Manual Version read from file version.txt is: " + manualVersionFromFile
  19. currentBuild.description = "manual Ver: " + manualVersionFromFile
  20. def assemblyVersionStr = manualVersionFromFile + "." + jkBuildNumber
  21. echo "AssemblyVersionStr (manualVersion + JenkinsBuildNumber) set to: " + assemblyVersionStr
  22. //bat 'dotnet restore LiteFccCore.sln'
  23. //bat 'dotnet build -c release LiteFccCoreMain/LiteFccCoreMain.csproj'
  24. //def dotnetPublishCommandText = "dotnet publish /p:AssemblyVersion=\"${env.BUILD_NUMBER}\" -c release LiteFccCoreMain/LiteFccCoreMain.csproj"
  25. 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"
  26. bat dotnetPublishCommandText_win_x64
  27. 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"
  28. bat dotnetPublishCommandText_win_x86
  29. 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"
  30. bat dotnetPublishCommandText_linux_arm
  31. 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"
  32. bat dotnetPublishCommandText_linux_arm_64
  33. //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"
  34. //bat dotnetPublishCommandText_linux_arm_self_contained
  35. stage 'UnitTests'
  36. bat returnStatus: true, script: "dotnet test \"${workspace}/LiteFccCore.sln\" --logger \"trx;LogFileName=unit_tests.xml\" "
  37. step([$class: 'MSTestPublisher', testResultsFile:"**/unit_tests.xml", failOnError: true, keepLongStdio: true])
  38. stage 'Archive'
  39. def releaseNoteFileName = manualVersionFromFile + "." + jkBuildNumber + "_(" + buildTimeStr + ")_ReleaseNote.txt"
  40. echo "ReleaseNote file name will be set to (ManualVersion + JenkinsBuildNumber + buildTime): " + releaseNoteFileName
  41. 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
  42. //echo releaseNoteFileContentHeader
  43. echo "ReleaseNoteFileContentHeader: " + releaseNoteFileContentHeader
  44. latestCommit = bat(returnStdout: true, script: "git log -n 80")
  45. releaseNoteFileContent = releaseNoteFileContentHeader + "\r\n\r\n\r\n" + latestCommit
  46. // echo shortCommit
  47. // prepare a release note file in artifacts root folder
  48. writeFile(file: releaseNoteFileName, text: releaseNoteFileContent, encoding: "UTF-8")
  49. // write the releaseNote file into publish folder, need modify, will break for other net core version (from 2.1)
  50. writeFile(file: "sln_build/LiteFccCore3/" + releaseNoteFileName, text: releaseNoteFileContent, encoding: "UTF-8")
  51. archiveArtifacts artifacts: 'sln_build/LiteFccCore3/**', casesensitive: false
  52. archiveArtifacts artifacts: releaseNoteFileName, casesensitive: false
  53. }
  54. def sendmail(jobName,committer){
  55. def mailRecipients = "YourEmail1@company.com YourEmail2@company.com YourEmail3@company.com"
  56. emailext body: '''${JELLY_SCRIPT,template="PlaygroundMerge"}''',
  57. mimeType: 'text/html',
  58. subject: "Merge job create by ${committer} status - ${currentBuild.result}",
  59. to: "${mailRecipients};${committer}",
  60. replyTo: "${mailRecipients}",
  61. recipientProviders: [[$class: 'CulpritsRecipientProvider']]
  62. }
  63. def changelist() {
  64. def changes = ""
  65. currentBuild.changeSets.each { set ->
  66. set.each { entry ->
  67. changes += "${entry.commitId} by ${entry.author.fullName}\n"
  68. }
  69. }
  70. return changes
  71. }
  72. def notifyBitbucket(String state) {
  73. println "Notify Bitbucket With " + state + ", Commit = " + "${Commit}"
  74. if('SUCCESS' == state || 'FAILED' == state) {
  75. currentBuild.result = state // Set result of currentBuild !Important!
  76. }
  77. notifyBitbucket commitSha1: '${Commit}',
  78. credentialsId: 'Bitbucket_PG_Global_For_Notification_User_Pass',
  79. disableInprogressNotification: false,
  80. considerUnstableAsSuccess: false,
  81. ignoreUnverifiedSSLPeer: true,
  82. includeBuildNumberInKey: false,
  83. prependParentProjectKey: false,
  84. projectKey: '',
  85. stashServerBaseUrl: 'http://www.your_BitBucket_Server:7990'
  86. }