Задания, не подключающиеся к службе MySQL для автономных действий GitHub на ECS
У меня есть собственный GitHub Actions, работающий в ECS, и он творит чудеса, пока мне не придется заниматься обнаружением сервисов.
Ниже приведен файл рабочего процесса
name: Checks before merging for core-service server
on:
push:
paths:
- 'tons/of/paths/**'
jobs:
build:
runs-on: [self-hosted, linux, x64, nomad]
#set a timeout just in case the tests hang
timeout-minutes: 5
services:
mysql:
image: mysql:5.7
env:
MYSQL_DATABASE: test-db
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: rootpassword
ports:
- 3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- uses: actions/checkout@v2
- name: Use Node.js 14.16
uses: actions/setup-node@v1
with:
node-version: 14.16
- name: Install dependencies
run: npm ci
working-directory: some-dependency/location
- name: Check if build is passing
run: npm run build
working-directory: more-dependency/more-places
- name: Run tests
run: npm run test
env:
DATABASE_URL: mysql://user:password@127.0.0.1:${{ job.services.mysql.ports[3306] }}/test-db
working-directory: core-service/server
Ниже приведена ошибка, которую я получаю
Using existing mysql database from: DATABASE_URL
Error: connect ECONNREFUSED 127.0.0.1:32777
Будем признательны за любые комментарии. Хорошего дня ~
1 ответ
Обнаружение сервисов в GitHub, похоже, содержит детали реализации, которые не дошли до самостоятельных исполнителей.
Я обнаружил, что самостоятельные задания должны иметь доступ к службе MySQL через172.17.0.1
(адрес хоста для сети по умолчанию в Docker..?) и используйте обнаружение службы для получения порта.
Дополнительную информацию о доступе к хосту шлюза в ECS можно найти здесь: https://github.com/aws/containers-roadmap/issues/165 .
name: Build
on: [push]
jobs:
test:
runs-on: self-hosted
services:
mysql:
image: mysql:latest
env:
MYSQL_DATABASE: acme_test
MYSQL_ROOT_PASSWORD: secret
ports:
- 33306:3306
options: >-
--health-cmd="mysqladmin ping"
--health-interval=10s
--health-timeout=5s
--health-retries=3
steps:
- name: Verify MySQL connection
run: |
sudo apt update
sudo apt install -y mysql-client
mysql --version
mysql \
--host 172.17.0.1 \
--port ${{ job.services.mysql.ports['3306'] }} \
-uroot
-psecret -e "SHOW DATABASES;"