From 169b391455062e4bf3ffbd4d662f749dde5aa4d9 Mon Sep 17 00:00:00 2001 From: The_Spider Date: Fri, 1 Apr 2022 21:12:44 -0500 Subject: [PATCH] converts to declarative format --- nordvpn-autoconfigure.jenkins | 199 ++++++++++++++++++++-------------- 1 file changed, 118 insertions(+), 81 deletions(-) diff --git a/nordvpn-autoconfigure.jenkins b/nordvpn-autoconfigure.jenkins index ef4d337..f7833d6 100644 --- a/nordvpn-autoconfigure.jenkins +++ b/nordvpn-autoconfigure.jenkins @@ -1,39 +1,87 @@ #!groovy -// repository configuration def repository = "registry.c.test-chamber-13.lan" +def repositoryCreds = "harbor-repository-creds" -// jenkins secrets -def nordCreds = "nordvpn-login-creds" +def workspace +def dockerFile +def nordCreds +def kubeNamespace +def kubeSecret +def nordURL +def openVPNConfig +def k8sSecret -// kubernetes configuration -def kubeNamespace = "dl-automation" -def kubeSecret = "openvpn" +def label = "kubernetes-${UUID.randomUUID().toString()}" +def templateName = "pipeline-worker" +pipeline { + agent { + kubernetes { + yaml functions.podYaml( + repo: repository, + templateName: templateName, + alpine: true + ) + } + } -// list of urls that return different nordVPN servers -def nordURLs = [ - // canada - "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:38,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", - // france - "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:74,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", - // gremany - "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:81,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", - // japan - "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:108,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", - // sweden - "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:208,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", - // switzerland - "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:209,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", - // netherlands - "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:153,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", - // united kingdom - "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:38,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", -] -// randomly select one from the list -def nordURL = nordURLs[Math.abs(new Random().nextInt() % [8])] + stages { + stage ('Initalize Jenkins') { + steps { + script { + workspace = pwd() + // jenkins secrets + nordCreds = "nordvpn-login-creds" -// script used to retrieve a nordVPN OpenVPN configuration from NordVPN -def openVPNConfigScript = """# Get OpenVPN Config + // kubernetes configuration + kubeNamespace = "dl-automation" + kubeSecret = "openvpn" + + // list of urls that return different nordVPN servers + def nordURLs = [ + // canada + "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:38,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", + // france + "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:74,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", + // gremany + "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:81,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", + // japan + "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:108,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", + // sweden + "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:208,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", + // switzerland + "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:209,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", + // netherlands + "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:153,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", + // united kingdom + "https://nordvpn.com/wp-admin/admin-ajax.php?action=servers_recommendations&filters=\\{%22country_id%22:38,%22servers_groups%22:\\[15\\],%22servers_technologies%22:\\[5\\]\\}", + ] + + // randomly select one from the list + nordURL = nordURLs[Math.abs(new Random().nextInt() % [8])] + } + } + } + + stage ('Prepare Container') { + steps { + container ('alpine') { + script { + sh """ + if [ ! -f "/usr/bin/curl" ] || [ ! -x "/usr/bin/curl" ]; then + apk add --no-cache curl + fi + if [ ! -f "/usr/bin/jq" ] || [ ! -x "/usr/bin/jq" ]; then + apk add --no-cache jq + fi + if [ ! -f "/bin/sed" ] || [ ! -x "/bin/sed" ]; then + apk add --no-cache sed + fi + """ + } + openVPNConfig = sh( + returnStdout: true, + script: """# Get OpenVPN Config curl \ --silent \ --location \ @@ -53,46 +101,17 @@ curl \ --expression='s/auth-user-pass/auth-user-pass \\/etc\\/openvpn\\/client\\/openvpn-credentials.txt/' \ | base64 -w 0 """ + ) + withCredentials( + [ + string( + credentialsId: nordCreds, + variable: "NORD_CREDS", + ) + ] + ) { -def label = "kubernetes-${UUID.randomUUID().toString()}" -def templateName = "pipeline-worker" -podTemplate( - label: label, - name: templateName, - yaml: functions.podYaml( - repo: repository, - templateName: templateName, - alpine: true - ) -) { - node (label) { - def workspace = pwd() - - stage ("Prepare Container") { - container ("alpine") { - sh """ - apk add --no-cache curl jq sed - """ - } - } - - def openVPNConfig - stage ("Get Remote OpenVPN Config") { - container ("alpine") { - openVPNConfig = sh( - returnStdout: true, - script: openVPNConfigScript - ) - } - } - - def k8sSecret - stage ("Compile Secret") { - withCredentials([string( - credentialsId: nordCreds, - variable: "NORD_CREDS", - )]) { - k8sSecret = """apiVersion: v1 + k8sSecret = """apiVersion: v1 kind: Secret metadata: name: """ + kubeSecret + """ @@ -101,21 +120,39 @@ data: openvpn-credentials.txt: """ + NORD_CREDS + """ nordvpn.com.tcp.ovpn: """ + openVPNConfig + """ """ + } + } } } - - functions.createSecret( - kubeAuth: "k8s-dl-automation-access", - kubeURL: "https://kubernetes.test-chamber-13.lan:6443", - namespace: "dl-automation", - secret: k8sSecret - ) - functions.deletePod( - kubeAuth: "k8s-dl-automation-access", - kubeURL: "https://kubernetes.test-chamber-13.lan:6443", - namespace: "dl-automation", - selector: "app=deluge" - ) + stage ('Create Secret') { + steps { + container ('alpine') { + script { + declarativeFunctions.createSecret( + kubeAuth: "k8s-dl-automation-access", + kubeURL: "https://kubernetes.test-chamber-13.lan:6443", + namespace: "dl-automation", + secret: k8sSecret + ) + } + } + } + } + + stage ('Restart Pod') { + steps { + container ('alpine') { + script { + declarativeFunctions.deletePod( + kubeAuth: "k8s-dl-automation-access", + kubeURL: "https://kubernetes.test-chamber-13.lan:6443", + namespace: "dl-automation", + selector: "app=deluge" + ) + } + } + } + } } } \ No newline at end of file