When you send a commit with [skip ci] in message, the CI is skipped in CircleCI but it don't send back the status to GitLab, so GitLab keeps waiting forever for the end of the pipeline execution and expires by timeout.