Страницы

Поиск по вопросам

Показаны сообщения с ярлыком gitlab-runner. Показать все сообщения
Показаны сообщения с ярлыком gitlab-runner. Показать все сообщения

воскресенье, 8 марта 2020 г.

Конфигурирование GitLab CI

#git #gitlab_ci #gitlab_runner


Доброго времени суток. 

Я разрабатываю приложения на C# .Net 4.0 в качестве системы контроля версий использую
gitlab 8.8.5, которую установил на Ubuntu. Теперь появилась необходимость в CI. Установил
все необходимое для этого gitlab-ci-multi-runner. Для проекта создал раннер. Добавил
в корень мастер ветки файлик .gitlab-ci.yml, при пуше запускается build все нормально.
Не могу правильно сконфигурировать .gitlab-ci.yml(что туда необходимо добавить) для
построения моего проекта и деплой на другой сервер. Сервер не имеет подключения к интернету.
    


Ответы

Ответ 1



Чтобы понять, что есть что в .gitlab-ci.yml, лучше начать с совсем простых конфигов из GitLab Pages Вот например конфиг для lektor: image: python:2.7 pages: script: - pip install lektor - lektor build --output-path public artifacts: paths: - public only: - master image - это образ докера, который вы берете за основу. pages - это просто название этапа. У вас может быть build, test или deploy, или еще что-то. То что должно запускаться, вы записываете в script. Просто команды одну за одной как если бы вы запускали их из командной строки. artifacts - это откуда брать бинарники(или что там у вас генерится в процессе билда), чтобы положить это в секцию Artifacts каждого билда C помощью only и except можно гибко наруливать так, чтобы этап выполнялся для пуша только в эту ветку, или, соответственно, для пуша во все ветки кроме указанной Если у вас есть какие-то секретные ключи, то не нужно их класть в .gitlab-ci.yml. Для этого есть секция Variables в настройках вашего проекта. Чтобы у вас сначала билдилось, потом деплоилось, нужно задать stages: stages: - build - deploy Если stages не задать, то этапы будут выполняться параллельно, т.е. деплоиться будет не зависимо от того, сбилдилось ли. @marsel-arduanov в общем правильную ссылку вам скинул, но там много всего, и сходу не разберешься куда бежать. В итоге ваш конфиг может выглядеть как-то так, например: image: microsoft/dotnet stages: - build - deploy build: script: - - artifacts: paths: - build deploy: script: - only: - master Для ситуации когда нет интернета, можно использовать встроенный Container Registry, чтобы брать образа из него.

понедельник, 8 июля 2019 г.

Как развернуть GitLab runner с Docker executor, используя DebOps?

Хочу развернуть GitLab runner с Docker Executor, используя роли и скрипты от DebOps. Документация говорит, что Docker executor поддерживается. Пока что у меня получается только Shell executor. Ниже подробности.
Проект инициализировал с помощью debops-init. Из документации я сделал вывод, что я должен сам включить роль для Docker:
To use different executors like SSH or Docker, you need to provide additional configuration and ensure that required software (ssh, Docker, Docker Machine, etc.) is installed if required.
Получились такие конфиги:
ansible/inventory/hosts
[debops_all_hosts] myhost.domain.tdl ansible_ssh_host=10.11.11.11
# чтобы был докер [debops_service_docker] myhost.domain.tdl
[debops_service_gitlab_runner] myhost.domain.tdl
ansible/inventory/group_vars/all/all.yml
gitlab_runner__api_url: 'http://gitlab.domain.tld/ci' gitlab_runner__executor: 'docker'
Выполнил следующее:
# настройка авторизации debops bootstrap -u root --ask-pass # базовая конфигурация и докер debops
# потом раскомментировал в инвентаре [debops_service_gitlab_runner] GITLAB_RUNNER_TOKEN=mytokenhere debops service/gitlab_runner
В результате в GitLab появился подключенный раннер с Shell executor. Он работает, в логах сборки вижу "Using Shell executor...".
Но я-то хочу Docker executor. Как его получить? Возможные причины:
Не установил какую-то из нужных зависимостей. Это вообще странно с ansible и DebOps, где все зависимости обычно разрешаются автоматически. Неверные значения или не хватает каких-то переменных

