#docker
#docker
Вопрос:
Мое приложение — это приложение с весенней загрузкой, запущенное на порту 8080. Ниже приведен пример сценария. Одна часть взята из gitlab-pipeline, а две другие — before и run script.
Внутри конвейера Gitlab:
stages:
- performance
#Run performance test
load_performance:
stage: performance
when: manual
before_script:
- source ./scripts/gitlab/perf-test/before-script.sh
script:
- echo "Running load test"
- source ./scripts/gitlab/perf-test/run_gatling.sh
after_script:
- ls -ltra ./scripts/performance-test/gatling
artifacts:
paths:
- "./scripts/performance-test/gatling/results"
expire_in: 1 week
when: always
before-script.sh : Этот скрипт загружает изображение gatling и моего приложения и запускает его в отключенном режиме.
LOCALHOST="host.docker.internal"
BASE_URL="http://${LOCALHOST}:8080"
echo "Pulling Gatling image"
docker pull denvazh/gatling
echo "Start my-service2"
starttime=`date %s`
docker run --ulimit nofile=65536:200000 -itd -p 8080:8080 --name my-service
-v /var/run/docker.sock:/var/run/docker.sock
-v $DIR:/opt/app
gcr.io/com-gcr/my-service-java:jdk-X.X.X_X
/bin/bash -c "cd /opt/app amp;amp; ls -ltra amp;amp; source .envrc
amp;amp; ./gradlew clean bootRun"
run_gatling.sh : этот скрипт проверяет, работает my-service или нет. Если он включен, запустите тест стробирования.
sleep 5
docker inspect -f '{{ .NetworkSettings.IPAddress }}' my-service
while ! curl http://localhost:8080/actuator/health ## this condition always fail but on local it passes after 1-2 minutes
do
echo "waiting on my-service to up"
docker logs --tail=10 my-service
sleep 30
done
echo "my-service up. It took $(($(date '%s') - starttime)) seconds."
echo "Starting test:"
starttime=`date %s`
docker run -it --rm -v $DIR/scripts/performance-test/gatling/conf:/opt/gatling/conf
-v $DIR/scripts/performance-test/gatling/user-files:/opt/gatling/user-files
-v $DIR/scripts/performance-test/gatling/results:/opt/gatling/results
-e JAVA_OPTS="-Dduration=$DURATION -DbaseUrl=$BASE_URL -DmaxRequest=MAX_REQUEST"
denvazh/gatling -rd performance_tests
docker stop my-service
docker rm my-service
echo "Test complete. It took $(($(date '%s') - starttime)) seconds."
Комментарии:
1.
localhost
в Docker обычно означает «этот контейнер», поэтому, если второй контейнер выполняет буквальноcurl http://localhost...
, он не достигает контейнера приложения. Можете ли вы предоставить часть фактического кода в этой настройке?2. Привет @DavidMaze, я добавил псевдокод. Мой код работает на локальном компьютере. На локальном хост-порту 8080 все запросы пересылаются на контейнерный порт 8080, но это не работает внутри gitlab runner.