From: Cleber Rosa <crosa@redhat.com>
To: qemu-devel@nongnu.org, "Alex Bennée" <alex.bennee@linaro.org>,
"Peter Maydell" <peter.maydell@linaro.org>
Cc: "Fam Zheng" <fam@euphon.net>, "Thomas Huth" <thuth@redhat.com>,
"Daniel P . Berrangé" <berrange@redhat.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
"Erik Skultety" <eskultet@redhat.com>,
"Stefan Hajnoczi" <stefanha@gmail.com>,
"Andrea Bolognani" <abologna@redhat.com>,
"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
"Willian Rampazzo" <wrampazz@redhat.com>,
"Cleber Rosa" <crosa@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>,
"Beraldo Leal" <bleal@redhat.com>
Subject: [PATCH v5 3/4] Jobs based on custom runners: docs and gitlab-runner setup playbook
Date: Fri, 19 Feb 2021 16:58:37 -0500 [thread overview]
Message-ID: <20210219215838.752547-4-crosa@redhat.com> (raw)
In-Reply-To: <20210219215838.752547-1-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 a number of different Linux
distributions and FreeBSD, and are intended to provide a reproducible
environment.
Signed-off-by: Cleber Rosa <crosa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
docs/devel/ci.rst | 58 ++++++++++++++++++++++++++
scripts/ci/setup/.gitignore | 1 +
scripts/ci/setup/gitlab-runner.yml | 65 ++++++++++++++++++++++++++++++
scripts/ci/setup/vars.yml.template | 13 ++++++
4 files changed, 137 insertions(+)
create mode 100644 scripts/ci/setup/.gitignore
create mode 100644 scripts/ci/setup/gitlab-runner.yml
create mode 100644 scripts/ci/setup/vars.yml.template
diff --git a/docs/devel/ci.rst b/docs/devel/ci.rst
index a556558435..9f9c4bd3f9 100644
--- a/docs/devel/ci.rst
+++ b/docs/devel/ci.rst
@@ -56,3 +56,61 @@ To run the playbook, execute::
cd scripts/ci/setup
ansible-playbook -i inventory build-environment.yml
+
+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), then
+ * CI/CD, then
+ * Runners, and click on the "Expand" button, then
+ * Under "Set up a specific Runner manually", look for the value under
+ "Use the following registration token during setup"
+
+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.
+
+.. note:: gitlab-runner is not available from the standard location
+ for all OS and architectures combinations. For some systems,
+ a custom build may be necessary. Some builds are avaiable
+ at https://cleber.fedorapeople.org/gitlab-runner/ and this
+ URI may be used as a value on ``vars.yml``
+
+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)
+
+Under tags, add values matching the jobs a runner should run. For a
+Ubuntu 20.04 aarch64 system, the tags should be 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``
+ * uncheck the "Run untagged jobs" check box
+ * give it a better Description
diff --git a/scripts/ci/setup/.gitignore b/scripts/ci/setup/.gitignore
new file mode 100644
index 0000000000..f112d05dd0
--- /dev/null
+++ b/scripts/ci/setup/.gitignore
@@ -0,0 +1 @@
+vars.yml
\ No newline at end of file
diff --git a/scripts/ci/setup/gitlab-runner.yml b/scripts/ci/setup/gitlab-runner.yml
new file mode 100644
index 0000000000..ab1944965f
--- /dev/null
+++ b/scripts/ci/setup/gitlab-runner.yml
@@ -0,0 +1,65 @@
+---
+- 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: Checks the availability of official gitlab-runner builds in the archive
+ uri:
+ url: https://s3.amazonaws.com/gitlab-runner-downloads/v{{ gitlab_runner_version }}/binaries/gitlab-runner-linux-386
+ method: HEAD
+ status_code:
+ - 200
+ - 403
+ register: gitlab_runner_available_archive
+
+ - name: Update base url
+ set_fact:
+ gitlab_runner_base_url: https://s3.amazonaws.com/gitlab-runner-downloads/v{{ gitlab_runner_version }}/binaries/gitlab-runner-
+ when: gitlab_runner_available_archive.status == 200
+ - debug:
+ msg: Base gitlab-runner url is {{ gitlab_runner_base_url }}
+
+ - 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: Downloads the matching gitlab-runner
+ get_url:
+ dest: /usr/local/bin/gitlab-runner
+ url: "{{ gitlab_runner_base_url }}{{ 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 --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..621435d030
--- /dev/null
+++ b/scripts/ci/setup/vars.yml.template
@@ -0,0 +1,13 @@
+# The version of the gitlab-runner to use
+gitlab_runner_version: 13.1.1
+# The base location of gitlab-runner binaries, this will be suffixed by $OS-$ARCH
+gitlab_runner_base_url: https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-
+# 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
+# Defaults to linux, checks can be used to change this
+gitlab_runner_os: linux
+# Defaults to amd64 (x86_64), checks can be used to change this
+gitlab_runner_arch: amd64
+# A unique token made available by GitLab to your project for registering runners
+gitlab_runner_registration_token: PLEASE_PROVIDE_A_VALID_TOKEN
--
2.25.4
next prev parent reply other threads:[~2021-02-19 22:04 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-19 21:58 [PATCH v5 0/4] GitLab Custom Runners and Jobs (was: QEMU Gating CI) Cleber Rosa
2021-02-19 21:58 ` [PATCH v5 1/4] Jobs based on custom runners: documentation and configuration placeholder Cleber Rosa
2021-02-23 11:18 ` Alex Bennée
2021-02-23 11:25 ` Thomas Huth
2021-02-23 16:37 ` Philippe Mathieu-Daudé
2021-02-23 16:47 ` Cleber Rosa
2021-02-23 17:24 ` Philippe Mathieu-Daudé
2021-02-23 17:34 ` Philippe Mathieu-Daudé
2021-02-23 18:09 ` Cleber Rosa
2021-02-24 11:57 ` Philippe Mathieu-Daudé
2021-02-24 15:47 ` Cleber Rosa
2021-02-23 17:45 ` Daniel P. Berrangé
2021-02-23 21:34 ` Wainer dos Santos Moschetta
2021-02-19 21:58 ` [PATCH v5 2/4] Jobs based on custom runners: build environment docs and playbook Cleber Rosa
2021-02-22 19:36 ` Wainer dos Santos Moschetta
2021-02-23 14:01 ` Alex Bennée
2021-02-23 14:51 ` Erik Skultety
2021-02-23 15:17 ` Alex Bennée
2021-02-23 17:23 ` Cleber Rosa
2021-02-23 18:18 ` Alex Bennée
2021-02-23 17:13 ` Cleber Rosa
2021-02-23 15:01 ` Alex Bennée
2021-02-23 17:44 ` Cleber Rosa
2021-02-23 18:23 ` Alex Bennée
2021-02-23 19:47 ` Cleber Rosa
2021-02-23 17:08 ` Cleber Rosa
2021-02-23 18:16 ` Alex Bennée
2021-02-19 21:58 ` Cleber Rosa [this message]
2021-02-22 6:36 ` [PATCH v5 3/4] Jobs based on custom runners: docs and gitlab-runner setup playbook Erik Skultety
2021-02-22 20:35 ` Wainer dos Santos Moschetta
2021-02-23 13:52 ` Philippe Mathieu-Daudé
2021-02-23 13:55 ` Philippe Mathieu-Daudé
2021-02-23 14:14 ` Philippe Mathieu-Daudé
2021-02-23 15:15 ` Alex Bennée
2021-02-19 21:58 ` [PATCH v5 4/4] Jobs based on custom runners: add job definitions for QEMU's machines Cleber Rosa
2021-02-23 15:17 ` Philippe Mathieu-Daudé
2021-02-23 15:56 ` Daniel P. Berrangé
2021-02-23 16:41 ` Philippe Mathieu-Daudé
2021-02-23 18:25 ` Cleber Rosa
2021-02-24 12:00 ` Philippe Mathieu-Daudé
2021-02-24 15:54 ` Cleber Rosa
2021-02-23 18:21 ` Cleber Rosa
2021-02-23 15:27 ` Philippe Mathieu-Daudé
2021-02-23 15:35 ` Philippe Mathieu-Daudé
2021-02-23 15:45 ` Daniel P. Berrangé
2021-03-05 10:14 ` [PATCH v5 0/4] GitLab Custom Runners and Jobs (was: QEMU Gating CI) Philippe Mathieu-Daudé
2021-03-05 10:27 ` Philippe Mathieu-Daudé
2021-05-21 10:29 ` Alex Bennée
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=20210219215838.752547-4-crosa@redhat.com \
--to=crosa@redhat.com \
--cc=abologna@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=berrange@redhat.com \
--cc=bleal@redhat.com \
--cc=ehabkost@redhat.com \
--cc=eskultet@redhat.com \
--cc=fam@euphon.net \
--cc=peter.maydell@linaro.org \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
--cc=thuth@redhat.com \
--cc=wainersm@redhat.com \
--cc=wrampazz@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).