3

Прошу консультацию по Gitlab CI

Господа и господамы, а есть ли тут мастера спорта по Gitlab CI? Хочется получить профессиональную консультацию.

Попробую описать вопрос:
представим себе ситуацию, когда разработчик неделю работает локально и что-то там у себя коммитит (но не пушит в гитлаб). И вот, спустя неделю, он решил задачу и решил вывалить свое творение на обозрение, запушив весь свой кодовый понос в отдельную ветку.
И вот тут-то нам бы проверить, чего он там такого понаписал, не наделал ли синтаксических ошибок в спешке, которые сразу положат приложение. Пайплайн запускается, отрабатывает билд зависимостей, запускается линтер и юнит-тесты, и вроде бы все ОК, можно деплоить на дев.. НО! Пайплайн проверил только его последний коммит, в котором он, например, поправил файлик `README.MD`. А предыдущие 10 коммитов, где могут быть ошибки, пайплайн не проверяет.

С одной стороны я могу себе это объяснить тем, что надо заставлять разработчиков пушить каждый коммит в удаленную репу, т.е. гитлаб. Но с другой стороны как это побороть в тех ситуациях, когда разработчик "забыл", "не было связи", "балбес" и т.д.

Аналогичный вопрос касается слияния веток. Берем мы ветку этого разработчика и открываем Merge Request на вливание её в `development`. Если тесты пройдут успешно - можно вывалить его творение на dev-стенд и потестировать. И вот опять беда - гитлаб запускает пайплайн только на последний коммит в MRе, хотя их там может быть сколь угодно много. Пробовал костылить всякие git diff с хешами и ветками, но все не то - показывает обратный дифф, если бы ветку development вливали в его ветку.

Подозреваю, что я чего-то не понимаю, не следую какому-то правильному flow и тд.

Прошу подсказать, объяснить, проконсультировать. Если удобно - можно даже персонально в мессенджере, с оплатой

0
Автор поста оценил этот комментарий

For custom scripting to trigger a pipeline for each commit in a push, you would typically use the GitLab API along with a script that identifies each commit. Below is a conceptual example of how you might set this up. This script would be part of a GitLab CI pipeline, and its purpose is to trigger a new pipeline for each commit that is part of the push.


### Script Overview

1. **List Commits**: The script lists all commits that are part of the push.

2. **Trigger Pipeline**: For each commit, the script triggers a new pipeline via the GitLab API.


### Example Script

This example uses Bash scripting and GitLab's API. You will need a GitLab access token with the appropriate permissions to trigger a pipeline.


#!/bin/bash

# Set your project ID and your GitLab access token

PROJECT_ID="your_project_id"

PRIVATE_TOKEN="your_access_token"

# Get the list of commit hashes from the push

# Adjust the range as needed, e.g., HEAD~3..HEAD for the last 3 commits

commit_hashes=$(git log --pretty=format:%H HEAD~3..HEAD)

# Loop through each commit and trigger a pipeline

for commit_hash in $commit_hashes; do

# API call to trigger a pipeline for the specific commit

curl --request POST "https://gitlab.com/api/v4/projects/$PROJECT_ID/trigger/pipel..." \

--form "ref=your_branch_name" \

--form "token=$PRIVATE_TOKEN" \

--form "variables[COMMIT_SHA]=$commit_hash"

done

### Integration

- This script can be integrated as part of a GitLab CI pipeline or run manually.

- Ensure the GitLab runner has the necessary permissions and configurations to execute this script.

### Caution

- This script can generate a large number of pipelines, especially if you frequently push multiple commits. Be mindful of the resource usage and potential load on your CI server.


Вот что советует ChatGPT. Похоже на то, что вам нужно? Выглядит не супер сложно.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

гм.. спасибо, надо обдумать..

2
Автор поста оценил этот комментарий

Вы не рассматривали возможность использования git pre-commit hook? Иными словами, не пытаться выполнить задачу с помощью gitlab CI. А делать на локальной репе, каждый раз когда дев вносит изменения в бранч.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да, конечно рассматривал. Но такой хук нерадивый разработчик может легко обойти и запушить в репу.

показать ответы
3
Автор поста оценил этот комментарий

TRDL: всё ок, так и должно быть. Линтинг и тесты должны проверить состояние всего кода в ветке на момент последнего коммита, разве что это намеренно не было сломано.


Более подробное описание:


Коммиты наслаиваются друг на друга, пайплайн на последнем коммите проверяет итоговое состояние кода на момент этого коммита, т.е. проверено абсолютно всё, что было сделано в этой ветке.


После мержа коммиты из ветки-источника переносятся в целевую ветку, где могут быть коммиты, которых изначально не было у разработчика в его ветке (были помержены после, например).


В этот момент целесообразно повторно прогнать линтинг и тесты. Гитлаб создаст пайплайну по последнему коммиту, но проверка всё равно будет выполнена не только по коммиту, а по всему состоянию ветки в момент запуска.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Спасибо! Да, звучит логично. Дело в том, что я хотел прогонять линтер именно на дифф, а не весь проект. Конечно, это можно сделать в pre-commit на машине разработчика, но всем не навяжешь, а потом это легко можно обойти.

показать ответы
1
Автор поста оценил этот комментарий
Чувак, девопс - это не твое
раскрыть ветку (1)
Автор поста оценил этот комментарий

чувак, а ты знания и опыт получил с молоком матери?

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества