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/pic24f-lcd-usb-curiosity-lcd-power.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