mirror of
				https://github.com/vyos/vyos-build.git
				synced 2025-10-01 20:28:40 +02:00 
			
		
		
		
	Jenkins: initial support for shared build libraries
Instead of writing the same code over and over again, place the common parts into a Jenkins Library which is then consumed by every individual build Job. This not only makes it less complex, but also increases maintainability by several magnitudes.
This commit is contained in:
		
							parent
							
								
									3656075d27
								
							
						
					
					
						commit
						7ab2724c33
					
				
							
								
								
									
										57
									
								
								packages/netfilter/Jenkinsfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										57
									
								
								packages/netfilter/Jenkinsfile
									
									
									
									
										vendored
									
									
								
							| @ -14,52 +14,8 @@ | ||||
| // along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| @NonCPS | ||||
| 
 | ||||
| def getGitBranchName() { | ||||
|     def branch = scm.branches[0].name | ||||
|     return branch.split('/')[-1] | ||||
| } | ||||
| 
 | ||||
| def getGitRepoURL() { | ||||
|     return scm.userRemoteConfigs[0].url | ||||
| } | ||||
| 
 | ||||
| def getGitRepoName() { | ||||
|     return getGitRepoURL().split('/').last() | ||||
| } | ||||
| 
 | ||||
| // Returns true if this is a custom build launched on any project fork. | ||||
| // Returns false if this is build from git@github.com:vyos/<reponame>. | ||||
| // <reponame> can be e.g. vyos-1x.git or vyatta-op.git | ||||
| def isCustomBuild() { | ||||
|     // GitHub organisation base URL | ||||
|     def gitURI = 'git@github.com:vyos/' + getGitRepoName() | ||||
|     def httpURI = 'https://github.com/vyos/' + getGitRepoName() | ||||
| 
 | ||||
|     return !((getGitRepoURL() == gitURI) || (getGitRepoURL() == httpURI)) || env.CHANGE_ID | ||||
| } | ||||
| 
 | ||||
| def setDescription() { | ||||
|     def item = Jenkins.instance.getItemByFullName(env.JOB_NAME) | ||||
| 
 | ||||
|     // build up the main description text | ||||
|     def description = "" | ||||
|     description += "<h2>VyOS individual package build: " + getGitRepoName().replace('.git', '') + "</h2>" | ||||
| 
 | ||||
|     if (isCustomBuild()) { | ||||
|         description += "<p style='border: 3px dashed red; width: 50%;'>" | ||||
|         description += "<b>Build not started from official Git repository!</b><br>" | ||||
|         description += "<br>" | ||||
|         description += "Repository: <font face = 'courier'>" + getGitRepoURL() + "</font><br>" | ||||
|         description += "Branch: <font face = 'courier'>" + getGitBranchName() + "</font><br>" | ||||
|         description += "</p>" | ||||
|     } else { | ||||
|         description += "Sources taken from Git branch: <font face = 'courier'>" + getGitBranchName() + "</font><br>" | ||||
|     } | ||||
| 
 | ||||
|     item.setDescription(description) | ||||
|     item.save() | ||||
| } | ||||
| /* Using a version specifier library, use 'current' branch */ | ||||
| @Library('vyos-build@current') | ||||
| 
 | ||||
