Develop games with HTML5 game framework GameClosure using Docker and Gitlab CI.
Docker for Development
Following the guide of GameClosure, I made a Dockerfile that has
gameclosure/devkit installed where I copied
manifest.json, package.json and run the commands to install dependencies:
COPY --chown=node manifest.json package.json ./ RUN devkit install COPY --chown=node ./package.json ./ RUN npm install CMD [ "devkit", "serve" ]
My project only needs 2 folders:
src for source codes and
resources for assets. These are the folders required by GameClosure, everything else are dependencies and installed in the docker image. Using
docker-compose, I mount these folders to the container and expose port
volumes: - ./src:/home/node/game/src - ./resources:/home/node/game/resources ports: - 9200:9200
From the host machine, I can access devkit page via browser at
localhost:9200 as normal.
In order to build the project, I need another
docker-compose configuration to mount a
build folder and run the build command instead of
volumes: - ./build:/home/node/game/build command: devkit debug browser-mobile
I didn’t want to build the game manually, so I used Gitlab CI/CD service to have it runs the container, builds the game and deploys to Gitlab Pages for me. I create this
.gitlab-ci.yml file with
pages job that build the game into
Unlike Github Pages which can only build Jekyll, Gitlab Pages can automatically build almost anything with its CI/CD service.
pages: stage: deploy script: - docker-compose -f docker-compose.yml -f docker-compose.browser-mobile.yml up - cp -a build/debug/browser-mobile/. public/ artifacts: paths: - public
Now, everytime I push to my Gitlab repository, the game will be built and served at Gitlab Pages.