Kurz: Nasazení do clusteru Service Fabric

Tento kurz popisuje několik možných způsobů nastavení prostředí Jenkinse a různých způsobů nasazení aplikace do clusteru Service Fabric po jeho vytvoření. Pomocí těchto obecných kroků můžete úspěšně nakonfigurovat Jenkinse, vyžádat změny z GitHubu, sestavit aplikaci a nasadit ji do clusteru:

  1. Ujistěte se, že jste nainstalovali požadavky.
  2. Pak podle pokynů v jedné z těchto částí nastavte Jenkinse:
  3. Po nastavení Jenkinse postupujte podle kroků v tématu Vytvoření a konfigurace úlohy Jenkinse, která nastaví GitHub tak, aby aktivoval Jenkinse při změnách v aplikaci a prostřednictvím kroku sestavení nakonfiguroval kanál úlohy Jenkinse, aby se změny stáhly z GitHubu a sestavili aplikaci.
  4. Nakonec nakonfigurujte krok po sestavení úlohy Jenkinse pro nasazení aplikace do clusteru Service Fabric. Existují dva způsoby konfigurace Jenkinse pro nasazení aplikace do clusteru:

Požadavky

  • Ujistěte se, že je Git nainstalovaný místně. Příslušnou verzi Gitu můžete nainstalovat ze stránky pro stažení Gitu na základě vašeho operačního systému. Pokud s Gitem začínáte, přečtěte si další informace v dokumentaci k Gitu.
  • Tento článek používá ukázku Začínáme se Service Fabric na GitHubu: https://github.com/Azure-Samples/service-fabric-java-getting-started pro sestavení a nasazení aplikace. Můžete vytvořit fork tohoto úložiště, abyste mohli postupovat podle pokynů, nebo s některými úpravami pokynů použijte vlastní projekt GitHubu.

Instalace modulu plug-in Service Fabric v existujícím prostředí Jenkinse

Pokud přidáváte modul plug-in Service Fabric do existujícího prostředí Jenkinse, musíte provést následující kroky:

  • Service Fabric CLI (sfctl). Nainstalujte rozhraní příkazového řádku na úrovni systému místo na úrovni uživatele, aby Jenkins mohl spouštět příkazy rozhraní příkazového řádku.
  • Pokud chcete nasadit aplikace v Javě, nainstalujte Gradle i Open JDK 8.0.
  • Pokud chcete nasadit aplikace .NET Core 2.0, nainstalujte sadu .NET Core 2.0 SDK.

Po instalaci požadovaných požadavků pro vaše prostředí můžete vyhledat modul plug-in Azure Service Fabric na marketplace Jenkinse a nainstalovat ho.

Po instalaci modulu plug-in přeskočte k vytvoření a konfiguraci úlohy Jenkinse.

Nastavení Jenkinse uvnitř clusteru Service Fabric

