doc: Add working with Cilicon section
This commit is contained in:
@@ -43,6 +43,7 @@ SOURCES = \
|
|||||||
source/tracing.rst \
|
source/tracing.rst \
|
||||||
source/troubleshoot.rst \
|
source/troubleshoot.rst \
|
||||||
source/utilities.rst \
|
source/utilities.rst \
|
||||||
|
source/working-with-cilicon.rst \
|
||||||
source/working-with-cmake.rst \
|
source/working-with-cmake.rst \
|
||||||
source/working-with-docker.rst \
|
source/working-with-docker.rst \
|
||||||
source/working-with-git.rst \
|
source/working-with-git.rst \
|
||||||
|
|||||||
@@ -18,3 +18,4 @@ This chapter describes the development ecosystem generally used to create new mo
|
|||||||
profiling
|
profiling
|
||||||
working-with-gitlab-ci-local
|
working-with-gitlab-ci-local
|
||||||
working-with-docker
|
working-with-docker
|
||||||
|
working-with-cilicon
|
||||||
|
|||||||
115
doc/manual/source/working-with-cilicon.rst
Normal file
115
doc/manual/source/working-with-cilicon.rst
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
.. include:: replace.txt
|
||||||
|
.. highlight:: bash
|
||||||
|
|
||||||
|
.. _Working with Cilicon:
|
||||||
|
|
||||||
|
Working with Cilicon
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
.. _continuous integration (CI) : https://docs.gitlab.com/ee/ci/
|
||||||
|
.. _Cilicon : https://github.com/traderepublic/Cilicon/
|
||||||
|
.. _Cilicon releases : https://github.com/traderepublic/Cilicon/releases/
|
||||||
|
|
||||||
|
The ns-3 project repository is currently hosted in GitLab, which includes
|
||||||
|
`continuous integration (CI)`_ tools to automate build, tests, packaging and
|
||||||
|
distribution of software. The CI works based on jobs, that are defined
|
||||||
|
in YAML files and run inside containers.
|
||||||
|
|
||||||
|
While we can run most Linux containers everywhere without much problem,
|
||||||
|
that is not the case for Windows and MacOS. You can run gitlab-runner as a
|
||||||
|
local user, taking proper precautions to avoid that user from escalating privileges,
|
||||||
|
then taking over your own network and other systems on it.
|
||||||
|
|
||||||
|
That is typically harder than just enforce network security, and virtualization-based security.
|
||||||
|
GitLab doesn't offer a way to do that, other than their own runners, which cost up to 6x more
|
||||||
|
than linux ones.
|
||||||
|
Which is why Trade Republic created the `Cilicon`_ application for MacOS, which creates an ephemeral virtual
|
||||||
|
machine, executes a gitlab job, then destroys the VM, and creates a fresh new one.
|
||||||
|
|
||||||
|
To set it up, first go to System Settings->Energy and enable all options to prevent sleep, wake on
|
||||||
|
network traffic, and restart after power failure (assuming the Mac will be used exclusively as a CI server).
|
||||||
|
|
||||||
|
After this, download the latest release in `Cilicon releases`_.
|
||||||
|
Put the application in Applications directory and start it. It will ask you to install MacOS virtualization framework.
|
||||||
|
|
||||||
|
If you only have a single CI runner that you wish to run, follow their easy settings and create a
|
||||||
|
``~/cilicon.yml`` file at the user directory containing:
|
||||||
|
|
||||||
|
.. sourcecode:: yaml
|
||||||
|
|
||||||
|
source: oci://ghcr.io/cirruslabs/macos-runner:sequoia
|
||||||
|
provisioner:
|
||||||
|
type: gitlab
|
||||||
|
config:
|
||||||
|
gitlabURL: <GITLAB_INSTANCE_URL>
|
||||||
|
runnerToken: <RUNNER_TOKEN>
|
||||||
|
|
||||||
|
If you have multiple CI runners that you wish to run from a single machine, one job at a time,
|
||||||
|
you need a custom configuration file, first create a folder that will be shared with the VM.
|
||||||
|
|
||||||
|
.. sourcecode:: console
|
||||||
|
|
||||||
|
mkdir /Users/nsnam/gitlab-ephemeral
|
||||||
|
|
||||||
|
Then add your GitLab runner ``config.toml`` file there, for example, containing:
|
||||||
|
|
||||||
|
.. sourcecode:: toml
|
||||||
|
|
||||||
|
concurrent = 1
|
||||||
|
check_interval = 0
|
||||||
|
connection_max_age = "15m0s"
|
||||||
|
shutdown_timeout = 0
|
||||||
|
|
||||||
|
[session_server]
|
||||||
|
session_timeout = 1800
|
||||||
|
|
||||||
|
[[runners]]
|
||||||
|
name = "MacOsRunnerForProjectA"
|
||||||
|
url = "https://gitlab.com/"
|
||||||
|
token = "<RUNNER_TOKEN_A>"
|
||||||
|
executor = "shell"
|
||||||
|
cleanup_policy = "always"
|
||||||
|
|
||||||
|
[[runners]]
|
||||||
|
name = "MacOsRunnerForProjectB"
|
||||||
|
url = "https://gitlab.com/"
|
||||||
|
token = "<RUNNER_TOKEN_B>"
|
||||||
|
executor = "shell"
|
||||||
|
cleanup_policy = "always"
|
||||||
|
|
||||||
|
|
||||||
|
Then create a ``cilicon.yml`` file at the user directory containing:
|
||||||
|
|
||||||
|
.. sourcecode:: yaml
|
||||||
|
|
||||||
|
source: oci://ghcr.io/cirruslabs/macos-sonoma-xcode:15
|
||||||
|
provisioner:
|
||||||
|
type: script
|
||||||
|
config:
|
||||||
|
run: |
|
||||||
|
cp /Volumes/My\ Shared\ Files/gitlab-runner/config.toml /Users/admin/.gitlab-runner/config.toml
|
||||||
|
gitlab-runner run
|
||||||
|
consoleDevices:
|
||||||
|
- tart-version-2
|
||||||
|
hardware:
|
||||||
|
ramGigabytes: 20
|
||||||
|
connectsToAudioDevice: false
|
||||||
|
directoryMounts:
|
||||||
|
- hostPath: /Users/nsnam/gitlab-ephemeral
|
||||||
|
guestFolder: gitlab-runner
|
||||||
|
readOnly: true
|
||||||
|
|
||||||
|
Note: If you want to create a new VM for every CI job, replace ``gitlab-runner run``
|
||||||
|
with ``gitlab-runner run-single``. Not very recommended, because it will hit SSD hard.
|
||||||
|
And recent Macs have soldered storage.
|
||||||
|
|
||||||
|
After configuring everything, execute Cilicon. It will setup MacOS virtualization framework, then fetch the VM image.
|
||||||
|
It will then start the VM.
|
||||||
|
|
||||||
|
At this point, MacOS will query you for being visible in network.
|
||||||
|
You need to say yes, so the VM can access the shared directory.
|
||||||
|
|
||||||
|
Otherwise, you need to either write the TOML with the cilicon.yml, or download it from a remote server.
|
||||||
|
|
||||||
|
At this point, you should have your native MacOS runners fully working.
|
||||||
|
Try starting a job and see if they respond via GitLab web interface.
|
||||||
Reference in New Issue
Block a user