#!groovy def repository = "registry.c.test-chamber-13.lan" def repositoryCreds = "harbor-repository-creds" def workspace def dockerFile def nordCreds def kubeNamespace def kubeSecret def nordURL def openVPNConfig def k8sSecret def label = "kubernetes-${UUID.randomUUID().toString()}" def templateName = "pipeline-worker" pipeline { agent { kubernetes { yaml functions.podYaml( repo: repository, templateName: templateName, alpine: true ) } } stages { stage ('Initalize Jenkins') { steps { script { workspace = pwd() // jenkins secrets nordCreds = "nordvpn-login-creds" // 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 \ --fail \ "https://downloads.nordcdn.com/configs/files/ovpn_tcp/servers/\$( curl \ --silent \ --location \ --fail \ '""" + nordURL + """' \ | jq \ --raw-output \ '[.[] | select(.technologies[] | .identifier == "openvpn_tcp")][0] | .hostname' \ ).tcp.ovpn" \ | sed \ --regexp-extended \ --expression='s/auth-user-pass/auth-user-pass \\/etc\\/openvpn\\/client\\/openvpn-credentials.txt/' \ | base64 -w 0 """ ) withCredentials( [ string( credentialsId: nordCreds, variable: "NORD_CREDS", ) ] ) { k8sSecret = """apiVersion: v1 kind: Secret metadata: name: """ + kubeSecret + """ namespace: """ + kubeNamespace + """ data: openvpn-credentials.txt: """ + NORD_CREDS + """ nordvpn.com.tcp.ovpn: """ + openVPNConfig + """ """ } } } } } stage ('Create Secret') { steps { container ('alpine') { script { declarativeFunctions.createSecret( kubeAuth: "k8s-dl-automation-access", kubeURL: "https://k8s.test-chamber-13.lan:8043", namespace: "dl-automation", secret: k8sSecret ) } } } } stage ('Restart Pod') { steps { container ('alpine') { script { declarativeFunctions.deletePod( kubeAuth: "k8s-dl-automation-access", kubeURL: "https://k8s.test-chamber-13.lan:8043", namespace: "dl-automation", selector: "app=deluge" ) } } } } } }