Сборка

build-pkg:
  stage: package
  image: snapcore/snapcraft
  script:
    - snapcraft --version
    - snapcraft
    - ls -la
  artifacts:
    expire_in: 1 week
    paths:
      - *.snap

Публикация

Для начала — нужно добыть в файл параметры доступа. (Это можно сделать даже внутри docker контейнера.)

snapcraft login
snapcraft export-login snapcraft.login
base64 snapcraft.login

После чего - нужно добавить в настройках CI - Settings — CI/CD и в категории Environment variables добавляем новый ключ с именем SNAPCRAFT_LOGIN_FILE с той бородой, которую выдаст команда base64.

Ну и самое (не)интересное

deploy-snapcraft:
  stage: deploy
  image: snapcore/snapcraft
  when: manual
  dependencies:
    - build-pkg
  script:
    - mkdir .snapcraft
    - echo $SNAPCRAFT_LOGIN_FILE | base64 --decode --ignore-garbage > .snapcraft/snapcraft.cfg
    - snapcraft whoami
    - snapcraft push *.snap --release stable
  environment:
    name: production
    url: https://snapcraft.io/$CI_PROJECT_NAME
  only:
    - master