| /* Only keep the 10 most recent builds. */ | ||||
| def projectProperties = [ | ||||
| @ -101,13 +57,20 @@ pipeline { | ||||
|         CHANGESET_DIR = "**/${env.BASE_DIR}*" | ||||
|     } | ||||
|     options { | ||||
|         disableConcurrentBuilds() | ||||
|         timeout(time: 60, unit: 'MINUTES') | ||||
|         timestamps() | ||||
|     } | ||||
|     stages { | ||||
|         stage('Fetch') { | ||||
|             when { | ||||
|                 beforeOptions true | ||||
|                 beforeAgent true | ||||
|                 anyOf { | ||||
|                     changeset "${env.CHANGESET_DIR}" | ||||
|                     triggeredBy 'TimerTrigger' | ||||
|                     triggeredBy cause: "UserIdCause" | ||||
|                 } | ||||
|             } | ||||
|             steps { | ||||
|                 script { | ||||
| @ -190,6 +153,7 @@ pipeline { | ||||
|             deleteDir() | ||||
|         } | ||||
|         success { | ||||
|             script { | ||||
|                 // archive *.deb artifact on custom builds, deploy to repo otherwise | ||||
|                 if ( isCustomBuild()) { | ||||
|                     archiveArtifacts artifacts: '**/*.deb', allowEmptyArchive: true | ||||
| @ -197,3 +161,4 @@ pipeline { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
							
								
								
									
										6
									
								
								vars/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								vars/README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| # Jenkins Build Library | ||||
| 
 | ||||
| Instead of writing the same code over and over again, place the common | ||||
| parts into a Jenkins Library which is then consumed by every individual | ||||
| build Job. This not only makes it less complex, it also increases | ||||
| maintainability by several magnitudes. | ||||
							
								
								
									
										21
									
								
								vars/getGitBranchName.groovy
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								vars/getGitBranchName.groovy
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| #!/usr/bin/env groovy | ||||
| // Copyright (C) 2020 VyOS maintainers and contributors | ||||
| // | ||||
| // This program is free software; you can redistribute it and/or modify | ||||
| // in order to easy exprort images built to "external" world | ||||
| // it under the terms of the GNU General Public License version 2 or later as | ||||
| // published by the Free Software Foundation. | ||||
| // | ||||
| // This program is distributed in the hope that it will be useful, | ||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| // GNU General Public License for more details. | ||||
| // | ||||
| // You should have received a copy of the GNU General Public License | ||||
| // along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| def call() { | ||||
|     def branch = scm.branches[0].name | ||||
|     return branch.split('/')[-1] | ||||
| } | ||||
| 
 | ||||
							
								
								
									
										20
									
								
								vars/getGitRepoName.groovy
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								vars/getGitRepoName.groovy
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
| #!/usr/bin/env groovy | ||||
| // Copyright (C) 2020 VyOS maintainers and contributors | ||||
| // | ||||
| // This program is free software; you can redistribute it and/or modify | ||||
| // in order to easy exprort images built to "external" world | ||||
| // it under the terms of the GNU General Public License version 2 or later as | ||||
| // published by the Free Software Foundation. | ||||
| // | ||||
| // This program is distributed in the hope that it will be useful, | ||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| // GNU General Public License for more details. | ||||
| // | ||||
| // You should have received a copy of the GNU General Public License | ||||
| // along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| def call() { | ||||
|     return getGitRepoURL().split('/').last() | ||||
| } | ||||
| 
 | ||||
							
								
								
									
										20
									
								
								vars/getGitRepoURL.groovy
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								vars/getGitRepoURL.groovy
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
| #!/usr/bin/env groovy | ||||
| // Copyright (C) 2020 VyOS maintainers and contributors | ||||
| // | ||||
| // This program is free software; you can redistribute it and/or modify | ||||
| // in order to easy exprort images built to "external" world | ||||
| // it under the terms of the GNU General Public License version 2 or later as | ||||
| // published by the Free Software Foundation. | ||||
| // | ||||
| // This program is distributed in the hope that it will be useful, | ||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| // GNU General Public License for more details. | ||||
| // | ||||
| // You should have received a copy of the GNU General Public License | ||||
| // along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| def call() { | ||||
|     return scm.userRemoteConfigs[0].url | ||||
| } | ||||
| 
 | ||||
							
								
								
									
										26
									
								
								vars/isCustomBuild.groovy
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								vars/isCustomBuild.groovy
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| #!/usr/bin/env groovy | ||||
| // Copyright (C) 2020 VyOS maintainers and contributors | ||||
| // | ||||
| // This program is free software; you can redistribute it and/or modify | ||||
| // in order to easy exprort images built to "external" world | ||||
| // it under the terms of the GNU General Public License version 2 or later as | ||||
| // published by the Free Software Foundation. | ||||
| // | ||||
| // This program is distributed in the hope that it will be useful, | ||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| // GNU General Public License for more details. | ||||
| // | ||||
| // You should have received a copy of the GNU General Public License | ||||
| // along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| def call() { | ||||
|     // Returns true if this is a custom build launched on any project fork. | ||||
|     // Returns false if this is build from git@github.com:vyos/<reponame>. | ||||
|     // <reponame> can be e.g. vyos-1x.git or vyatta-op.git | ||||
|     // GitHub organisation base URL | ||||
|     def gitURI = 'git@github.com:vyos/' + getGitRepoName() | ||||
|     def httpURI = 'https://github.com/vyos/' + getGitRepoName() | ||||
| 
 | ||||
|     return !((getGitRepoURL() == gitURI) || (getGitRepoURL() == httpURI)) || env.CHANGE_ID | ||||
| } | ||||
							
								
								
									
										38
									
								
								vars/setDescription.groovy
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								vars/setDescription.groovy
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | ||||
| #!/usr/bin/env groovy | ||||
| // Copyright (C) 2020 VyOS maintainers and contributors | ||||
| // | ||||
| // This program is free software; you can redistribute it and/or modify | ||||
| // in order to easy exprort images built to "external" world | ||||
| // it under the terms of the GNU General Public License version 2 or later as | ||||
| // published by the Free Software Foundation. | ||||
| // | ||||
| // This program is distributed in the hope that it will be useful, | ||||
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| // GNU General Public License for more details. | ||||
| // | ||||
| // You should have received a copy of the GNU General Public License | ||||
| // along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| def call() { | ||||
|     def item = Jenkins.instance.getItemByFullName(env.JOB_NAME) | ||||
| 
 | ||||
|     // build up the main description text | ||||
|     def description = "" | ||||
|     description += "<h2>VyOS individual package build: " + getGitRepoName().replace('.git', '') + "</h2>" | ||||
| 
 | ||||
|     if (isCustomBuild()) { | ||||
|         description += "<p style='border: 3px dashed red; width: 50%;'>" | ||||
|         description += "<b>Build not started from official Git repository!</b><br>" | ||||
|         description += "<br>" | ||||
|         description += "Repository: <font face = 'courier'>" + getGitRepoURL() + "</font><br>" | ||||
|         description += "Branch: <font face = 'courier'>" + getGitBranchName() + "</font><br>" | ||||
|         description += "</p>" | ||||
|     } else { | ||||
|         description += "Sources taken from Git branch: <font face = 'courier'>" + getGitBranchName() + "</font><br>" | ||||
|     } | ||||
| 
 | ||||
|     item.setDescription(description) | ||||
|     item.save() | ||||
| } | ||||
| 
 | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user