Programmierumgebungen für Entwickelnde

Abgeschlossen

Im Bereich der Plattformentwicklung besteht eine der häufigsten Herausforderungen darin, sicherzustellen, dass Entwickelnde ihre Programmierumgebungen schnell und konsistent einrichten können. Dies ist insbesondere dann notwendig, wenn neue Entwickelnde in Teams aufgenommen werden, sie zwischen Projekten wechseln oder eine Skalierung erforderlich ist. Wenn die Einrichtung von Entwicklerumgebungen automatisiert wird, kann das Onboarding optimiert werden. Außerdem können Zeitverluste aufgrund von Fehlkonfigurationen oder fehlerhaften Abhängigkeiten verhindert werden. Durch die Bereitstellung von vorkonfigurierten Umgebungen oder Setupskripts können sich Teams auf die Entwicklung konzentrieren, anstatt Zeit für das Beheben von Problemen im Zusammenhang mit Umgebungsinkonsistenzen zu verschwenden.

Der Ansatz zum Verwalten von Entwicklerumgebungen kann variieren, umfasst jedoch häufig die Bereiche Virtualisierung, Containerisierung und standardisierte Vorlagen, die den Anforderungen der Organisation entsprechen. Dies kann von vollständig virtualisierten Windows-Umgebungen bis hin zu in der Cloud gehosteten Containern für die Linux-Entwicklung reichen. Darüber hinaus besteht die Möglichkeit, Vorlagen für den sofortigen Start zu erstellen, die Konsistenz, Best Practices und Sicherheit fördern, da Code für die Aufrechterhaltung eines klar definierten, wiederholbaren Prozesses von wesentlicher Bedeutung ist, der teamübergreifend skaliert wird. Dadurch wird sichergestellt, dass der Entwicklungsworkflow nicht nur reibungslos beginnt, sondern weiterhin den Best Practices entspricht und die Projekte somit übersichtlich bleiben und den Sicherheitsstandards sowie betrieblichen Standards entsprechen.

Automatisieren der Einrichtung der Programmierumgebung für Entwickler

Das Bootstrapping und die Normalisierung der Programmierumgebungen für Entwickelnde kann bei Entwicklungssystemen eine große Herausforderung darstellen. Dies sind die häufigsten Probleme:

  • Lange Onboardingzeiten: Es kann Wochen dauern, bis neue Entwickler mitwirken können, insbesondere beim Wechseln von Entwicklern zwischen Projekten oder beim Einbinden von externen Auftragnehmern.
  • Inkonsistenzen: Unterschiede zwischen Entwicklerumgebungen und CI-Systemen führen häufig zu Problemen vom Typ „Auf meinem Computer funktioniert das!“.
  • Instabilität der Umgebung: Das Experimentieren mit oder Upgraden von Frameworks und Software kann dazu führen, dass vorhandene Konfigurationen nicht mehr funktionieren, was wiederum eine potenziell lange und komplexe Problembehandlung zur Folge haben kann.
  • Verzögerungen beim Code Review: Konfigurationsänderungen, die für Code Reviews erforderlich sind, können die Entwicklung verlangsamen, da sie später rückgängig gemacht werden müssen.
  • Informieren aller Projektbeteiligten: Rollen, die nicht im Zusammenhang mit der Entwicklung stehen (z. B. Operatoren, QA und Business-Sponsoren) müssen ebenfalls geschult und integriert werden, was zu mehr Verzögerungen führt.

Um diese Probleme zu beheben, kann es hilfreich sein, die Einrichtung von Entwicklerumgebungen mithilfe von Tools, Skripts oder containerisierten bzw. virtualisierten Umgebungen zu standardisieren und zu automatisieren. Vorkonfigurierte Umgebungen, die an bestimmte Projekte oder Organisationsanforderungen angepasst sind, können Konsistenz gewährleisten, die Einrichtungszeit reduzieren und die Produktivität insgesamt verbessern.

Programmierumgebungen für Windows und Linux

Bei Verwendung von Windows für die Arbeitsstationenersetzung oder die vollständige Virtualisierung bieten virtuelle Computer (VMs) im Allgemeinen die beste Funktionalität. Dieser Ansatz ist von Vorteil bei der Windows-Cliententwicklung, dem Verwalten vollständiger .NET Framework-Webanwendungen und dem Verwalten von Windows-Diensten. Sie können in der Cloud gehostete VMs (z. B. Microsoft Dev Box) verwenden, die die vollständige Windows-Arbeitsstationsvirtualisierung mit Integration in Desktopverwaltungssoftware bieten. Alternativ können lokale VMs mit Tools wie HashiCorp Vagrant zum Verwalten von Umgebungen verwendet werden, und HashiCorp Packer kann zum Erstellen von VM-Images sowohl für Vagrant als auch für Dev Box verwendet werden.

