Einrichten von Jenkins-Agents in der Azure-Cloud
In diesem Text wird beschrieben, wie Sie Jenkins-Agents für die Ausführung auf virtuellen Maschinen in der Azure-Cloud erstellen und konfigurieren. Er umfasst auch die Installation von Docker, um Container in Jenkins-Pipelines auszuführen.
Sie benötigen die Tools Azure CLI und Packer auf Ihrem lokalen Rechner.
Außerdem benötigen Sie Zugriff auf Ihren Kubernetes-Cluster über kubectl
.
Erstellen eines Azure-Images mit Packer
-
Erstellen Sie eine Packer-Vorlage für das VM-Abbild wie azure-jenkins-agent.pkr.hcl
- Passen Sie
source.azure-arm.jenkins-agent.managed_image_resource_group_name
an eine Ressourcengruppe in Ihrer Azure-Umgebung an
- Passen Sie
- Erstellen Sie die entsprechende Variablendatei, z.B.
azure-jenkins-agent-variables.auto.pkrvars.hcl
:
client_id = ""
client_secret = ""
tenant_id = ""
subscription_id = ""
-
Holen Sie sich die in der Variablendatei benötigten Anmeldedaten über Azure-CLI-Befehle:
- Verwenden Sie
az login
, um sich mit Ihrer Azure-Umgebung zu verbinden - Ermitteln Sie die subscriptionid über `az account show --query "{ subscriptionid: id }"`
- Ermitteln Sie die Client-ID, die Tenant-ID und das Client-Secret über
az ad sp create-for-rbac --role Contributor --scopes /subscriptions/SUBSCRIPTION_ID --query "{ client_id: appId, client_secret: password, tenant_id: tenant }"
- Ersetzen Sie
SUBSCRIPTION_ID
durch die subscription_id, die Sie im vorherigen Schritt erhalten haben
- Verwenden Sie
- Installieren Sie die erforderlichen Plugins über
packer init .
- Erstellen Sie das VM-Image mit
packer build .
- Sie erhalten ein VM-Image in Ihrer Azure-Umgebung mit dem Namen
cesJenkinsDockerAgent
.
Installation des Azure VM Agents-Plugins
- Installieren Sie das Azure VM Agents Plugin (und, optional, das Docker Pipeline Plugin) mit init150NORMinstallAzurePlugins.groovy
-
Sie können dieses Skript ausführen, indem Sie es dem Verzeichnis für zusätzliche Skripte in Jenkins hinzufügen oder es über die Skriptkonsole ausführen
- Führen Sie das Skript über das Jenkins-Verzeichnis für zusätzliche Skripte aus:
- Ermitteln Sie den Jenkins-Pod-Namen über
JENKINSPODID=$(kubectl get pods --namespace ecosystem | grep jenkins | awk 'NR==1{print $1}')
- Kopieren Sie das Skript auf das Jenkins-Daten-Volume:
kubectl cp --namespace ecosystem init150NORMinstallAzurePlugins.groovy ${JENKINSPODID}:/var/lib/custom.init.groovy.d/init150NORMinstallAzurePlugins.groovy
- Starten Sie Jenkins neu, indem Sie den Jenkins-Pod löschen (der dann neu erstellt wird), damit das Skript beim Start ausgeführt wird.
- Führen Sie das Skript über die Jenkins-Skriptkonsole aus:
- In der Jenkins-GUI gehen Sie zu "Jenkins verwalten" -> "Skript-Konsole".
- Fügen Sie das obige Groovy-Skript in das Textfeld ein und klicken Sie auf "Ausführen".
Konfigurieren der Azure Cloud in Jenkins
-
Verwenden Sie das Skript init160NORMconfigureAzureCloud.groovy zur Konfiguration von Azure-Agents in Jenkins
- Geben Sie die Azure-Anmeldeinformationen aus den vorherigen Schritten ein
- Stellen Sie sicher, dass der Name der Ressourcengruppe korrekt ist.
- Führen Sie das Skript über die Jenkins-Skriptkonsole oder über das zusätzliche Skriptverzeichnis wie oben beschrieben aus.
Testen mit einer Jenkins-Pipeline
Sie können testen, ob alles korrekt funktioniert hat, indem Sie diese Test-Pipeline verwenden:
- Fügen Sie ein Jenkins-Pipeline-Projekt hinzu
- Verwenden Sie den folgenden Code für die Pipeline:
#!groovy
@Library(['github.com/cloudogu/ces-build-lib@1.62.0'])
import com.cloudogu.ces.cesbuildlib.*
node('docker') {
stage('Clone Repository') {
checkout scmGit(userRemoteConfigs: [
[url: 'https://github.com/ianmiell/simple-dockerfile/']
])
}
def docker = new Docker(this)
stage('Docker Build') {
docker.build("testing/azuretest:0.0.0")
sh 'docker image ls'
}
stage('Docker Tag') {
docker.image("testing/azuretest:0.0.0").tag("0.0.1")
sh 'docker image ls'
}
stage('Docker Push') {
String REGISTRY_URL = ""
docker.withRegistry(REGISTRY_URL, "registrycredentials") {
docker.image("testing/azuretest:0.0.1").push()
}
}
}
- Passen Sie die Registry-URL (REGISTRY_URL) an Ihre Container-Image-Registry an
- Fügen Sie Jenkins-Anmeldeinformationen mit der ID
registrycredentials
hinzu, um Ihre Container-Image-Registry-Anmeldeinformationen zu speichern - Führen Sie die Pipeline aus. Eine neue Azure-VM sollte bereitgestellt werden, mit Jenkins verbunden werden und die Pipeline ausführen