Как дизайн, каждая работа агента является независимым процессом. Итак, вы столкнулись с ожидаемым действием.
Без сценария контейнера mon go ваша проблема может быть просто понята как получить и получить доступ к переменной задания BuildMongoComponent
в задании Unittests
.
Поскольку вы используете конвейер YAML, здесь вы можете сначала установить MONGODB_URL
в качестве выходной переменной. И затем сделать Unittests
job зависит от BuildMongoComponent
job.
Пример:
Просто изменил ваш скрипт:
jobs:
- job: BuildMongoComponent
displayName: Build Mongo Container
steps:
- script: |
# --publish-all because I need a random port
MONGO_ID=$(docker run --publish-all -d --mount type=bind,source=${PWD}/mongo_mock_data,target=/tmp/mongo_mock_data mongo)
MONGO_PORT=$( docker inspect $MONGO_ID | jq -r '.[0].NetworkSettings.Ports."27017/tcp"[0].HostPort' )
docker exec $MONGO_ID mongoimport --db algo --collection train --type json --file /tmp/mongo_mock_data/train_data.json
docker exec $MONGO_ID mongoimport --db algo --collection calculation --type json --file /tmp/mongo_mock_data/predict_data.json --jsonArray
docker exec $MONGO_ID mongoimport --db pulse_algo --collection cluster --type json --file /tmp/mongo_mock_data/cluster_data.json
echo "##vso[task.setvariable variable=PORT;isOutput=true]mongodb://localhost:$MONGO_PORT"
name: Mongo
- job: Unittests
displayName: Unit tests
container: 'python:3.6'
dependsOn: BuildMongoComponent
variables:
NewPort: $[dependencies.BuildMongoComponent.outputs['Mongo.PORT']]
steps:
- script: |
python -m pip install -r requirements.txt
displayName: 'Install requirements'
env:
PIP_INDEX_URL: $(PIP_INDEX_URL)
В настоящее время вы можете получить доступ к значению MONGODB_URL
в задании Unittests , используя $(NewPort)
.
Другая проблема на ваш сценарий: не уверен, как вы сохраняете значение PWD, поскольку вы не упомянули об этом. Если вы храните его как секретную переменную, я боюсь, что формат, который вы используете, неверен. Вы должны использовать $ (PWD), чтобы получить его значение.