Thursday, December 28, 2017

Custom Gitlab Hooks

8:12 PM Posted by Dilli Raj Maharjan No comments

Gitlab installation

Update linux machine with yum update.
yum -y update


Once update is completed install postfix for notifications. 
yum install postfix
service postfix start
chkconfig postfix on



Add the GitLab package repository and install the package
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | bash


Install gitlab package. Here specify the External URL you want gitlab to be accessed.
EXTERNAL_URL="http://192.168.100.25" yum -y install gitlab-ee



If you need to change EXTERNAL_URL or IP address of the host where gitlab is installed following are the steps.
1. Modify external_url parameter in file /etc/gitlab/gitlab.rb
2. gitlab-ctl reconfigure

Start gitlab with command below
gitlab-ctl start



Configure gitlab on 8888 port so that apache can be started on port 80.
Open /etc/gitlab/gitlab.rb and modify 
nginx['listen_port'] = nil to nginx['listen_port'] = 8888
external_url 'http://192.168.100.25' to external_url 'http://192.168.100.25:8888'






Once modification completes execute reconfigure command
gitlab-ctl reconfigure



Restart gitlab to get the new setting in effect.
gitlab-ctl restart



Login to gitlab external url with following address
http://192.168.100.25:8888

Once you open page for the first time you need to set the root user password. Type root user password and click on Submit.


Now register new user. Click on Create project to add new gitlab project.



Set Project name. Click on Create Project.


 Clone git repository locally.
git clone http://192.168.100.25:8888/dmaharjan/dilli_com_np.git


Add index page on local repository.
cd dilli_com_np
echo "This is index page" >> index.html



Add file, commit and push to git remote repository.
git add .
git commit -m "Adding index.html"
git push


Install apache. In our case apache server is web hosting for the client.
yum -y install httpd


Change directory to /var/www/html and clone git repo.
git clone http://dmaharjan@192.168.100.25:8888/dmaharjan/dilli_com_np.git



The page is accessible with the URL below:
http://192.168.100.25/dilli_com_np/index.html


Change directory to remote repository in our case /var/opt/gitlab/git-data/repositories/dmaharjan/dilli_com_np.git . Here dmaharjan is repos user and dilli_com_np is repository directory.
cd /var/opt/gitlab/git-data/repositories/dmaharjan/dilli_com_np.git
Create directory custom_hooks


Create hook file named post-receive with the content below
#!/bin/bash

cd /var/www/html/dilli_com_np
sudo /usr/bin/git stash
sudo /usr/bin/git pull



Change ownership of hook file and make it executable.
chown -R git:git post-receive 
chmod 755 post-receive 



Change sudo configuration and add following
git         ALL=NOPASSWD: /usr/bin/git stash, /usr/bin/git pull



Change ownership of /var/www/html/dilli_com_np
chown -R apache:apache /var/www/html/dilli_com_np


Login as user git and verify sudo is working for user git. Make sure Password is not required for sudo and git pull



Now change the content of the local repo, add the file, commit it and push it. The hook should be executed and change should be reflected immediately on the web directory.
Change directory to local repository and add content to the file.
echo "Adding new line 1" >> index.html 
git add .
git commit -m "Testing hook"
git push




View change on the web directory.






Troubleshooting:
Error: sudo: sorry, you must have a tty to run sudo while performing git push.



Search for Add Following lines "Defaults  requiretty" and add Defaults:git !requiretty below the line.



You will get successfully push and hook file executed.




0 comments:

Post a Comment