Jenkinse můžete nastavit uvnitř clusteru Service Fabric nebo mimo něj. Následující části ukazují, jak ho nastavit v clusteru při použití účtu úložiště Azure k uložení stavu instance kontejneru.

  1. Ujistěte se, že máte nainstalovaný cluster Service Fabric s Linuxem s Dockerem. Clustery Service Fabric spuštěné v Azure už mají Docker nainstalovaný. Pokud cluster spouštíte místně (vývojové prostředí OneBox), pomocí příkazu zkontrolujte, jestli je na vašem počítači docker info nainstalovaný Docker. Pokud není nainstalovaný, nainstalujte ho pomocí následujících příkazů:

    sudo apt-get install wget
    wget -qO- https://get.docker.io/ | sh
    

    Poznámka:

    Ujistěte se, že je port 8081 zadaný jako vlastní koncový bod v clusteru. Pokud používáte místní cluster, ujistěte se, že je na hostitelském počítači otevřený port 8081 a že má veřejnou IP adresu.

  2. Naklonujte aplikaci pomocí následujících příkazů:

    git clone https://github.com/suhuruli/jenkins-container-application.git
    cd jenkins-container-application
    
  3. Zachování stavu kontejneru Jenkinse ve sdílené složce:

    1. Vytvořte účet úložiště Azure ve stejné oblasti jako váš cluster s názvem, například sfjenkinsstorage1.

    2. Pod účtem úložiště vytvořte sdílenou složku s názvem, například sfjenkins.

    3. Klikněte na Připojení pro sdílenou složku a poznamenejte si hodnoty, které se zobrazí v Připojení z Linuxu, měla by tato hodnota vypadat nějak takto:

      sudo mount -t cifs //sfjenkinsstorage1.file.core.windows.net/sfjenkins [mount point] -o vers=3.0,username=<username>,password=<storage-key>,dir_mode=0777,file_mode=0777
      

    Poznámka:

    Pokud chcete připojit sdílené složky cifs, musíte mít v uzlech clusteru nainstalovaný balíček cifs-utils.

  4. Aktualizujte zástupné hodnoty ve setupentrypoint.sh skriptu s podrobnostmi o azure-storage z kroku 2.

    vi JenkinsSF/JenkinsOnSF/Code/setupentrypoint.sh
    
    • Nahraďte [REMOTE_FILE_SHARE_LOCATION] hodnotou //sfjenkinsstorage1.file.core.windows.net/sfjenkins z výstupu připojení v kroku 2 výše.
    • Nahraďte [FILE_SHARE_CONNECT_OPTIONS_STRING] hodnotou vers=3.0,username=<username>,password=<storage-key>,dir_mode=0777,file_mode=0777 z kroku 2 výše.
  5. Pouze zabezpečený cluster:

    Pokud chcete nakonfigurovat nasazení aplikací v zabezpečeném clusteru jenkinse, musí být certifikát clusteru přístupný v rámci kontejneru Jenkinse. V souboru ApplicationManifest.xml pod značkou ContainerHostPolicies přidejte tento odkaz na certifikát a aktualizujte hodnotu kryptografického otisku certifikátem clusteru.

    <CertificateRef Name="MyCert" X509FindValue="[Thumbprint]"/>
    

    Dále do souboru ApplicationManifest.xml přidejte následující řádky pod značku ApplicationManifest (root) a aktualizujte hodnotu kryptografického otisku certifikátem clusteru.

    <Certificates>
      <SecretsCertificate X509FindType="FindByThumbprint" X509FindValue="[Thumbprint]" />
    </Certificates> 
    
  6. Připojení do clusteru a nainstalujte aplikaci kontejneru.

    Zabezpečený cluster

    sfctl cluster select --endpoint https://PublicIPorFQDN:19080  --pem [Pem] --no-verify # cluster connect command
    bash Scripts/install.sh
    

    Předchozí příkaz převezme certifikát ve formátu PEM. Pokud je váš certifikát ve formátu PFX, můžete ho převést pomocí následujícího příkazu. Pokud váš soubor PFX není chráněný heslem, zadejte parametr passin jako -passin pass:.

    openssl pkcs12 -in cert.pfx -out cert.pem -nodes -passin pass:<password>
    

    Nezabezpečený cluster

    sfctl cluster select --endpoint http://PublicIPorFQDN:19080 # cluster connect command
    bash Scripts/install.sh
    

    Tím se do clusteru nainstaluje kontejner s Jenkinsem, který můžete monitorovat pomocí Service Fabric Exploreru.

    Poznámka:

    Stažení image Jenkinse v clusteru může několik minut trvat.

  7. V prohlížeči přejděte na http://PublicIPorFQDN:8081. Najdete tam cestu k počátečnímu heslu správce vyžadovanému k přihlášení.

  8. Podívejte se na Service Fabric Explorer a zjistěte, na kterém uzlu je kontejner Jenkins spuštěný. Přihlaste se k tomuto uzlu přes Secure Shell (SSH).

    ssh user@PublicIPorFQDN -p [port]
    
  9. Získejte ID instance kontejneru pomocí příkazu docker ps -a.

  10. Přihlaste se ke kontejneru secure Shell (SSH) a vložte cestu, kterou jste zobrazili na portálu Jenkins. Pokud se například na portálu zobrazí cesta PATH_TO_INITIAL_ADMIN_PASSWORD, spusťte následující příkazy:

    docker exec -t -i [first-four-digits-of-container-ID] /bin/bash   # This takes you inside Docker shell
    
    cat PATH_TO_INITIAL_ADMIN_PASSWORD # This displays the password value
    
  11. Na stránce Jenkins Getting Started zvolte možnost Vybrat modul plug-in pro instalaci, zaškrtněte políčko Žádné a klikněte na nainstalovat.

  12. Vytvořte uživatele nebo vyberte, jestli chcete pokračovat jako správce.

