• Home
  • Portfolio
  • Contact
  • Home
  • Portfolio
  • Contact

Unreal build automatisering via Slack met Perforce en Jenkins

Technologieën:

Unreal Engine, Jenkins, Perforce, Slack Bolt, Python, Bash, OpenAI

datum:

April 2025

Unreal game builds maken is niemand’s favoriete taakje tijdens het maken van een immersive ervaring. Maar toch is het altijd belangrijk om te playtesten op een shipping build. Hoe zorg je ervoor dat je altijd een recente build klaar hebt staan? Voor Filmacademie Immersive Media afstudeerproject Helleveeg heb ik dit volledig geautomatiseerd.

Het plan

Er waren een aantal redenen dat builds automatiseren erg belangrijk was voor Helleveeg:

  • Het build process is erg error gevoelig en neemt veel tijd in beslag. 
  • Er moesten – zeker tegen het einde aan –  elke dag meerdere builds gemaakt worden om features te testen.
  • Consistente builds zorgen ervoor dat de zin “maar het werkt op mijn computer” niet meer wordt geopperd.

Om het build process voor het team zo makkelijk mogelijk te maken had ik de volgende doelen gesteld:

  • Elke nacht wordt er een nightly build gemaakt om de volgende dag mee te playtesten.
  • De build wordt gecomprimeerd en naar onze map op de netwerk schijf gekopieerd. 
  • Alle informatie over het build proces wordt overzichtelijk gepost door een bot in een Slack kanaal.
  • Het team kan via de Slack bot ook zelf overdag builds aanvragen.
  • Wanneer een build faalt worden alle errors uit de Unreal log gehaald en in één net .txt bestandje op de netwerk schijf gezet. Ook worden de errors samengevat door ChatGPT en in het Slack kanaal gepost.
  • De Slack bot post een berichtje wanneer iemand een Perforce changelist submit zodat iedereen op de hoogte is van elkaars werk.

De uitvoering

De eerste stap was natuurlijk om de ICT mensen op school lief aan te kijken, want we hadden een extra PC nodig waar de builds op gemaakt konden worden. Toen dit eenmaal geregeld was kon ik echt beginnen met alle automatisering opzetten. Ik heb Jenkins gekozen als CI/CD platform, de Slack systemen gemaakt met Slack Bolt en een aantal Python scripts geschreven die tijdens het build process gedraaid werden. Het hele systeem kun je samenvatten in drie onderdelen:

Praktisch zat alles in elkaar met erg veel functies zoals deze:

@app.post("/send_changelist/{changelist_number}")
async def send_changelist(changelist_number: int) -> None:
    """"Sends a message to the Helleveeg DevOps channel with the description of a Perforce changelist.
    
    Args:
        changelist_number: The number of the changelist to send the description of.
    """
    p4.connect()
    change = p4.run_describe("-s", str(changelist_number))[0]
    user = change["user"]
    description = change["desc"]
    p4.disconnect()

    message = f":page_with_curl: {user} submitted changelist {changelist_number} with the following changes:\n```\n{description}```"

    await slack_app.client.chat_postMessage(
        channel="l2025_helleveeg_devops", text=message
    )

Ik zal hier niet alle code laten zien, maar om de mensen die dit echt interessant vinden een goed idee te geven van de Jenkins configuratie is hier een filmpje waarin ik door de hele setup heen scroll:

Game development ICT
(VORIGE)

Room Booker: Een open source kamer reserveringssysteem

(VOLGENDE)

Het ontwerpen en bouwen van de eerste mindfulness ruimte van de AHK

Soortgelijke projecten

Unreal build automatisering via Slack met Perforce en Jenkins
Game developmentICT
Meffec: Realtime app-triggerable show control infrastructuur
ICTImmersiveSoftware development
Room Booker: Een open source kamer reserveringssysteem
ICTSoftware development