From 1f9873579c9d27aea146e2636e6cb2ff8441d3a0 Mon Sep 17 00:00:00 2001 From: OldTyT Date: Sun, 25 Feb 2024 01:14:24 +0300 Subject: [PATCH] Initial commit --- .gitignore | 5 +++++ .gitlab-ci.yml | 10 ++++++++++ .yamllint | 11 +++++++++++ README.md | 26 ++++++++++++++++++++++++++ defaults/main.yml | 10 ++++++++++ handlers/main.yml | 6 ++++++ meta/main.yml | 12 ++++++++++++ tasks/config.yml | 24 ++++++++++++++++++++++++ tasks/install.yml | 6 ++++++ tasks/main.yml | 16 ++++++++++++++++ tasks/registration.yml | 30 ++++++++++++++++++++++++++++++ templates/gitlab-runner.service.j2 | 18 ++++++++++++++++++ 12 files changed, 174 insertions(+) create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 .yamllint create mode 100644 README.md create mode 100644 defaults/main.yml create mode 100644 handlers/main.yml create mode 100644 meta/main.yml create mode 100644 tasks/config.yml create mode 100644 tasks/install.yml create mode 100644 tasks/main.yml create mode 100644 tasks/registration.yml create mode 100644 templates/gitlab-runner.service.j2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b2a37ff --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.log +*.pyc +**/__pycache__/ +.env +.secrets diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..20d12bd --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,10 @@ +--- +stages: + - linter + +linter: + stage: linter + image: + name: osshelp/drone-linter + entrypoint: [""] + script: [entrypoint.sh] diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..ad0be76 --- /dev/null +++ b/.yamllint @@ -0,0 +1,11 @@ +extends: default + +rules: + braces: + max-spaces-inside: 1 + level: error + brackets: + max-spaces-inside: 1 + level: error + line-length: disable + truthy: disable diff --git a/README.md b/README.md new file mode 100644 index 0000000..13d149c --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +# gitlab-runner + +Simple Ansible role for gitlab-runner installation. + +## Usage (example) + +```yaml + - role: gitlab-runner + gitlab_runner_registration_token: "secret_string" + gitlab_runner_executor: "shell" +``` + +## Available parameters + +### Main + +| Param | Default | Description | +| -------- | -------- | -------- | +| `gitlab_runner_registration_token` | `""` | GitLab runner registration token. | +| `gitlab_runner_executor` | `""` | GitLab runner executor. Support: `shell` or `docker` | +| `gitlab_runner_user` | `gitlab-runner` | Running GitLab runner under the user | +| `gitlab_runner_instance_url` | `https://gitlab.com` | GitLab instance URL | +| `gitlab_runner_working_directory` | `/home/gitlab-runner` | GitLab Runner working directory | +| `gitlab_runner_runner_description` | `The runner was registered using ansible.` | GitLab runner description | +| `gitlab_runner_docker_default_image` | `alpine` | GitLab runner default image | +| `gitlab_runner_tags` | `""` | GitLab runner tags | diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..9bff2fd --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,10 @@ +--- +gitlab_runner_architecture: "amd64" +gitlab_runner_binary_path: "/usr/local/bin/gitlab-runner" +gitlab_runner_download_url: "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-{{ gitlab_runner_architecture }}" +gitlab_runner_instance_url: "https://gitlab.com" +gitlab_runner_user: "gitlab-runner" +gitlab_runner_working_directory: "/home/gitlab-runner" +gitlab_runner_config_path: "/etc/gitlab-runner/config.toml" +gitlab_runner_runner_description: "The runner was registered using ansible." +gitlab_runner_docker_default_image: "alpine" diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..ac356f9 --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,6 @@ +--- +- name: reload gitlab runner unit + systemd: daemon_reload=yes + +- name: restart reload gitlab runner service + systemd: name=gitlab-runner state=restarted diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 0000000..1e404ca --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,12 @@ +--- +galaxy_info: + author: OldTyT + description: GitLab runner install + license: GPLv3 + min_ansible_version: 2.8 + platforms: + - name: Ubuntu + versions: + - jammy + galaxy_tags: + - gitlabrunnerinstall diff --git a/tasks/config.yml b/tasks/config.yml new file mode 100644 index 0000000..7ec14e5 --- /dev/null +++ b/tasks/config.yml @@ -0,0 +1,24 @@ +--- +- name: Create gitlab runner user + user: + name: "{{ gitlab_runner_user }}" + comment: "User for gitlab runner" + state: present + create_home: false + when: gitlab_runner_user != 'root' + +- name: create gitlab runner service + template: + src: gitlab-runner.service.j2 + dest: /etc/systemd/system/gitlab-runner.service + register: gitlab_runner_service + +- name: Create GitLab runner work directory + ansible.builtin.file: + path: "{{ gitlab_runner_working_directory }}" + state: directory + owner: "{{ gitlab_runner_user }}" + group: "{{ gitlab_runner_user }}" + recurse: yes + +- meta: flush_handlers diff --git a/tasks/install.yml b/tasks/install.yml new file mode 100644 index 0000000..3b5ee3c --- /dev/null +++ b/tasks/install.yml @@ -0,0 +1,6 @@ +--- +- name: Download GitLab runner + get_url: + url: "{{ gitlab_runner_download_url }}" + dest: "{{ gitlab_runner_binary_path }}" + mode: 0755 diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..5247da0 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,16 @@ +--- +- name: gitlab runner installation + include_tasks: install.yml + +- name: gitlab runner configuration + include_tasks: config.yml + +- name: gitlab runner registration + include_tasks: registration.yml + +- name: GitLab Runner started service + systemd_service: + name: "gitlab-runner" + state: started + daemon_reload: true + enabled: true diff --git a/tasks/registration.yml b/tasks/registration.yml new file mode 100644 index 0000000..86cb68e --- /dev/null +++ b/tasks/registration.yml @@ -0,0 +1,30 @@ +--- +- name: Check if GitLab Runner is already registered + ansible.builtin.stat: + path: /etc/gitlab-runner/config.toml + register: gitlab_runner_config + +- name: Register GitLab Runner with Docker executor + ansible.builtin.shell: + gitlab-runner register + --non-interactive + --url {{ gitlab_runner_instance_url }} + --registration-token {{ gitlab_runner_registration_token }} + --executor docker + --description "{{ gitlab_runner_runner_description }}" + --docker-image "{{ gitlab_runner_docker_default_image }}" + --tag-list "{{ gitlab_runner_tags | default('') }}" + when: gitlab_runner_config.stat.exists == False and gitlab_runner_executor == 'docker' + become: yes + +- name: Register GitLab Runner with Shell executor + ansible.builtin.shell: > + gitlab-runner register + --non-interactive + --url {{ gitlab_runner_instance_url }} + --registration-token {{ gitlab_runner_registration_token }} + --executor shell + --description "{{ gitlab_runner_runner_description }}" + --tag-list "{{ runner_tags | default('') }}" + when: gitlab_runner_config.stat.exists == False and gitlab_runner_executor == 'shell' + become: yes diff --git a/templates/gitlab-runner.service.j2 b/templates/gitlab-runner.service.j2 new file mode 100644 index 0000000..b282160 --- /dev/null +++ b/templates/gitlab-runner.service.j2 @@ -0,0 +1,18 @@ +{{ ansible_managed | comment }} + +[Unit] +Description=GitLab Runner +ConditionFileIsExecutable={{ gitlab_runner_binary_path }} + +After=syslog.target network.target + +[Service] +StartLimitInterval=5 +StartLimitBurst=10 +ExecStart={{ gitlab_runner_binary_path }} "run" "--working-directory" "{{ gitlab_runner_working_directory }}" "--config" "{{ gitlab_runner_config_path }}" "--service" "gitlab-runner"{% if not gitlab_runner_user == "root" %} "--user" "{{ gitlab_runner_user }}" {% endif %} +Restart=always +RestartSec=120 +#EnvironmentFile=-/etc/sysconfig/gitlab-runner + +[Install] +WantedBy=multi-user.target