UPD: посмотрел в конфиги на хосте. В /etc/gitlab-runner/config.toml вижу следующее:
concurrent = 1
[[runners]] name = "myhost.domain.tdl" url = "http://gitlab.domain.tld/ci" token = "mytokenhere" executor = "shell" [runners.docker] image = "debian" privileged = false disable_cache = false cap_drop = [ "NET_ADMIN", "SYS_ADMIN", "DAC_OVERRIDE" ]
Почему executor = "shell"?


Ответ

В роли есть такие переменные:
List of default GitLab Runner instances.
gitlab_runner__default_instances: [ '{{ gitlab_runner__instance_shell }}' ]
The default GitLab Runner instance.
gitlab_runner__instance_shell: name: '{{ gitlab_runner__fqdn }}' executor: 'shell'
Роль уcтроена таким образом, что gitlab_runner__executor имеет значение только, если не указан executor у конкретного runner'а.
Список runner'ов для конфига берется так:
for runner in (gitlab_runner__default_instances + gitlab_runner__instances + gitlab_runner__group_instances + gitlab_runner__host_instances)
Т.е. чтобы добиться эффекта, нужно, к примеру, переопределить:
gitlab_runner__default_instances: - name: '{{ gitlab_runner__fqdn }}'
и не указывать executor и тогда будет использован gitlab_runner__executor, либо явно указать:
gitlab_runner__default_instances: - name: '{{ gitlab_runner__fqdn }}' executor: docker
P.S. я это не тестировал – ответ написал, глядя в документацию и код.

вторник, 11 июня 2019 г.

Gitlab / You have not accepted the license agreements of the following SDK component

При сборке проекта по автоматическому файлу .gitlab-ci.yml для android.
You have not accepted the license agreements of the following SDK components: [ConstraintLayout for Android 1.0.2, Solver for ConstraintLayout 1.0.2]. Before building your project, you need to accept the license agreements and complete the installation of the missing components using the Android Studio SDK Manager. .gitlab-ci.yml
# This file is a template, and might need editing before it works on your project. # Read more about this script on this blog post https://about.gitlab.com/2016/11/30/setting-up-gitlab-ci-for-android-projects/, by Greyson Parrelli image: openjdk:8-jdk
variables: ANDROID_COMPILE_SDK: "26" ANDROID_BUILD_TOOLS: "26.0.1" ANDROID_SDK_TOOLS: "24.4.1"
before_script: - apt-get --quiet update --yes - apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1 - wget --quiet --output-document=android-sdk.tgz https://dl.google.com/android/android-sdk_r${ANDROID_SDK_TOOLS}-linux.tgz - tar --extract --gzip --file=android-sdk.tgz - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter android-${ANDROID_COMPILE_SDK} - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter platform-tools - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter build-tools-${ANDROID_BUILD_TOOLS} - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter extra-android-m2repository - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter extra-google-google_play_services - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter extra-google-m2repository - export ANDROID_HOME=$PWD/android-sdk-linux - export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/ - chmod +x ./gradlew
stages: - build - test
build: stage: build script: - ./gradlew assembleDebug artifacts: paths: - app/build/outputs/
unitTests: stage: test script: - ./gradlew test
functionalTests: stage: test script: - wget --quiet --output-document=android-wait-for-emulator https://raw.githubusercontent.com/travis-ci/travis-cookbooks/0f497eb71291b52a703143c5cd63a217c8766dc9/community-cookbooks/android-sdk/files/default/android-wait-for-emulator - chmod +x android-wait-for-emulator - echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter sys-img-x86-google_apis-${ANDROID_COMPILE_SDK} - echo no | android-sdk-linux/tools/android create avd -n test -t android-${ANDROID_COMPILE_SDK} --abi google_apis/x86 - android-sdk-linux/tools/emulator64-x86 -avd test -no-window -no-audio & - ./android-wait-for-emulator - adb shell input keyevent 82 - ./gradlew cAT


Ответ

На данный момент Google рекомендует такой способ:
запускаете на обычной машине с установленным Android SDK в папке проекта ./gradlew build содержимое $ANDROID_HOME/lisenses помещаете в соответствующую папку на билд-машине (у меня там android-sdk-license и android-sdk-preview-license)
В вашем случае можно положить эти файлы в репозиторий (например, в папку sdk-licenses) и добавить mkdir -p $ANDROID_HOME/licenses/ && cp sdk-licenses/* $ANDROID_HOME/licenses/ в before_script
UPDATE: в репозитории не должно быть файла local.properties, потому что параметр sdk.dir в нем имеет приоритет над $ANDROID_HOME для Gradle.