I den första av tre artiklar om automatisering av Kubernetes-installation med Jenkins, "Using Jenkins with Kubernetes AWS, Part 1", skapade vi de nödvändiga artefakterna och skapade en Jenkins-nod. I den här fortsättningsartikeln ska vi konfigurera en Jenkins-fil för en Jenkins-pipeline och skapa en Jenkins-pipeline. Den här artikeln har följande avsnitt:
- Konfigurera en Jenkinsfil
- Skapa en Jenkins-pipeline
- Slutsats
Skapa en Jenkinsfil
En Jenkins Pipeline är konfigurerad i en textfil som heter Jenkinsfile i Groovy syntax. Jenkinsfilen består av steg . Ett "steg" är ett byggsteg, en instruktion för Jenkins att implementera. Två typer av steg stöds:nod och scen . En "nod" är ett steg på toppnivå som väljer en executor/er på agent/er att köra kod på. En nod är en maskin (master eller agent ) och en etikett i nodsteget bör matcha en etikett på maskinen för att noden ska kunna välja maskinen. Steget "nod" skapar en arbetsyta , som är en filkatalog, för ett specifikt Jenkins-jobb för resurskrävande bearbetning. "Nod"-steget schemalägger också stegen som definieras i det på en executor-slot genom att lägga till dem i Jenkins build-kö. När exekveringsplatsen frigör körs de schemalagda stegen från byggkön.
Skapa en fil som heter Jenkinsfile (utan något suffix). En fil utan suffix skapas på Windows med följande kommando från kommandotolken. Notera "." I slutet av kommandot, som ska inkluderas.
>notepad Jenkinsfile.
I dialogrutan "Kan inte hitta Jenkinsfilen. fil. Vill du skapa en ny fil?” klicka på Ja. En Jenkinsfil filen skapas. I Jenkinsfilen , skapa ett toppnivåsteg som kallas "nod" där "jenkins"-etiketten är densamma som etikettvärdet som konfigurerats i Jenkins-agenten.
node('jenkins') { }
Lägg till andra steg i nodsteget för att installera ett Kubernetes-kluster. Lägg till stegssteg för att installera Kubernetes. Proceduren för att installera Kubernetes är väldokumenterad och kommer inte att diskuteras igen. Som referens, "Komma igång med Kubernetes på Amazon Web Services (AWS)" diskuterar installationsproceduren i detalj. Skalkommandon körs med "sh". Användarinmatning för variabler som antal arbetare och instanstyp kan efterfrågas.
kube-aws init kommandot för att initiera CloudFormation-stacken har klusternamnet hårdkodat som "kubernetes-coreos-cluster" (godtyckligt namn). --externt-dns-namnet är satt till ett domännamn, NOSQLSEARCH.COM , vilket skulle vara olika för olika användare. EC2-nyckelparet är satt med --nyckelnamn till kubernetes-coreos , som skapades tidigare. KMS-nyckeln är inställd på KeyMetadata.Arn sträng genererad tidigare med aws kms kommandot i --kms-tangenten alternativ. Den genererade Jenkinsfilen listas nedan:
node('jenkins') { stage 'set env' sh "sudo yum install gnupg2" sh "gpg2 --keyserver pgp.mit.edu --recv-key FC8A365E" sh "gpg2 --fingerprint FC8A365E" sh "wget https://github.com/coreos/coreos-kubernetes/releases/ download/v0.7.1/kube-aws-linux-amd64.tar.gz" sh "wget https://github.com/coreos/coreos-kubernetes/releases/ download/v0.7.1/kube-aws-linux-amd64.tar.gz.sig" sh "gpg2 --verify kube-aws-linux-amd64.tar.gz.sig kube-aws-linux- amd64.tar.gz" sh "tar zxvf kube-aws-linux-amd64.tar.gz" sh "sudo mv linux-amd64/kube-aws /usr/local/bin" sh "export AWS_ACCESS_KEY_ID=AKIAJGFCP4HUFH4453FA" sh "export AWS_SECRET_ACCESS_KEY=7BaiUETep3zPYrhrzKYpBdwkwVV16 BTT+pt2/EXF" sh "aws ec2 create-volume --availability-zone us-east-1c --size 10 --volume-type gp2" stage 'kube-aws init' deleteDir() sh "mkdir coreos-cluster" sh "cd coreos-cluster" sh "kube-aws init --cluster-name=kubernetes-coreos-cluster --external-dns-name=NOSQLSEARCH.COM --region=us-east-1 --availability-zone=us-east-1c --key-name=kubernetes-coreos --kms-key-arn='arn:aws:kms:us-east-1:672593526685:key/ f380f8b3-e93d-4a37-b87f-9ad1dbe909be '" stage "kube-aws render" WORKER_COUNT = input message: 'Number of Nodes', parameters: [[$class: 'StringParameterDefinition', defaultValue: '3', description: '', name: 'WORKER_COUNT']] INSTANCE_TYPE = input message: 'Instance Type', parameters: [[$class: 'StringParameterDefinition', defaultValue: 't2.micro', description: '', name: 'INSTANCE_TYPE']] sh "kube-aws render" sh "sed -i '''s/#workerCount: 1/workerCount: '''$WORKER_COUNT'''/''' cluster.yaml" sh "sed -i '''s/#workerInstanceType: m3.medium/workerInstanceType: '''$INSTANCE_TYPE'''/''' cluster.yaml" sh "kube-aws validate" stage "Archive CFN" step([$class: 'ArtifactArchiver', artifacts: 'cluster.yaml, stack-template.json,credentials/*,userdata/*', fingerprint: true]) stage "Deploy Cluster" shouldDeploy = input message: 'Should Deploy Cluster?', parameters: [[$class: 'ChoiceParameterDefinition', choices: 'yesno', description: '', name: 'Deploy']] if(shouldDeploy == "yes") { echo "Deploying Kubernetes cluster" sh "kube-aws up" sh "kube-aws status" step([$class: 'ArtifactArchiver', artifacts: 'kubeconfig', fingerprint: true]) } }
Skapa en Jenkins-pipeline
I Jenkins Dashboard klickar du på skapa ett nytt jobb för att skapa en Jenkins Pipeline, som visas i figur 1.
Figur 1: Välj "skapa nya jobb" för att skapa ett Jenkins-jobb
I användargränssnittet, ange ett pipelinenamn (install-kubernetes ), till exempel och välj Rörledning , som visas i figur 2. Klicka på OK.
Figur 2: Välj Pipeline
Konfigurationsguiden för pipeline startar, som visas i figur 3.
Figur 3: Jenkins Pipeline Configuration Wizard
Välj Pipeline flik. I Definition fältet väljer du Pipeline script alternativ, som visas i figur 4.
Figur 4: Fliken Pipeline
Kopiera och klistra in Jenkinsfilen som listades tidigare. Klicka på Spara , som visas i figur 5.
Figur 5: Konfigurera Pipeline Script
En ny Jenkins Pipeline skapas (se figur 6).
Figur 6: Jenkins Pipeline skapad
Till en början körs inte pipelinen och Status bör inte lista någon Build som startar eller körs, som visas i figur 7.
Figur 7: Jenkins Pipeline Status
Slutsats
I den här artikeln konfigurerade vi en Jenkinsfil och använde Jenkinsfilen för att skapa en Jenkins-pipeline. I den 3 och avslutande artikeln om automatisering av Kubernetes-installation med Jenkins kommer vi att köra Jenkins-pipeline som skapats i den här artikeln för att installera Kubernetes. Därefter ska vi testa det installerade Kubernetes-klustret.