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ıktan sonra
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://kubernetesturkiye.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 -> (yazıp buraya linki ekleyecegim)
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;
$ gitlab-runner register
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
Linux sistem yöneticisi olarak başladığım kariyerime devops alanında devam ediyorum. Linux, kubernetes, docker ve go en sevdiğim alanlar.. Bunların dışında GCP ve AWS tecrübem var.
Emeğinize sağlık… Kubernetes Gitlab Rancher ve diğer bütün K8s tamamlayan araçlar ile ilgili paylaşımlarını takip ediyorum. Türkiye de bu konu ile ilgili ciddi paylaşımları olan ekiplerden en önemlilerinden birisiniz. başarılarınızın devamını dilerim.