Gitlab-Runner Nedir, Nasıl Kurulur?

Gitlab-Runner Nedir, Nasıl Kurulur?

Gitlab'in geliştirdiği her toolu ayrı bir uygulama gibi koşabilme vizyonunun güzel bir örneği bence gitlab-runner. Özünde, gitlab-ci ile oluşturduğumuz jobları çalıştırmak ve çıktılarını gitlabe geri göndermek için kullanılan açık kaynak bir projedir. Gitlab'in CI/CD'sinin pipeline kadar önemli bir bacağıdır. Yapı itibariyle Jenkins'in agentlarına benzer. MIT lisansı altında Go dili ile yazılmıştır. Pek umursamasamda, Windows üzerinde dahi kurulabilmektedir.

Gitlab-runner ile Gitlab aynı VM üzerinde olmak zorunda değil. İsterseniz lokalinizde dahi koşabilirsiniz.

Peki bu arkadaş nasıl çalışıyor?

Gitlab sunucusuyla API aracılığıyla konuşur bu sayede, networksel erişim sıkıntısı olmadığı her yerde gitlab-runner koşabilirsiniz. Küçük bir canlandırma yapacak olursak;

1- Kodumuzu commitleyip, pushladık

2- Gitlab pipeline tetiklendi ve pending statüsüne geçti,

3- Runner API aracılığı ile pending statüsündeki jobı üzerine alıp, işlemleri yaptı

4- Çıktıları yine API aracılığı ile gitlab sunucusuna iletir

Kabaca çalışma prensibi bu şekilde. Gitlab-runner çeşitleri kendi adıyla executorlar ve kullanım alanları için şu yazımıza göz atabilirsiniz. -> https://kubernetesturkey.com/gitlab-runner-cesitleri/

Gitlab-Runner Kurulumu

Not: Bu yazı CentOS 7'ye göre yazılmıştır. ( Eylül 2020'de denendi )

Manuel kurulum için;

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
yum install gitlab-runner

Ansible kurulumu için;

---
- name: get runner script
  become: yes
  shell: curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

- name: install gitlab-runner
  become: yes
  yum:
          name: gitlab-runner
          state: latest

- name: get the latest docker version for centos
  become: yes
  shell: curl -fsSL https://get.docker.com/ | sh

- name: get the latest git version for centos
  become: yes
  yum:
          name: http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm
          state: present

- name: yum install git
  become: yes
  yum:
          name: git
          state: latest

- name: Add insecure registries
  become: yes
  template:
          src: deamon.json.j2
          dest: /etc/docker/deamon.json
          group: "root"
          mode: "0644"
  when: docker__default_daemon_json | d() or docker__daemon_json | d()

- name: restart and enable docker
  become: yes
  systemd:
          name: docker
          enabled: yes
          state: restarted

- name: run gitlab-runner install
  become: yes
  shell: gitlab-runner install --user root
  ignore_errors: true

- name: restart and enable docker
  become: yes
  systemd:
          name: gitlab-runner
          enabled: yes
          state: started

Ansible taskları içerisinde, CentOS 7 için git ve docker'ın latest versiyonlarının kurulumu ve eğer ssliniz yoksa insecure registry kullanmak için docker insecure registrylerinin eklenmesi de dahil. Eğer sslniz var ise veya gitlab registry kullanmak istemiyorsanız aşağıdaki taskı silin;

- name: Add insecure registries
  become: yes
  template:
          src: deamon.json.j2
          dest: /etc/docker/deamon.json
          group: "root"
          mode: "0644"
  when: docker__default_daemon_json | d() or docker__daemon_json | d()

Eğer ki yok işime yarar der iseniz, /etc/ansible/role/ansible-role-adınız/templates/deamon.json.j2 içine;

{
{% if docker__default_daemon_json | d() %}
{{ docker__default_daemon_json | indent(2, true) }}
{%-   if docker__daemon_json | d() %},{% endif %}
{% endif %}
{% if docker__daemon_json | d() %}
{{ docker__daemon_json | indent(2, true) }}
{% endif %}

Ekliyip sonrasında, vars/main.yml içerisine;

docker__registries: [ "aa.example:5050", "bb.example:5050", "cc.example.com:5050"]

şeklinde eklemeniz gerekiyor.

Farklı kurulumlar için -> Gitlab-Runner-Setup

 

Kurduk şimdi yapılandıralım;

gitlab-runner install --user root

Rootu burda yetki problemleri yaşamamanız için verdim. Linç etmeyin 🙂

Runner Entegrasyonu

Kurulum tamam, peki runner hangi gitlab'e nasıl ne şekilde bağlanacağını nerden bilicek?

Bu adıma Gitlab, Runner registration diyor.

Runner tiplerine göre farklı registrationlar için şu makalemize bakabilirsiniz ->

Adım 1: Settings -> CI/CD bölümünden, "Set up a specific Runner manually" altında yazan url ve token değerlerini alın.

Adım 2: Runner kurulumu yaptığımız sunucu üzerine gelip;

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
kaydettiğiniz-url
Please enter the gitlab-ci token for this runner
kaydettiğiniz-token

Please enter the gitlab-ci description for this runner
[hostame] kubernetesturkey-runner

Please enter the gitlab-ci tags for this runner (comma separated):
shell,kubernetes-turkey

Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
shell

Eğer herşeyi doğru yaptıysanız, token aldığınız bölümde register ettiğiniz runnerı görmeniz gerekiyor.

GEL VATANDAŞ GEL KOLAYI VAR!!

#!/usr/bin/env bash

CI_SERVER_URL=$1
REGISTRATION_TOKEN=$2

main() {
    gitlab-runner register --url $CI_SERVER_URL -r $REGISTRATION_TOKEN --executor shell --name kubernetes-turkey-$i -n
}

if [[ -z $1 || -z $2 ]]; then

  echo "Usage:"
  echo "$0 gitlab-url token"
  exit 2

else

  if [[ $EUID == 0 ]]; then
    main
  else
    echo "Root access needed! "
    exit 2
  fi

fi

 

 

Bonus

Eğer bir runner ile paralel pipeline çalıştırabilmek isterseniz;

$ cd /etc/gitlab-runner/
$ vim config.toml
concurrent = 5 // artık kaç tane isterseniz

Yorum Yapın