Po nastavení Jenkinse přeskočte k vytvoření a konfiguraci úlohy Jenkinse.

Nastavení Jenkinse mimo cluster Service Fabric

Jenkinse můžete nastavit uvnitř clusteru Service Fabric nebo mimo něj. Následující části vysvětlují, jak ho nastavit mimo cluster.

  1. Spuštěním docker info v terminálu se ujistěte, že je na vašem počítači nainstalovaný Docker. Výstup označuje, jestli je spuštěná služba Dockeru.

  2. Pokud docker není nainstalovaný, spusťte následující příkazy:

    sudo apt-get install wget
    wget -qO- https://get.docker.io/ | sh
    
  3. Stáhněte si image kontejneru s Jenkinsem pro Service Fabric: docker pull rapatchi/jenkins:latest. Tato image je součástí předinstalovaného modulu plug-in Jenkinse Pro Service Fabric.

  4. Spusťte image kontejneru: docker run -itd -p 8080:8080 rapatchi/jenkins:latest

  5. Získejte ID instance image kontejneru. Pomocí příkazu docker ps –a můžete vypsat všechny kontejnery Dockeru.

  6. Přihlaste se k portálu Jenkins pomocí následujícího postupu:

    1. Přihlaste se k prostředí Jenkinse z hostitele. Použijte první čtyři číslice ID kontejneru. Pokud je 2d24a73b5964například ID kontejneru , použijte 2d24.

      docker exec -it [first-four-digits-of-container-ID] /bin/bash
      
    2. V prostředí Jenkins získejte heslo správce pro vaši instanci kontejneru:

      cat /var/jenkins_home/secrets/initialAdminPassword
      
    3. Pokud se chcete přihlásit k řídicímu panelu Jenkinse, otevřete ve webovém prohlížeči následující adresu URL: http://<HOST-IP>:8080. K odemknutí Jenkinse použijte heslo z předchozího kroku.

    4. (Volitelné.) Po prvním přihlášení můžete vytvořit vlastní uživatelský účet a použít ho pro následující kroky nebo můžete účet správce dál používat. Pokud vytvoříte uživatele, musíte pokračovat s tímto uživatelem.

  7. Nastavte GitHub pro práci s Jenkinsem pomocí kroků vygenerování nového klíče SSH a jeho přidání do agenta SSH.

    • Pomocí pokynů z GitHubu vygenerujte klíč SSH a přidejte ho do účtu GitHubu, který je hostitelem úložiště.

    • Příkazy popsané u předchozího odkazu spusťte v prostředí Jenkins Dockeru (ne na hostiteli).

    • Pokud se chcete k prostředí Jenkinse přihlásit z hostitele, použijte následující příkaz:

      docker exec -t -i [first-four-digits-of-container-ID] /bin/bash
      

Ujistěte se, že cluster nebo počítač, kde je hostovaná image kontejneru Jenkins, má veřejnou IP adresu. To umožňuje, aby instance Jenkinse dostávala oznámení z GitHubu.

Po nastavení Jenkinse pokračujte k další části, vytvořte a nakonfigurujte úlohu Jenkinse.

Vytvoření a konfigurace úlohy Jenkinse

