1
+ pipeline {
2
+ agent {
3
+ kubernetes {
4
+ label 'github_deployment'
5
+ defaultContainer 'xc16-mplabx-sonar-fmpp-python'
6
+ yamlFile '.citd/cloudprovider.yml'
7
+ }
8
+ }
9
+
10
+
11
+ environment {
12
+ NOTIFICATION_EMAIL = '
[email protected] '
13
+ //Branch to be deployed, if multiple branches use comma separated string
14
+ //This is the BitBucket source repo URL to be deployed
15
+ BITBUCKET_SOURCE_URL = 'https://bitbucket.microchip.com/scm/mcu16ce/dspic33ck-power-pwm-phase-shift.git'
16
+ BITBUCKET_CREDENTIAL_ID = 'BITBUCKET_INTERNAL_TOKEN'
17
+ GITHUB_PRODUCTION_DEPLOY_URL ='https://github.com/microchip-pic-avr-examples'
18
+ GITHUB_TEST_DEPLOY_URL ='https://github.com/mchpTestArea'
19
+ //Selects the deployment URL(production or test) based on the merge target branch, selects "microchip-pic-avr-examples" if target branch is "master" , if target branch is "test_deploy" selects "mchpTestArea" else null
20
+ GITHUB_URL = getGitHubUrl("${GITHUB_PRODUCTION_DEPLOY_URL}","${GITHUB_TEST_DEPLOY_URL}")
21
+ GITHUB_PRODUCTION_DEPLOY_CREDENTIAL_ID ='GITHUB_MICROCHIP_PIC_AVR_EXAMPLES_TOKEN'
22
+ GITHUB_TEST_DEPLOY_CREDENTIAL_ID ='GITHUB_PIC_AVR_TEST_TOKEN'
23
+ //Gets the Github credential id based on the deployment organization
24
+ GITHUB_CREDENTIAL_ID = getGitHubCredentialId("${GITHUB_URL}","${GITHUB_PRODUCTION_DEPLOY_URL}","${GITHUB_TEST_DEPLOY_URL}","${GITHUB_PRODUCTION_DEPLOY_CREDENTIAL_ID}","${GITHUB_TEST_DEPLOY_CREDENTIAL_ID}")
25
+ //Files or folders to be excluded from deployment, if multiple files or folders use comma separator
26
+ DEPLOY_EXCLUDE_FOLDER_FILE_LIST = 'mchp_private'
27
+ //Branch(s) to be deployed, if multiple branches use comma separator. ${env.BRANCH_NAME} is the target branch of the PR.
28
+ DEPLOY_BRANCH_LIST = "${env.BRANCH_NAME}"
29
+ CHANGE_LOG_PATH = 'changelog.md'
30
+ SOURCE_PROJECT_META_DATA = '.main-meta/main.json'
31
+ DEPLOY_TOOL_URL = 'https://bitbucket.microchip.com/scm/citd/tool-github-deploy.git'
32
+ }
33
+
34
+ options {
35
+ timestamps()
36
+ timeout(time: 20, unit: 'MINUTES')
37
+ }
38
+
39
+ stages {
40
+
41
+ stage('Checkout') {
42
+ steps {
43
+ checkout scm
44
+ }
45
+ }
46
+
47
+ stage('Build') {
48
+ steps {
49
+ script {
50
+ execute("git clone https://bitbucket.microchip.com/scm/citd/tool-mplabx-c-build.git")
51
+ execute("cd ./tool-mplabx-c-build && node buildLauncher.js sp=../ rp=./output genMK=true")
52
+ }
53
+ }
54
+ }
55
+
56
+ // Cloning the tool used for GitHub deployment
57
+ stage('GitHub tool clone'){
58
+ when {
59
+ anyOf {
60
+ allOf {
61
+ not { changeRequest() }
62
+ anyOf {branch 'master'; branch 'test_deploy';}
63
+ }
64
+ }
65
+ }
66
+ steps{
67
+ script{
68
+ execute("git clone https://bitbucket.microchip.com/scm/citd/tool-github-deploy.git")
69
+ execute("chmod +x ./tool-github-deploy/tool-github-deploy/tool-github-deploy.py")
70
+ }
71
+ }
72
+ }
73
+
74
+ // Creating tag in Bitbucket repo
75
+ stage('Bitbucket Tag Creation'){
76
+ when {
77
+ anyOf {
78
+ allOf {
79
+ not { changeRequest() }
80
+ anyOf {branch 'master';}
81
+ }
82
+ }
83
+ }
84
+ steps{
85
+ script{
86
+ def jsonObj = readJsonObject();
87
+
88
+ withCredentials([usernamePassword(credentialsId: "${env.BITBUCKET_CREDENTIAL_ID}", passwordVariable: 'PASS', usernameVariable: 'USER_NAME')]) {
89
+ execute("python tool-github-deploy/tool-github-deploy/tool-github-deploy.py -bto=true -rpn=\"${jsonObj.content.projectName}\" -bid=$USER_NAME -bpat=$PASS -bpn=MCU16CE -btv=\"${jsonObj.content.version}\" -bch=${env.GIT_COMMIT} -btd=\"${jsonObj.content.version}\"")
90
+ }
91
+ }
92
+ }
93
+ }
94
+
95
+ // GitHub repo creation
96
+ stage('GitHub Repo Creation'){
97
+ when {
98
+ anyOf {
99
+ allOf {
100
+ not { changeRequest() }
101
+ anyOf {branch 'master'; branch 'test_deploy';}
102
+ }
103
+ }
104
+ }
105
+ steps{
106
+ script{
107
+ def jsonObj = readJsonObject();
108
+
109
+ String [] topics = jsonObj.content.keywords
110
+ def asString = topics.join(", ")
111
+ Boolean visibility = true
112
+ if(env.GITHUB_URL == env.GITHUB_PRODUCTION_DEPLOY_URL)
113
+ {
114
+ visibility = false
115
+ }
116
+
117
+ withCredentials([usernamePassword(credentialsId: "${env.GITHUB_CREDENTIAL_ID}", passwordVariable: 'PASS', usernameVariable: 'USER_NAME')]) {
118
+ execute("python tool-github-deploy/tool-github-deploy/tool-github-deploy.py -rpo=true -gpat=$PASS -rporg=${env.GITHUB_URL} -rpn=${jsonObj.content.projectName} -rpd=\"${jsonObj.content.shortDescription}\" -rpt=\"${asString}\" -rpp=${visibility}")
119
+ }
120
+ }
121
+ }
122
+ }
123
+
124
+ // Deploying the code to GitHub
125
+ stage('GitHub Deploy Source'){
126
+ when {
127
+ anyOf {
128
+ allOf {
129
+ not { changeRequest() }
130
+ anyOf {branch 'master'; branch 'test_deploy';}
131
+ }
132
+ }
133
+ }
134
+ steps{
135
+ script{
136
+ def jsonObj = readJsonObject();
137
+ def gitHubUrl = "${env.GITHUB_URL}" + "/" + jsonObj.content.projectName
138
+ gitHubUrl = gitHubUrl.replace(" ", "").replace("\n", "")
139
+
140
+ withCredentials([usernamePassword(credentialsId: "${env.GITHUB_CREDENTIAL_ID}", passwordVariable: 'PASS', usernameVariable: 'USER_NAME')]) {
141
+ execute("python tool-github-deploy/tool-github-deploy/tool-github-deploy.py -deploy=true -gpat=$PASS -dgid=$USER_NAME -dburl=${env.BITBUCKET_SOURCE_URL} -dgurl=${gitHubUrl} -dbranch=${env.DEPLOY_BRANCH_LIST} -def=${env.DEPLOY_EXCLUDE_FOLDER_FILE_LIST}")
142
+ }
143
+ }
144
+ }
145
+ }
146
+
147
+ // Creating GitHub release
148
+ stage('GitHub release'){
149
+ when {
150
+ anyOf {
151
+ allOf {
152
+ not { changeRequest() }
153
+ anyOf {branch 'master'; branch 'test_deploy';}
154
+ }
155
+ }
156
+ }
157
+ steps{
158
+ script{
159
+ def jsonObj = readJsonObject();
160
+
161
+ withCredentials([usernamePassword(credentialsId: "${env.GITHUB_CREDENTIAL_ID}", passwordVariable: 'PASS', usernameVariable: 'USER_NAME')]) {
162
+ execute("python tool-github-deploy/tool-github-deploy/tool-github-deploy.py -rlo=true -gpat=$PASS -rporg=${env.GITHUB_URL} -rpn=\"${jsonObj.content.projectName}\" -rltv=\"${jsonObj.content.version}\" -rltt=\"${jsonObj.content.version}\" -rlnp=${env.CHANGE_LOG_PATH}")
163
+ }
164
+ }
165
+ }
166
+ }
167
+
168
+ //Deploying the Github content to portal
169
+ stage('Portal-Deploy') {
170
+ when {
171
+ allOf {
172
+ not { changeRequest() }
173
+ anyOf {branch 'master';}
174
+ }
175
+ }
176
+ steps {
177
+ script {
178
+ def jsonObj = readJsonObject();
179
+ def version = jsonObj.content.version
180
+ def project = jsonObj.content.projectName
181
+
182
+ String[] splitPreTag = "${env.GITHUB_URL}".split("/")
183
+ def gitHubOrg = (splitPreTag[splitPreTag.size() - 1])
184
+
185
+ def cmdArgs = "'{\"repoOwnerName\":\"$gitHubOrg\",\"repoName\":\"$project\",\"tagName\":\"$version\"}'"
186
+ cmdArgs = cmdArgs.replaceAll("\"","\\\\\"")
187
+
188
+ execute("git clone https://bitbucket.microchip.com/scm/portal/bundles.git")
189
+ execute("cd bundles && chmod 755 ./portal-client-cli-linux")
190
+ execute("git clone https://bitbucket.microchip.com/scm/citd/tool-portal-client-launcher.git")
191
+ execute("cd tool-portal-client-launcher && node portalLauncher.js -app=../bundles/portal-client-cli-linux -cmd=\"uploadGitHub ${cmdArgs}\"")
192
+ }
193
+ }
194
+ }
195
+
196
+ }
197
+
198
+ post {
199
+ success{
200
+ script {
201
+ if (!"${env.CHANGE_AUTHOR_EMAIL}".equalsIgnoreCase("null")) {
202
+ archiveArtifacts artifacts: "tool-mplabx-c-build/output/**", fingerprint: true
203
+ mail to: "${env.CHANGE_AUTHOR_EMAIL}, ${env.NOTIFICATION_EMAIL}",
204
+ subject: "Successful Pipeline: ${currentBuild.fullDisplayName}",
205
+ body: "Something is right with ${env.BUILD_URL}"
206
+ } else {
207
+ archiveArtifacts artifacts: "tool-mplabx-c-build/output/**", fingerprint: true
208
+ mail to: "${env.NOTIFICATION_EMAIL}",
209
+ subject: "Successful Pipeline: ${currentBuild.fullDisplayName}",
210
+ body: "Something is right with ${env.BUILD_URL}"
211
+ }
212
+ }
213
+ }
214
+ failure {
215
+ script {
216
+ if (!"${env.CHANGE_AUTHOR_EMAIL}".equalsIgnoreCase("null")) {
217
+ archiveArtifacts artifacts: "tool-mplabx-c-build/output/**", fingerprint: true
218
+ mail to: "${env.CHANGE_AUTHOR_EMAIL}, ${env.NOTIFICATION_EMAIL}",
219
+ subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
220
+ body: "Pipeline failure. ${env.BUILD_URL}"
221
+ } else {
222
+ archiveArtifacts artifacts: "tool-mplabx-c-build/output/**", fingerprint: true
223
+ mail to: "${env.NOTIFICATION_EMAIL}",
224
+ subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
225
+ body: "Pipeline failure. ${env.BUILD_URL}"
226
+ }
227
+ }
228
+ }
229
+ }
230
+ }
231
+
232
+ def execute(String command) {
233
+ if (isUnix()) {
234
+ sh command
235
+ } else {
236
+ bat command
237
+ }
238
+ }
239
+
240
+ String readJsonObject() {
241
+ def jsonObj = readJSON interpolate: true, file: "${env.SOURCE_PROJECT_META_DATA}"
242
+ return jsonObj
243
+ }
244
+ def getGitHubUrl(String productionUrl, String testDeployUrl) {
245
+ String branchName = "${env.BRANCH_NAME}";
246
+ if(branchName == 'master') {
247
+ return productionUrl;
248
+ } else if(branchName == 'test_deploy') {
249
+ return testDeployUrl;
250
+ } else {
251
+ return null
252
+ }
253
+ }
254
+ def getGitHubCredentialId(String deployUrl, String productionDeployUrl, String testDeployUrl, String githubProductionDeployCredential, String githubTestDeployCredential) {
255
+ if(deployUrl == productionDeployUrl) {
256
+ return githubProductionDeployCredential;
257
+ } else if(deployUrl == testDeployUrl) {
258
+ return githubTestDeployCredential;
259
+ } else {
260
+ return null
261
+ }
262
+ }
0 commit comments