Gitlab использование webhook

Thank you for reading this post, don't forget to subscribe!

1. При­мер созда­ния webhook
2.Пример ci/cd pipeline с webhook

1. Пример создания webhook

Воз­ник­ла необ­хо­ди­мость сбор­ки при­ло­же­ния из раз­ных про­ек­тов гитлаб.
Есть сле­ду­ю­щая груп­па гит­лаб balance-online:

в ней есть несколь­ко про­ек­тов и я создаю новый test:

пере­хо­дим в про­ект devops где будет настро­е­на наш pipeline ci/cd

запо­ми­на­ем Project ID: 81

и

Захо­дим в Settings про­ек­та -> CI/CD -> Pipeline triggers -> Add trigger

запо­ми­на­ем зна­че­ние e6a330cbb145453bfbafc57ef9cbfd

Создан­ный токен будет исполь­зо­вать­ся в настрой­ке про­ек­та test

если про­ли­стать ниже там есть такая запись:

стро­ка
http://gitnexus.test.local/api/v4/projects/81/ref/REF_NAME/trigger/pipeline?token=TOKEN
при­го­дит­ся далее

Захо­дим в про­ект test и пере­хо­дим в Settings -> Integrations ->
URL

редак­ти­ру­ем нашу строку
http://gitnexus.test.local/api/v4/projects/81/ref/REF_NAME/trigger/pipeline?token=TOKEN

здесь
projects/81/ это (Project ID: 81) про­ек­та devops
REF_NAME - то имя вет­ки (мы ука­жем master)
?token=TOKEN - это токен кото­рый мы рега­ли ранее в Pipeline triggers (в нашем слу­чае это e6a330cbb145453bfbafc57ef9cbfd)
доба­вим его пере­мен­ную на кото­рую даль­ше будет ори­ен­ти­ро­вать­ся, назо­вём её по име­ни проекта:
&variables[name_projeckt]=test

стро­ка будет иметь сле­ду­ю­щий вид:
http://gitnexus.test.local/api/v4/projects/81/ref/master/trigger/pipeline?token=e6a330cbb145453bfbafc57ef9cbfd&variables[name_projeckt]=test

Ста­вим галоч­ку в Push events
Enable SSL verification -> add webhook

 

Далее в про­ек­те devops в .gitlab-ci.yml  добав­ля­ем про­вер­ку типа:
if [ "${name_projeckt}" == "test" ]; then echo "TEEEEEEEEEEEEEST"; fi

и теперь когда я буду пушить в про­ект test вет­ку master будет сра­ба­ты­вать ci/cd из про­ек­та devops

2.Пример ci/cd pipeline с webhook

У нас в про­ек­те devops име­ет­ся сле­ду­ю­щий файл .gitlab-ci.yaml

отме­чу что файл config в кото­ром нахо­дит­ся token kubernetes кла­сте­ра я доба­вил как пере­мен­ную $kubeconfig (в виде base64)

скон­вер­ти­ро­вать мож­но сле­ду­ю­щим образом:

cat ~/.kube/config | openssl base64 | tr -d '\n'

и в самом ci/cd pipeline вызы­ваю командой:

echo $kubeconfig | base64 -d > config;

поче­му сде­лал имен­но так а не доба­вил пере­мен­ную с типом file - пото­му что гит­лаб ста­рый и обнов­лять его раз­ра­бот­чи­ки боят­ся и не хотят поэто­му вот такой костыль­ный вариант.

аутен­ти­фи­ка­ция в gitlab-registry у меня про­хо­дит под отдель­ным поль­зо­ва­те­лем kubernetes пароль от него добав­лен в пере­мен­ной $kubernetes_password

echo -n $kubernetes_password | docker login -u kubernetes --password-stdin $CI_REGISTRY

сна­ча­ла я про­бо­вал исполь­зо­вать встро­ен­ную переменную:
$CI_REGISTRY_USER  - поль­зо­ва­тель под кото­рым ты захо­дишь в gitlab и запус­ка­ешь ci/cd pipeline
$CI_REGISTRY_PASSWORD - пароль тво­е­го пользователя
$CI_REGISTRY - адрес registry

и вот в таком виде про­хо­дить аутентификацию:
docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY

но так не про­ка­тит, так как по webhook это не передаётся

 

Так­же я завя­зал всё на имя тэга обра­за, т.е. пока не будет пере­дан тэг сбор­ка не будет идти.
В сам про­ект пушим сле­ду­ю­щим образом:
git add .
git commit -m "test 23"
git tag -a v23 -m "test"
git push origin --tags
git push

и после это­го сра­бо­та­ет webhook, нач­нёт­ся сбор­ка и деплой.