diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..9063a98 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,35 @@ +--- + +kind: pipeline +type: docker +name: robot-image + +steps: +- name: cleanup and build + image: docker:19.03.5 + environment: + PASSWORD: + from_secret: docker_passwd + IMG_NAME: 'registry.nspcc.ru/docker-local/robot' + volumes: + - name: docker_sock + path: /var/run/docker.sock + commands: + - ./images_cleanup.sh + - docker build --no-cache -t $IMG_NAME:latest ./ + - docker login registry.nspcc.ru -u admin -p "$PASSWORD" + - docker push $IMG_NAME:latest + +trigger: + branch: + - master + event: + - push + +# host volume mount requires a repository to be `trusted` +# in drone; this option enables in repository settings +# by admin user +volumes: + - name: docker_sock + host: + path: /var/run/docker.sock diff --git a/Dockerfile b/Dockerfile index 95df45d..cbe892c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,16 @@ FROM python:3.6 -ENV WD /testcases/ +ENV WD / ENV NEOFSCLI_VERSION '0.7.1' RUN apt-get update \ && pip3 install robotframework==3.2.1 -#RUN cd /tmp \ -# && wget https://github.com/nspcc-dev/neofs-cli/releases/download/v0.7.1/neofs-cli_${NEOFSCLI_VERSION}_linux_x86_64.tar.gz \ -# && tar xfz neofs-cli_${NEOFSCLI_VERSION}_linux_x86_64.tar.gz \ -# && mv neofs-cli /usr/local/bin +RUN cd /tmp \ + && wget https://github.com/nspcc-dev/neofs-cli/releases/download/v0.7.1/neofs-cli_${NEOFSCLI_VERSION}_linux_x86_64.tar.gz \ + && tar xfz neofs-cli_${NEOFSCLI_VERSION}_linux_x86_64.tar.gz \ + && mv neofs-cli /usr/local/bin \ + && rm -rf /tmp/neofs-cli WORKDIR ${WD} COPY ./ ${WD} -# temporary hack due to slow github servers -RUN mv ${WD}/neofs-cli /usr/local/bin diff --git a/README.md b/README.md index 39af52c..4d58ede 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,24 @@ -# README # +### Сборка образа с тестами -This README would normally document whatever steps are necessary to get your application up and running. +Чтобы тесты из этого репозитория были доступны к запуску из Drone CI, +они должны быть упакованы в docker-имадж. Это делается в рамках CI, +сконфигурированного в этом репозитории. Вся сборка "тестового образа" +описывается в файлах `Dockerfile` и `.drone.yml` и осуществляется на +каждый пуш в master. -### What is this repository for? ### +В докерфайле указана версия `neofs-cli`, который используется в запусках +тестов. Каждый раз при сборке имаджа `neofs-cli` скачивается заново. -* Quick summary -* Version -* [Learn Markdown](https://bitbucket.org/tutorials/markdowndemo) +Тестовый образ имеет единственную версию -- `latest`. Ради экономии +хранилища на машине-сборщике перед сборкой все ранее собранные образы +удаляются. -### How do I get set up? ### - -* Summary of set up -* Configuration -* Dependencies -* Database configuration -* How to run tests -* Deployment instructions - -### Contribution guidelines ### - -* Writing tests -* Code review -* Other guidelines - -### Who do I talk to? ### - -* Repo owner or admin -* Other community or team contact \ No newline at end of file +#### Локальная сборка +Чтобы локально собрать образ, нужно, стоя в корне репо, выполнить +команду: +``` +drone exec --trusted --secret-file=secrets.txt --volume /var/run/docker.sock +``` +В результате будет прогнан полный пайплайн, за исключением пуша образа в +docker registry. Чтобы запушить образ, нужно указать пароль к реджистри в +файле `secrets.txt`. diff --git a/images_cleanup.sh b/images_cleanup.sh new file mode 100755 index 0000000..03226ca --- /dev/null +++ b/images_cleanup.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +for i in `docker images | grep robot | awk '{ print $3 }'`; do + docker rmi -f $i +done diff --git a/robot/testsuites/integration/rw_test.robot b/robot/testsuites/integration/rw_test.robot index 1a46d9d..c1f5719 100644 --- a/robot/testsuites/integration/rw_test.robot +++ b/robot/testsuites/integration/rw_test.robot @@ -5,8 +5,8 @@ Library ${RESOURCES}/kws_module.py Library ${RESOURCES}/assertions.py *** Variables *** -${OBJECT} ${TESTSUITES}/test_file -${READ_OBJECT} ${TESTSUITES}/read_file +${OBJECT} ${ABSOLUTE_FILE_PATH}/test_file +${READ_OBJECT} ${ABSOLUTE_FILE_PATH}/read_file *** Test cases *** Read and Write to NeoFS diff --git a/robot/variables/common.py b/robot/variables/common.py index 0ec056b..7b7f3b2 100644 --- a/robot/variables/common.py +++ b/robot/variables/common.py @@ -3,4 +3,6 @@ ROOT='../..' RESOURCES="%s/resources/lib" % ROOT -TESTSUITES="%s/testsuites/integration" % ROOT +# path from repo root is required for object put and get +# in case when test is run from root in docker +ABSOLUTE_FILE_PATH="/robot/testsuites/integration" diff --git a/secrets.txt b/secrets.txt new file mode 100644 index 0000000..1950295 --- /dev/null +++ b/secrets.txt @@ -0,0 +1 @@ +docker_passwd=