Jenkins ve Mercurial’da otomatik derleme şeysi

Merhaba arkadaşlar,

Gene kendime daha sonra bilgi olsun diye yazdığım bir not ile karşınızdayım.

Son günlerde Jenkins’teki iş sayısının çokluğu, polling(yoklama) mekanizması ile çalışmamızı imkansız noktaya getirmişti. 150’den fazla iş aynı anda Mercurial’dan sorgu çekmeye çalışınca sistemi oldukça yoran bir noktaya getiriyordu.

Bunun için Mercurial’dan push komutunu çalıştırdıkça Jenkins üzerinde derleme işlemi başlatmak gerekiyor. Bunun için Mercurial’daki hook mantığını kullanıyoruz. Daha fazla bilgi.

Neyse

Aynı mantıkla, hook üstünde çalıştırdığımız komutun da bir şekilde Jenkins’te iş çalıştırması lazım. Bunun için de Jenkins’in Build Token Root eklentisini kullanıyoruz. Eklentiyi kurduktan sonra tek yapmanız gereken jenkinste projenizi uzaktan tetiklemeye(remote triggering) açmanız ve bir token üretmeniz. Bu sayede kullanıcı adı ve şifre vermeden çalışabiliyoruz.

Örnek bir hook (projenin .hg/hgrc dosyasında tanımlanan):

 

[hooks]
changegroup = curl “http://jenkins.adresi.com/buildByToken/build?job=proje_adi&token=urettiginiz_token”

Bu sayede şakır şakır uzaktan derleme yapabilirsiniz.

Mercurialda repoları web üzerinden paylaşıma açmak

Merhabalar,

Bu yazımda Linux üzerindeki bir Apache sunucusu üzerinden mercurial repolarının paylaşımını açıklamaya çalışacağım. Basit bir sırası var, aşağıdaki maddeleri takip edin lütfen.

  • İlk olarak gerekli klasörleri oluşturun, bunlar sırayla : /var/hg/repositories ve /var/hg.
  • Daha sonra /var/hg altında hgweb.config isimli bir dosya oluşturun. Dosyanın içine şunları yazın:

[web]
style = gitweb

[collections]
/var/hg/repositories = /var/hg/repositories

  • Ayar dosyasını oluşturduktan sonra Apache sunucusunun hgweb i çalıştırabilmesi için hgwebdir.cgi dosyasını oluşturun. Bu dosyanın içeriğine aşağıdakileri yazdırın.

#!/usr/bin/env python
from mercurial import demandimport; demandimport.enable()

import cgitb
cgitb.enable()

import os
os.environ["HGENCODING"] = "UTF-8"

from mercurial.hgweb.hgwebdir_mod import hgwebdir
import mercurial.hgweb.wsgicgi as wsgicgi

application = hgwebdir('hgweb.config')
wsgicgi.launch(application)

  • CGI betiğini hazırladıktan sonra apachenin kendi klasörüne dönüyoruz. Ubuntu da bu klasör /etc/apache2 şeklinde oluyor. Burada bir mercurial klasörü oluşturuyoruz. mkdir mercurial
  • Bu klasörün içine girip, mercurial.conf dosyasını oluşturuyoruz. Bu dosyanın içine şunları yazıyoruz:

ScriptAliasMatch ^/mercurial(.*) /var/hg/hgwebdir.cgi$1
<Directory "/var/hg/">
Options Indexes FollowSymlinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
AuthType Basic
AuthName "Mercurial Repositories"
AuthUserFile /var/hg/hgusers
Require valid-user
</Directory>

Bu sayede demin oluşturduğumuz klasörün apache üzerinden servis edilmesini sağlıyoruz.

  • Mercurial’ın dışarı açılması için gerekli bir adım daha: apachenin içindeki sites-available klasöründe, az önce oluşturduğumuz ayar dosyasının sunulmasını sağlamak. Bunun için sites-available klasörüne girip, örneğin default dosyasına şu satır eklenmelidir: Include /etc/apache2/mercurial/mercurial.conf
  • Herşeyin normal olduğunu kontrol etmek için su komutu çalıştırın: sudo apache2ctl configtest
  • Daha sonra apacheyi tekrar başlatalım; eğer bir sorun olmazsa siteniz/mercurial adresine girdiğinizde güzei bir görüntü olmalı 🙂 :
$ sudo apache2ctl stop
$ sudo apache2ctl start