A typical CI/CD setup will include an instance hosting the main repository and container registry using GitLab or similar software. Typically, one virtual machine will be sufficient, and as this workload mainly requires CPU and storage, we often see customers choosing a Starter S-16 Instance for that purpose.
Staying in GitLab terminology, a runner is an agent that picks up a CI job through the API, runs the job, and sends the result back to the main GitLab instance. CI/CD Runners mainly require CPU to run, so a CPU Optimized Instance like CO-8 is a safe choice. The number of instances you'll need depends on the scale of your project and the number of unit tests and automated acceptance tests.
Dev & Staging Environments
Every CI/CD pipeline requires a certain number of development and staging environments. They are often not overloaded with traffic, so a simple Starter Instance like an S-4 with NVMe should be absolutely sufficient.
A centralized place for caching runner nodes, as well as for backups and logs comes in handy for every multi-instance setup, but it's especially crucial for the CI/CD pipeline, as it simplifies the setup and improves deployment time. We often see Object Storage being used for that purpose.
Monitoring and Logging Node
Centralizing monitoring and logging on separate instances makes managing your cloud infrastructure much easier. Tools like Prometheus, Telegraf + InfluxDB, or Elasticsearch have moderate CPU, RAM and storage requirements, so you can start with a Starter Instance and later switch to one with optimized storage, if needed. For larger setups, go with NVMe rather than SSD storage.
Having a custom image and cloud-init script for each instance type will greatly improve the speed of deployment in case you need more nodes, and will save you a ton of time on maintenance. Using Ansible or Chef will further enhance cloud-init possibilities.
In most cases you don't want the outer world to see your work in progress. Using private networks can give you the needed privacy until you are ready to go live.