From: "Alex Bennée" <alex.bennee@linaro.org>
To: peter.maydell@linaro.org
Cc: "Thomas Huth" <thuth@redhat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
qemu-devel@nongnu.org, "Willian Rampazzo" <willianr@redhat.com>,
"Cleber Rosa" <crosa@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>
Subject: [PULL v5 03/44] Jobs based on custom runners: docs and gitlab-runner setup playbook
Date: Wed, 14 Jul 2021 15:59:55 +0100 [thread overview]
Message-ID: <20210714150036.21060-4-alex.bennee@linaro.org> (raw)
In-Reply-To: <20210714150036.21060-1-alex.bennee@linaro.org>
From: Cleber Rosa <crosa@redhat.com>
To have the jobs dispatched to custom runners, gitlab-runner must
be installed, active as a service and properly configured. The
variables file and playbook introduced here should help with those
steps.
The playbook introduced here covers the Linux distributions and
has been primarily tested on OS/machines that the QEMU project
has available to act as runners, namely:
* Ubuntu 20.04 on aarch64
* Ubuntu 18.04 on s390x
But, it should work on all other Linux distributions. Earlier
versions were tested on FreeBSD too, so chances of success are
high.
Signed-off-by: Cleber Rosa <crosa@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Willian Rampazzo <willianr@redhat.com>
Tested-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Willian Rampazzo <willianr@redhat.com>
Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20210630012619.115262-4-crosa@redhat.com>
Message-Id: <20210709143005.1554-4-alex.bennee@linaro.org>
diff --git a/docs/devel/ci.rst b/docs/devel/ci.rst
index bfedbb1025..b3bf3ef615 100644
--- a/docs/devel/ci.rst
+++ b/docs/devel/ci.rst
@@ -70,3 +70,58 @@ privileges, such as those from the ``root`` account or those obtained
by ``sudo``. If necessary, please refer to ``ansible-playbook``
options such as ``--become``, ``--become-method``, ``--become-user``
and ``--ask-become-pass``.
+
+gitlab-runner setup and registration
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The gitlab-runner agent needs to be installed on each machine that
+will run jobs. The association between a machine and a GitLab project
+happens with a registration token. To find the registration token for
+your repository/project, navigate on GitLab's web UI to:
+
+ * Settings (the gears-like icon at the bottom of the left hand side
+ vertical toolbar), then
+ * CI/CD, then
+ * Runners, and click on the "Expand" button, then
+ * Under "Set up a specific Runner manually", look for the value under
+ "And this registration token:"
+
+Copy the ``scripts/ci/setup/vars.yml.template`` file to
+``scripts/ci/setup/vars.yml``. Then, set the
+``gitlab_runner_registration_token`` variable to the value obtained
+earlier.
+
+To run the playbook, execute::
+
+ cd scripts/ci/setup
+ ansible-playbook -i inventory gitlab-runner.yml
+
+Following the registration, it's necessary to configure the runner tags,
+and optionally other configurations on the GitLab UI. Navigate to:
+
+ * Settings (the gears like icon), then
+ * CI/CD, then
+ * Runners, and click on the "Expand" button, then
+ * "Runners activated for this project", then
+ * Click on the "Edit" icon (next to the "Lock" Icon)
+
+Tags are very important as they are used to route specific jobs to
+specific types of runners, so it's a good idea to double check that
+the automatically created tags are consistent with the OS and
+architecture. For instance, an Ubuntu 20.04 aarch64 system should
+have tags set as::
+
+ ubuntu_20.04,aarch64
+
+Because the job definition at ``.gitlab-ci.d/custom-runners.yml``
+would contain::
+
+ ubuntu-20.04-aarch64-all:
+ tags:
+ - ubuntu_20.04
+ - aarch64
+
+It's also recommended to:
+
+ * increase the "Maximum job timeout" to something like ``2h``
+ * give it a better Description
diff --git a/scripts/ci/setup/.gitignore b/scripts/ci/setup/.gitignore
index ee088604d1..f4a6183f1f 100644
--- a/scripts/ci/setup/.gitignore
+++ b/scripts/ci/setup/.gitignore
@@ -1,2 +1,2 @@
inventory
-
+vars.yml
diff --git a/scripts/ci/setup/gitlab-runner.yml b/scripts/ci/setup/gitlab-runner.yml
new file mode 100644
index 0000000000..1127db516f
--- /dev/null
+++ b/scripts/ci/setup/gitlab-runner.yml
@@ -0,0 +1,71 @@
+# Copyright (c) 2021 Red Hat, Inc.
+#
+# Author:
+# Cleber Rosa <crosa@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2 or
+# later. See the COPYING file in the top-level directory.
+#
+# This is an ansible playbook file. Run it to set up systems with the
+# gitlab-runner agent.
+---
+- name: Installation of gitlab-runner
+ hosts: all
+ vars_files:
+ - vars.yml
+ tasks:
+ - debug:
+ msg: 'Checking for a valid GitLab registration token'
+ failed_when: "gitlab_runner_registration_token == 'PLEASE_PROVIDE_A_VALID_TOKEN'"
+
+ - name: Create a group for the gitlab-runner service
+ group:
+ name: gitlab-runner
+
+ - name: Create a user for the gitlab-runner service
+ user:
+ user: gitlab-runner
+ group: gitlab-runner
+ comment: GitLab Runner
+ home: /home/gitlab-runner
+ shell: /bin/bash
+
+ - name: Remove the .bash_logout file when on Ubuntu systems
+ file:
+ path: /home/gitlab-runner/.bash_logout
+ state: absent
+ when: "ansible_facts['distribution'] == 'Ubuntu'"
+
+ - name: Set the Operating System for gitlab-runner
+ set_fact:
+ gitlab_runner_os: "{{ ansible_facts[\"system\"]|lower }}"
+ - debug:
+ msg: gitlab-runner OS is {{ gitlab_runner_os }}
+
+ - name: Set the architecture for gitlab-runner
+ set_fact:
+ gitlab_runner_arch: "{{ ansible_to_gitlab_arch[ansible_facts[\"architecture\"]] }}"
+ - debug:
+ msg: gitlab-runner arch is {{ gitlab_runner_arch }}
+
+ - name: Download the matching gitlab-runner
+ get_url:
+ dest: /usr/local/bin/gitlab-runner
+ url: "https://s3.amazonaws.com/gitlab-runner-downloads/v{{ gitlab_runner_version }}/binaries/gitlab-runner-{{ gitlab_runner_os }}-{{ gitlab_runner_arch }}"
+ owner: gitlab-runner
+ group: gitlab-runner
+ mode: u=rwx,g=rwx,o=rx
+
+ - name: Register the gitlab-runner
+ command: "/usr/local/bin/gitlab-runner register --non-interactive --url {{ gitlab_runner_server_url }} --registration-token {{ gitlab_runner_registration_token }} --executor shell --tag-list {{ ansible_facts[\"architecture\"] }},{{ ansible_facts[\"distribution\"]|lower }}_{{ ansible_facts[\"distribution_version\"] }} --description '{{ ansible_facts[\"distribution\"] }} {{ ansible_facts[\"distribution_version\"] }} {{ ansible_facts[\"architecture\"] }} ({{ ansible_facts[\"os_family\"] }})'"
+
+ - name: Install the gitlab-runner service using its own functionality
+ command: /usr/local/bin/gitlab-runner install --user gitlab-runner --working-directory /home/gitlab-runner
+ register: gitlab_runner_install_service_result
+ failed_when: "gitlab_runner_install_service_result.rc != 0 and \"already exists\" not in gitlab_runner_install_service_result.stderr"
+
+ - name: Enable the gitlab-runner service
+ service:
+ name: gitlab-runner
+ state: started
+ enabled: yes
diff --git a/scripts/ci/setup/vars.yml.template b/scripts/ci/setup/vars.yml.template
new file mode 100644
index 0000000000..e48089761f
--- /dev/null
+++ b/scripts/ci/setup/vars.yml.template
@@ -0,0 +1,12 @@
+# The version of the gitlab-runner to use
+gitlab_runner_version: 13.12.0
+# The URL of the gitlab server to use, usually https://gitlab.com unless you're
+# using a private GitLab instance
+gitlab_runner_server_url: https://gitlab.com
+# A mapping of the ansible to gitlab architecture nomenclature
+ansible_to_gitlab_arch:
+ x86_64: amd64
+ aarch64: arm64
+ s390x: s390x
+# A unique token made available by GitLab to your project for registering runners
+gitlab_runner_registration_token: PLEASE_PROVIDE_A_VALID_TOKEN
--
2.20.1
next prev parent reply other threads:[~2021-07-14 15:02 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-14 14:59 [PULL v5 00/44] testing, build and plugin updates Alex Bennée
2021-07-14 14:59 ` [PULL v5 01/44] Jobs based on custom runners: documentation and configuration placeholder Alex Bennée
2021-07-14 14:59 ` [PULL v5 02/44] Jobs based on custom runners: build environment docs and playbook Alex Bennée
2021-07-14 14:59 ` Alex Bennée [this message]
2021-07-14 14:59 ` [PULL v5 04/44] Jobs based on custom runners: add job definitions for QEMU's machines Alex Bennée
2021-07-14 14:59 ` [PULL v5 05/44] tests/tcg: also disable the signals test for plugins Alex Bennée
2021-07-14 14:59 ` [PULL v5 06/44] meson: fix condition for io_uring stubs Alex Bennée
2021-07-14 14:59 ` [PULL v5 07/44] disable modular TCG on Darwin Alex Bennée
2021-07-14 15:00 ` [PULL v5 08/44] build: validate that system capstone works before using it Alex Bennée
2021-07-14 15:00 ` [PULL v5 09/44] gitlab: support for FreeBSD 12, 13 and macOS 11 via cirrus-run Alex Bennée
2021-07-14 15:00 ` [PULL v5 10/44] cirrus: delete FreeBSD and macOS jobs Alex Bennée
2021-07-14 15:00 ` [PULL v5 11/44] hw/usb/ccid: remove references to NSS Alex Bennée
2021-07-14 15:00 ` [PULL v5 12/44] tests/docker: don't use BUILDKIT in GitLab either Alex Bennée
2021-07-14 15:00 ` [PULL v5 13/44] tests/docker: use project specific container registries Alex Bennée
2021-07-14 15:00 ` [PULL v5 14/44] tests/docker: use explicit docker.io registry Alex Bennée
2021-07-14 15:00 ` [PULL v5 15/44] tests/docker: remove FEATURES env var from templates Alex Bennée
2021-07-14 15:00 ` [PULL v5 16/44] tests/docker: fix sorting in package lists Alex Bennée
2021-07-14 15:00 ` [PULL v5 17/44] tests/docker: fix mistakes in centos " Alex Bennée
2021-07-14 15:00 ` [PULL v5 18/44] tests/docker: fix mistakes in fedora package list Alex Bennée
2021-07-14 15:00 ` [PULL v5 19/44] tests/docker: fix mistakes in ubuntu package lists Alex Bennée
2021-07-14 15:00 ` [PULL v5 20/44] tests/docker: remove mingw packages from Fedora Alex Bennée
2021-07-14 15:00 ` [PULL v5 21/44] tests/docker: expand centos8 package list Alex Bennée
2021-07-14 15:00 ` [PULL v5 22/44] tests/docker: expand fedora " Alex Bennée
2021-07-14 15:00 ` [PULL v5 23/44] tests/docker: expand ubuntu1804 " Alex Bennée
2021-07-14 15:00 ` [PULL v5 24/44] tests/docker: expand ubuntu2004 " Alex Bennée
2021-07-14 15:00 ` [PULL v5 25/44] tests/docker: expand opensuse-leap " Alex Bennée
2021-07-14 15:00 ` [PULL v5 26/44] tests/vm: update NetBSD to 9.2 Alex Bennée
2021-07-14 15:00 ` [PULL v5 27/44] tests/vm: update openbsd to release 6.9 Alex Bennée
2021-07-14 15:00 ` [PULL v5 28/44] tests/tcg: make test-mmap a little less aggressive Alex Bennée
2021-07-14 15:00 ` [PULL v5 29/44] plugins: fix-up handling of internal hostaddr for 32 bit Alex Bennée
2021-07-14 15:00 ` [PULL v5 30/44] meson.build: move TCG plugin summary output Alex Bennée
2021-07-14 15:00 ` [PULL v5 31/44] meson.build: relax the libdl test to one for the function dlopen Alex Bennée
2021-07-14 15:00 ` [PULL v5 32/44] tcg/plugins: remove some stale entries from the symbol list Alex Bennée
2021-07-14 15:00 ` [PULL v5 33/44] configure: don't allow plugins to be enabled for a non-TCG build Alex Bennée
2021-07-14 15:00 ` [PULL v5 34/44] configure: add an explicit static and plugins check Alex Bennée
2021-07-14 15:00 ` [PULL v5 35/44] configure: stop user enabling plugins on Windows for now Alex Bennée
2021-07-14 15:00 ` [PULL v5 36/44] tcg/plugins: enable by default for most TCG builds Alex Bennée
2021-07-14 15:00 ` [PULL v5 37/44] contrib/plugins: enable -Wall for building plugins Alex Bennée
2021-07-14 15:00 ` [PULL v5 38/44] contrib/plugins: add execlog to log instruction execution and memory access Alex Bennée
2021-07-14 15:00 ` [PULL v5 39/44] docs/devel: tcg-plugins: add execlog plugin description Alex Bennée
2021-07-14 15:00 ` [PULL v5 40/44] plugins: Added a new cache modelling plugin Alex Bennée
2021-07-14 15:00 ` [PULL v5 41/44] plugins/cache: Enable cache parameterization Alex Bennée
2021-07-14 15:00 ` [PULL v5 42/44] plugins/cache: Added FIFO and LRU eviction policies Alex Bennée
2021-07-14 15:00 ` [PULL v5 43/44] docs/devel: Added cache plugin to the plugins docs Alex Bennée
2021-07-14 15:00 ` [PULL v5 44/44] MAINTAINERS: Added myself as a reviewer for TCG Plugins Alex Bennée
2021-07-15 18:05 ` [PULL v5 00/44] testing, build and plugin updates Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210714150036.21060-4-alex.bennee@linaro.org \
--to=alex.bennee@linaro.org \
--cc=crosa@redhat.com \
--cc=f4bug@amsat.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
--cc=wainersm@redhat.com \
--cc=willianr@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).