Kroky v této části ukazují, jak nakonfigurovat úlohu Jenkinse tak, aby reagovala na změny v úložišti GitHubu, načítá změny a sestavila je. Na konci této části budete přesměrováni na poslední kroky, abyste úlohu nakonfigurovali tak, aby nasazovala vaši aplikaci na základě toho, jestli nasazujete do vývojového/testovacího prostředí nebo do produkčního prostředí.

  1. Na řídicím panelu Jenkinse klikněte na Nová položka.

  2. Zadejte název položky (třeba MyJob). Vyberte free-style project (volný styl projektu) a klikněte na OK.

  3. Otevře se stránka Konfigurace úlohy. (Pokud se chcete dostat ke konfiguraci z řídicího panelu Jenkinse, klikněte na úlohu a potom klikněte na Konfigurovat).

  4. Na kartě Obecné zaškrtněte políčko pro projekt GitHub a zadejte adresu URL projektu GitHubu. Tato adresa je hostitelem aplikace Service Fabric v Javě, kterou chcete integrovat s postupy průběžného nasazování a integrace (CI/CD) Jenkinse (např. https://github.com/{your-github-account}/service-fabric-java-getting-started).

  5. Na kartě Správa zdrojového kódu vyberte Git. Zadejte adresu URL úložiště, které je hostitelem aplikace Service Fabric v Javě, kterou chcete integrovat s postupy CI/CD Jenkinse (např. https://github.com/{your-github-account}/service-fabric-java-getting-started). Můžete také určit, která větev se má sestavit (například /master).

  6. Nakonfigurujte úložiště GitHub pro komunikaci s Jenkinsem:

    1. Na stránce úložiště GitHub přejděte na Nastavení> Integrations and Services.

    2. Vyberte Přidat službu, zadejte Jenkins a vyberte modul plug-in Jenkins-GitHub.

    3. Zadejte adresu URL webhooku Jenkinse (ve výchozím nastavení by měla být http://<PublicIPorFQDN>:8081/github-webhook/). Klikněte na add/update service (Přidat/aktualizovat službu).

    4. Do instance Jenkinse se odešle testovací událost. V GitHubu by se měla vedle webhooku zobrazit zelená značka zaškrtnutí a váš projekt se sestaví.

  7. Na kartě Aktivační události sestavení v Jenkinse vyberte požadovanou možnost sestavení. V tomto příkladu chcete spustit sestavení pokaždé, když dojde k nasdílení změn do úložiště, takže vyberte trigger háku GitHubu pro dotazování GITScm. (Dřív se tato možnost nazývala Build when a change is pushed to GitHub (Sestavit při vložení změny metodou Push do GitHubu).

  8. Na kartě Sestavení proveďte jednu z následujících věcí v závislosti na tom, jestli vytváříte aplikaci Java nebo aplikaci .NET Core:

    • Pro aplikace v Javě: V rozevíracím seznamu Přidat krok sestavení vyberte Vyvolat skript Gradle. Klikněte na tlačítko Upřesnit. V rozšířené nabídce zadejte cestu ke kořenovému skriptu sestavení pro vaši aplikaci. Sestavení si ze zadané cesty vezme soubor build.gradle a bude pracovat odpovídajícím způsobem. Pro aplikaci ActorCounter je to: ${WORKSPACE}/reliable-services-actor-sample/Actors/ActorCounter.

      Akce sestavení v Jenkinsu pro Service Fabric

    • V případě aplikací .NET Core: V rozevíracím seznamu Přidat krok sestavení vyberte Spustit prostředí. V zobrazeném příkazovém poli je třeba nejprve změnit adresář na cestu, kam build.sh se soubor nachází. Po změně build.sh adresáře je možné spustit skript pro sestavení aplikace.

      cd /var/jenkins_home/workspace/[Job Name]/[Path to build.sh]  
      ./build.sh
      

      Následující snímek obrazovky ukazuje příklad příkazů, které se používají k sestavení ukázky Counter Service s názvem úlohy Jenkinse CounterServiceApplication.

      Příklad příkazů použitých k sestavení služby

  9. Ke konfiguraci Jenkinse pro nasazení aplikace do clusteru Service Fabric v akcích po sestavení potřebujete umístění certifikátu tohoto clusteru v kontejneru Jenkinse. V závislosti na tom, jestli je kontejner Jenkins spuštěný uvnitř clusteru nebo mimo váš cluster, zvolte jednu z následujících možností a poznamenejte si umístění certifikátu clusteru:

    • U Jenkinse spuštěného v clusteru: Cestu k certifikátu najdete tak, že v kontejneru zopakujete hodnotu proměnné prostředí Certificates_JenkinsOnSF_Code_MyCert_PEM .

      echo $Certificates_JenkinsOnSF_Code_MyCert_PEM
      
    • V případě Jenkinse spuštěného mimo váš cluster: Následujícím postupem zkopírujte certifikát clusteru do kontejneru:

      1. Váš certifikát musí být ve formátu PEM. Pokud soubor PEM nemáte, můžete ho vytvořit ze souboru PFX certifikátu. Pokud soubor PFX není chráněný heslem, spusťte z hostitele následující příkaz:

        openssl pkcs12 -in clustercert.pfx -out clustercert.pem -nodes -passin pass:
        

        Pokud je soubor PFX chráněný heslem, zahrňte do parametru -passin heslo. Příklad:

        openssl pkcs12 -in clustercert.pfx -out clustercert.pem -nodes -passin pass:<password>
        
      2. Pokud chcete získat ID kontejneru pro kontejner Jenkins, spusťte docker ps ho z hostitele.

      3. Zkopírujte soubor PEM do kontejneru pomocí následujícího příkazu Dockeru:

        docker cp clustercert.pem [first-four-digits-of-container-ID]:/var/jenkins_home
        

Už jste skoro hotovi! Nechte úlohu Jenkinse otevřenou. Jedinou zbývající úlohou je konfigurace kroků po sestavení pro nasazení aplikace do clusteru Service Fabric:

Konfigurace nasazení pomocí koncového bodu správy clusteru

Pro vývojová a testovací prostředí můžete k nasazení aplikace použít koncový bod správy clusteru. Konfigurace akce po sestavení pomocí koncového bodu správy clusteru pro nasazení aplikace vyžaduje nejmenší množství nastavení. Pokud nasazujete do produkčního prostředí, přeskočte k konfiguraci nasazení pomocí přihlašovacích údajů Azure a nakonfigurujte instanční objekt Microsoft Entra tak, aby se používal během nasazování.

  1. V úloze Jenkinse klikněte na kartu Akce po sestavení.

  2. V rozevírací nabídce Post-Build Actions (Akce po sestavení) vyberte Deploy Service Fabric Project (Nasazení projektu Service Fabric).

  3. V části Konfigurace clusteru Service Fabric vyberte přepínač Vyplnit koncový bod správy Service Fabric.

  4. V části Hostitel pro správu zadejte koncový bod připojení pro váš cluster, například {your-cluster}.eastus.cloudapp.azure.com.

  5. V případě klientského klíče a klientského certifikátu zadejte umístění souboru PEM v kontejneru Jenkinse, například /var/jenkins_home/clustercert.pem. (Umístění certifikátu jste zkopírovali v posledním kroku Vytvoření a konfigurace úlohy Jenkinse.)

  6. V části Konfigurace aplikace nakonfigurujte název aplikace, typ aplikace a (relativní) cestu k polím Manifest aplikace.

    Konfigurace koncového bodu správy v Rámci akce Jenkinse jenkinse

  7. Klikněte na Ověřit konfiguraci. Po úspěšném ověření klikněte na Uložit. Kanál úlohy Jenkinse je teď plně nakonfigurovaný. Přeskočte k dalším krokům pro otestování nasazení.

Konfigurace nasazení pomocí přihlašovacích údajů Azure

V produkčních prostředích se důrazně doporučuje nakonfigurovat přihlašovací údaje Azure pro nasazení vaší aplikace. V této části se dozvíte, jak nakonfigurovat instanční objekt Microsoft Entra tak, aby se používal k nasazení aplikace v akci po sestavení. Instanční objekty můžete přiřadit rolím v adresáři, abyste omezili oprávnění úlohy Jenkinse.

Pro vývojová a testovací prostředí můžete nakonfigurovat přihlašovací údaje Azure nebo koncový bod správy clusteru pro nasazení aplikace. Podrobnosti o konfiguraci koncového bodu správy clusteru najdete v tématu Konfigurace nasazení pomocí koncového bodu správy clusteru.

  1. Pokud chcete vytvořit instanční objekt Microsoft Entra a přiřadit mu oprávnění ve vašem předplatném Azure, postupujte podle kroků na portálu a vytvořte aplikaci Microsoft Entra a instanční objekt. Věnujte pozornost následujícímu:

    • Při provádění kroků v tématu nezapomeňte zkopírovat a uložit následující hodnoty: ID aplikace, klíč aplikace, ID adresáře (ID tenanta) a ID předplatného. Potřebujete je ke konfiguraci přihlašovacích údajů Azure v Jenkinsi.
    • Pokud ve svém adresáři nemáte požadovaná oprávnění , budete muset požádat správce, aby vám buď udělil oprávnění, nebo vám vytvořil instanční objekt, nebo budete muset nakonfigurovat koncový bod správy pro váš cluster v akcích po sestavení pro vaši úlohu v Jenkinse.
    • V části Vytvořit aplikaci Microsoft Entra můžete zadat libovolnou dobře formátovanou adresu URL pro přihlašovací adresu URL.
    • V části Přiřadit aplikaci k roli můžete aplikaci přiřadit roli Čtenář ve skupině prostředků clusteru.
  2. Zpět v úloze Jenkinse klikněte na kartu Akce po sestavení.

  3. V rozevírací nabídce Post-Build Actions (Akce po sestavení) vyberte Deploy Service Fabric Project (Nasazení projektu Service Fabric).

  4. V části Konfigurace clusteru Service Fabric klikněte na vybrat cluster Service Fabric. Klikněte na Přidat vedle přihlašovacích údajů Azure. Kliknutím na Jenkinse vyberte zprostředkovatele přihlašovacích údajů Jenkinse.

  5. Ve zprostředkovateli jenkinsových přihlašovacích údajů vyberte v rozevíracím seznamu Kind instanční objekt Microsoft Azure.

  6. Pomocí hodnot, které jste uložili při nastavování instančního objektu v kroku 1, nastavte následující pole:

    • ID klienta: ID aplikace
    • Tajný klíč klienta: Klíč aplikace
    • ID tenanta: ID adresáře
    • ID předplatného: ID předplatného
  7. Zadejte popisné ID , které používáte k výběru přihlašovacích údajů v Jenkinsi, a stručný popis. Potom klikněte na ověřit instanční objekt. Pokud ověření proběhne úspěšně, klikněte na Přidat.

    Service Fabric Jenkins zadejte přihlašovací údaje Azure.

  8. V části Konfigurace clusteru Service Fabric se ujistěte, že jsou pro přihlašovací údaje Azure vybrané nové přihlašovací údaje.

  9. V rozevíracím seznamu Skupina prostředků vyberte skupinu prostředků clusteru, do kterého chcete aplikaci nasadit.

  10. V rozevíracím seznamu Service Fabric vyberte cluster, do kterého chcete aplikaci nasadit.

  11. Jako klientský klíč a klientský certifikát zadejte umístění souboru PEM v kontejneru Jenkinse. Příklad: /var/jenkins_home/clustercert.pem.

  12. V části Konfigurace aplikace nakonfigurujte název aplikace, typ aplikace a (relativní) cestu k polím Manifest aplikace. Akce Post-Build Jenkinse Pro Service Fabric – Konfigurace přihlašovacích údajů Azure

  13. Klikněte na Ověřit konfiguraci. Po úspěšném ověření klikněte na Uložit. Kanál úlohy Jenkinse je teď plně nakonfigurovaný. Pokračujte k dalším krokům a otestujte nasazení.

Řešení potíží s modulem plug-in Jenkins

Pokud u modulu plug-in Jenkins narazíte na nějaké chyby, založte problém v Souboru JIRA Jenkinse pro konkrétní komponentu.

Nápady k vyzkoušení

GitHub a Jenkins jsou teď nakonfigurované. Zvažte provedení nějaké ukázkové změny v reliable-services-actor-sample/Actors/ActorCounter projektu ve forku úložiště, https://github.com/Azure-Samples/service-fabric-java-getting-started. Nasdílejte změny do vzdálené master větve (nebo jakékoli větve, se kterou jste nakonfigurovali pro práci). Tím se aktivuje nakonfigurovaná úloha Jenkinse MyJob. Načte změny z GitHubu, sestaví je a nasadí do clusteru, který jste zadali v akcích po sestavení.

Další kroky