Bei Linux stellt die Arbeitsbereichsvirtualisierung die bessere Option dar. Hier liegt der Fokus auf projektspezifischen bzw. anwendungsspezifischen Umgebungen, anstatt den vollständigen Desktop zu ersetzen. In der Cloud gehostete Container sind eine gängige Wahl. Optionen wie GitHub Codespaces bieten eine cloudbasiert Entwicklungscontainerumgebung, die mit VS Code, JetBrains IntelliJ und terminalbasierten Tools kompatibel ist. Wenn die Cloudoptionen Ihre Anforderungen nicht erfüllen, unterstützt SSH von VS Code oder ein Remotetunnel das Herstellen einer Verbindung mit selbstgehosteten Linux-VMs. Darüber hinaus sind lokale Container eine Option, wenn Sie die lokale Ausführung von Entwicklungscontainern bevorzugen. VS Code und IntelliJ bieten robuste Unterstützung für diese Umgebungen. Für mehr Flexibilität können auch in der Cloud gehostete VMs verwendet werden, bei denen Sie SSH direkt für selbstverwaltete Linux-VMs nutzen. In Fällen, in denen Entwickelnde ausschließlich unter Windows arbeiten, bietet das Windows-Subsystem für Linux (WSL) eine bequeme lokale Linux-Entwicklungslösung. WSL-Distributionen können exportiert und für alle Teams freigegeben werden. Cloudbasierte Dienste wie Microsoft Dev Box unterstützen auch WSL für die Linux-Entwicklung.

Verwenden von Anwendungsvorlagen für Konsistenz und Standardisierung

Um Konsistenz, Standardisierung und Best Practices in Entwicklungsteams zu fördern, können Organisationen Anwendungsvorlagen als Teil eines Everything-as-Code-Ansatzes verwenden. Diese Vorlagen können die Entwicklung vereinfachen und sicherstellen, dass Teams den etablierten und bewährten Wegen folgen. Organisationen, die ein Monorepo-Muster befolgen, können Tools wie Azure Developer CLI (azd) verwenden, um Vorlagen zu erstellen, die nicht nur Anwendungsquellensetups, sondern auch Umgebungskonfigurationen und CI/CD-Workflows enthalten.

Beim Erstellen von Vorlagen für die Entwicklung ist es hilfreich, verschiedene Schlüsselbereiche zu berücksichtigen, um sicherzustellen, dass die Vorlagen umfassend und konsistent sind und Best Practices einhalten:

  • Beispielquellcode: Fügen Sie Beispielquellcode hinzu, um den Entwickelnden die Verwendung empfohlener Sprachen, Anwendungsmodelle, Dienste, APIs, SDKs und Architekturmuster zu vereinfachen.
  • Build & Deployment-Skripts: Integrieren Sie Skripts, die eine konsistente Möglichkeit bieten, Builds auszulösen und lokal oder in einer Sandboxumgebung bereitzustellen. Stellen Sie sicher, dass IDE- oder Editor-Debugkonfigurationen enthalten sind, um eine Synchronisierung mit CI/CD-Pipelines zu ermöglichen.
  • CI/CD-Konfiguration: Stellen Sie Workflows oder Pipelines zum Erstellen und Bereitstellen von Anwendungen bereit, und nutzen Sie wiederverwendbare, zentralisierte Workflows. Behandeln Sie diese als Vorlagen für den sofortigen Start, und stellen Sie sicher, dass sie bei Bedarf manuell ausgelöst werden können.
  • Infrastructure-as-Code-Ressourcen (IaC): Fügen Sie empfohlene Konfigurationen und Verweise auf zentral verwaltete Module ein, um sicherzustellen, dass Infrastruktursetups Best Practices befolgen.
  • Sicherheits- und Policy-as-Code-Ressourcen: Fügen Sie sicherheitsbezogene Konfigurationsdateien wie „CODEOWNERS“ und „dependabot.yaml“ hinzu, um Sicherheitsmechanismen direkt in den Entwicklungsprozess zu integrieren. Sie sollten geplante Workflows für Sicherheitsüberprüfungen (einschließlich Tools wie Microsoft Defender for Cloud) bereitstellen, um die Sicherheitsmechanismen in die CI/CD-Pipeline einzubetten und die Lieferkettensicherheit zu verbessern.
  • Einblicke, Überwachung und Protokollierung: Stellen Sie Setupkonfigurationen für Überwachungstools (z. B. Infrastructure-as-Code-Ansatz für die Agent-Bereitstellung oder Configuration-as-Code-Ansatz für Überwachungsdashboards) bereit. Schließen Sie Beispielcode für die Protokollierung und verteilte Ablaufverfolgung ein, um sicherzustellen, dass Anwendungen nach der Bereitstellung effektiv überwacht werden können.
  • Einrichten von Programmierumgebungen: Fügen Sie Konfigurationsdateien für Linter, Formatierer und IDEs hinzu, und richten Sie Skripts für virtualisierte Entwicklungsumgebungen wie „devcontainer.json“, „devbox.yaml“ oder „Docker-bezogene“ Dateien ein.
  • Testkonfiguration: Stellen Sie Dateien für Komponententests und umfangreichere Testszenarios mit Tools wie Microsoft Playwright Testing oder Azure Load Testing zur Verfügung.

Einrichtung von Tools für die Zusammenarbeit: Schließen Sie Task- bzw. Issuevorlagen oder PR-Vorlagen als Code ein (sofern unterstützt). Stellen Sie optional Workflows bereit, die verfügbare CLIs oder APIs verwenden, um Systeme upzudaten oder Tools für die Zusammenarbeit (z. B. Microsoft Teams oder Slack) zu konfigurieren.