feat(podman): add method to generate podman based docker image package
This commit is contained in:
46
vars/gomplate.groovy
Normal file
46
vars/gomplate.groovy
Normal file
@ -0,0 +1,46 @@
|
||||
void call(String sourceTemplate, String destFile, Map env = [:], Map options = [:]) {
|
||||
String gomplateBin = getOrInstallGomplate(options)
|
||||
|
||||
sh """
|
||||
${exportEnvMap(env)}
|
||||
${gomplateBin} -f '${sourceTemplate}' > '${destFile}'
|
||||
"""
|
||||
}
|
||||
|
||||
String exportEnvMap(Map env) {
|
||||
String exports = ''
|
||||
|
||||
env.each { item ->
|
||||
exports = """
|
||||
${exports}
|
||||
export ${item.key}="${item.value}"
|
||||
"""
|
||||
}
|
||||
|
||||
return exports
|
||||
}
|
||||
|
||||
String getOrInstallGomplate(Map options = [:]) {
|
||||
String installDir = options.get('installDir', '/usr/local/bin')
|
||||
String version = options.get('version', '3.10.0')
|
||||
Boolean forceDownload = options.get('forceDownload', false)
|
||||
String downloadUrl = options.get('downloadUrl', "https://github.com/hairyhenderson/gomplate/releases/download/v${version}/gomplate_linux-amd64")
|
||||
|
||||
String gomplateBin = ''
|
||||
|
||||
lock("${env.NODE_NAME}:gomplate-install") {
|
||||
gomplateBin = sh(returnStdout: true, script: 'which gomplate || exit 0').trim()
|
||||
|
||||
if (gomplateBin == '' || forceDownload) {
|
||||
sh("""
|
||||
mkdir -p '${installDir}'
|
||||
curl -o '${installDir}/gomplate' -sSL '${downloadUrl}'
|
||||
chmod +x '${installDir}/gomplate'
|
||||
""")
|
||||
|
||||
gomplateBin = "${installDir}/gomplate"
|
||||
}
|
||||
}
|
||||
|
||||
return gomplateBin
|
||||
}
|
@ -1,25 +1,37 @@
|
||||
// Package project with nfpm
|
||||
// See https://nfpm.goreleaser.com/
|
||||
def package(Map options = [:]) {
|
||||
String installDir = options.get("nfpmInstallDir", "/usr/local/bin")
|
||||
String nfpmVersion = options.get("nfpmVersion", "2.15.1")
|
||||
String nfpmForceDownload = options.get("nfpmForceDownload", false)
|
||||
String nfpmDownloadUrl = options.get("nfpmDownloadUrl", "https://github.com/goreleaser/nfpm/releases/download/${nfpmVersion}/nfpm_${nfpmVersion}_Linux_x86_64.tar.gz")
|
||||
String nfpmConfig = options.get("nfpmConfig", "nfpm.yaml")
|
||||
String nfpmTarget = options.get("nfpmTarget", ".")
|
||||
String nfpmPackager = options.get("nfpmPackager", "")
|
||||
/**
|
||||
* Générer des paquets Debian, RPM, Alpine (ipk) via nfpm
|
||||
* Voir See https://nfpm.goreleaser.com/
|
||||
*
|
||||
* Options:
|
||||
* - installDir - Répertoire d'installation du binaire nfpm, par défaut /usr/local/bin
|
||||
* - version - Version de nfpm à installer, par défaut 2.15.1
|
||||
* - forceDownload - Forcer l'installation de nfpm, par défaut false
|
||||
* - config - Fichier de configuration nfpm à utiliser, par défaut nfpm.yaml
|
||||
* - target - Répertoire cible pour nfpm, par défaut ./dist
|
||||
* - packager - Limiter l'exécution de nfpm à un packager spécifique, par défaut "deb" (i.e. pas de limitation)
|
||||
*/
|
||||
void call(Map options = [:]) {
|
||||
String installDir = options.get('installDir', '/usr/local/bin')
|
||||
String version = options.get('version', '2.20.0')
|
||||
Boolean forceDownload = options.get('forceDownload', false)
|
||||
String downloadUrl = options.get('downloadUrl', "https://github.com/goreleaser/nfpm/releases/download/v${version}/nfpm_${version}_Linux_x86_64.tar.gz")
|
||||
String config = options.get('config', 'nfpm.yaml')
|
||||
String target = options.get('target', env.WORKSPACE + '/dist')
|
||||
String packager = options.get('packager', 'deb')
|
||||
|
||||
String nfpmBin = sh(returnStdout: true, script: 'which nfpm').trim("")
|
||||
if (nfpmBin == "" || nfpmForceDownload) {
|
||||
String nfpmBin = sh(returnStdout: true, script: 'which nfpm || exit 0').trim()
|
||||
if (nfpmBin == '' || forceDownload) {
|
||||
sh("""
|
||||
mkdir -p '${installDir}'
|
||||
curl -L '${nfpmDownloadUrl}' > /tmp/nfpm.tar.gz
|
||||
curl -L '${downloadUrl}' > /tmp/nfpm.tar.gz
|
||||
tar -C /usr/local/bin -xzf /tmp/nfpm.tar.gz
|
||||
""")
|
||||
|
||||
nfpmBin = "${installDir}/nfpm"
|
||||
}
|
||||
|
||||
sh("""
|
||||
export PATH='${installDir}:${env.PATH}'
|
||||
nfpm --config '${nfpmConfig}' ${nfpmPackager ? "--packager "+nfpmPackager : ""} --target '${nfpmTarget}'
|
||||
mkdir -p '${target}'
|
||||
${nfpmBin} package --config '${config}' ${packager ? '--packager ' + packager : ''} --target '${target}'
|
||||
""")
|
||||
}
|
||||
|
44
vars/podman.groovy
Normal file
44
vars/podman.groovy
Normal file
@ -0,0 +1,44 @@
|
||||
void buildCadolesPodPackage(String imageName, String imageTag, Map options = [:]) {
|
||||
String destDir = options.get('destDir', env.WORKSPACE + '/dist')
|
||||
Map nfpmOptions = options.get('nfpmOptions', [:])
|
||||
|
||||
nfpmOptions['target'] = destDir
|
||||
|
||||
Map env = options.get('env', [:])
|
||||
|
||||
env['IMAGE_NAME'] = imageName
|
||||
env['IMAGE_TAG'] = imageTag
|
||||
|
||||
withPodmanPackagingTempDir {
|
||||
gomplate('post-install.sh.gotmpl', 'post-install.sh', env)
|
||||
gomplate('pod.service.gotmpl', 'pod.service', env)
|
||||
gomplate('pod.conf.gotmpl', 'pod.conf', env)
|
||||
gomplate('nfpm.yaml.gotmpl', 'nfpm.yaml', env)
|
||||
|
||||
nfpm(nfpmOptions)
|
||||
}
|
||||
}
|
||||
|
||||
void withPodmanPackagingTempDir(Closure fn) {
|
||||
File tempDir = File.createTempDir()
|
||||
tempDir.deleteOnExit()
|
||||
|
||||
tempDir.mkdirs()
|
||||
|
||||
dir(tempDir.getAbsolutePath()) {
|
||||
List<String> resources = [
|
||||
'com/cadoles/podman/nfpm.yaml.gotmpl',
|
||||
'com/cadoles/podman/pod.conf.gotmpl',
|
||||
'com/cadoles/podman/pod.service.gotmpl',
|
||||
'com/cadoles/podman/post-install.sh.gotmpl',
|
||||
]
|
||||
|
||||
for (res in resources) {
|
||||
String fileContent = libraryResource res
|
||||
String fileName = res.substring(res.lastIndexOf('/') + 1)
|
||||
writeFile file:fileName, text:fileContent
|
||||
}
|
||||
|
||||
fn()
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user