Travic CI 失败:名称解析暂时失败
Travic CI is failing with: Temporary failure in name resolution
我尝试为 django 应用程序添加测试用例,但测试在本地成功通过,但在 Travis 上失败 CI。
M .travis.yml
个文件如下所示:
dist: bionic
services:
- postgresql
addons:
postgresql: '9.5'
apt:
packages:
- postgresql-9.5
before_script:
- psql -c 'create database fecundity_test;' -U postgres
branches:
only:
- "master"
language: python
python:
- "3.8"
install:
- if [ "$TRAVIS_BRANCH" = "master" ]; then pip install -r requirements/dev.txt; fi
- if [ "$TRAVIS_BRANCH" = "master" ]; then pip install coveralls; fi
script:
- if [ "$TRAVIS_BRANCH" = "master" ]; then ./scripts/lib/run-ci; fi
after_success:
- if [ "$TRAVIS_BRANCH" = "master" ]; then coveralls; fi
我的 settings.py
看起来像这样:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': os.environ['POSTGRES_DB'],
'USER': os.environ['POSTGRES_USER'],
'PASSWORD': os.environ['POSTGRES_PASSWORD'],
'HOST': os.environ['POSTGRES_HOST'],
'PORT': '',
'ATOMIC_REQUESTS': True,
'TEST': {
'NAME': os.environ['POSTGRES_TEST_DB']
}
},
}
当我 运行 它在 travis 上得到这个错误日志时:
$ if [ "$TRAVIS_BRANCH" = "master" ]; then ./scripts/lib/run-ci; fi
Using existing test database for alias 'default' ('fecundity_test')...
/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/postgresql
/base.py:294: RuntimeWarning: Normally Django will use a connection to the 'postgres' database
to avoid running initialization queries against the production database when it's not needed
(for example, when running tests). Django was unable to create a connection to the 'postgres'
database and will use the first PostgreSQL database instead.
warnings.warn(
Traceback (most recent call last):
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 220, in ensure_connection
self.connect()
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 197, in connect
self.connection = self.get_new_connection(conn_params)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 185, in get_new_connection
connection = Database.connect(**conn_params)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name "db" to address: Temporary failure in name resolution
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "./manage.py", line 21, in <module>
main()
File "./manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/core/management/commands/test.py", line 23, in run_from_argv
super().run_from_argv(argv)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/core/management/base.py", line 328, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/core/management/base.py", line 369, in execute
output = self.handle(*args, **options)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/core/management/commands/test.py", line 53, in handle
failures = test_runner.run_tests(test_labels)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/test/runner.py", line 684, in run_tests
old_config = self.setup_databases(aliases=databases)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/test/runner.py", line 604, in setup_databases
return _setup_databases(
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/test/utils.py", line 169, in setup_databases
connection.creation.create_test_db(
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/creation.py", line 58, in create_test_db
self._create_test_db(verbosity, autoclobber, keepdb)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/creation.py", line 168, in _create_test_db
with self._nodb_connection.cursor() as cursor:
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 260, in cursor
return self._cursor()
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 236, in _cursor
self.ensure_connection()
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 220, in ensure_connection
self.connect()
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 220, in ensure_connection
self.connect()
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 197, in connect
self.connection = self.get_new_connection(conn_params)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 185, in get_new_connection
connection = Database.connect(**conn_params)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not translate host name "db" to address: Temporary failure in name resolution
The command "if [ "$TRAVIS_BRANCH" = "master" ]; then ./scripts/lib/run-ci; fi" exited with 1.
我不知道有什么用,我试着在互联网上搜索,但找不到任何帮助。而且 CI 未经测试就通过了。提前致谢。
经过一番努力,我发现失败的原因是我没有在Travis中添加EVN变量CI。如果您遇到相同的错误,请在 TravisCI.
的 ENV 设置中添加变量
我尝试为 django 应用程序添加测试用例,但测试在本地成功通过,但在 Travis 上失败 CI。
M .travis.yml
个文件如下所示:
dist: bionic
services:
- postgresql
addons:
postgresql: '9.5'
apt:
packages:
- postgresql-9.5
before_script:
- psql -c 'create database fecundity_test;' -U postgres
branches:
only:
- "master"
language: python
python:
- "3.8"
install:
- if [ "$TRAVIS_BRANCH" = "master" ]; then pip install -r requirements/dev.txt; fi
- if [ "$TRAVIS_BRANCH" = "master" ]; then pip install coveralls; fi
script:
- if [ "$TRAVIS_BRANCH" = "master" ]; then ./scripts/lib/run-ci; fi
after_success:
- if [ "$TRAVIS_BRANCH" = "master" ]; then coveralls; fi
我的 settings.py
看起来像这样:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': os.environ['POSTGRES_DB'],
'USER': os.environ['POSTGRES_USER'],
'PASSWORD': os.environ['POSTGRES_PASSWORD'],
'HOST': os.environ['POSTGRES_HOST'],
'PORT': '',
'ATOMIC_REQUESTS': True,
'TEST': {
'NAME': os.environ['POSTGRES_TEST_DB']
}
},
}
当我 运行 它在 travis 上得到这个错误日志时:
$ if [ "$TRAVIS_BRANCH" = "master" ]; then ./scripts/lib/run-ci; fi
Using existing test database for alias 'default' ('fecundity_test')...
/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/postgresql
/base.py:294: RuntimeWarning: Normally Django will use a connection to the 'postgres' database
to avoid running initialization queries against the production database when it's not needed
(for example, when running tests). Django was unable to create a connection to the 'postgres'
database and will use the first PostgreSQL database instead.
warnings.warn(
Traceback (most recent call last):
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 220, in ensure_connection
self.connect()
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 197, in connect
self.connection = self.get_new_connection(conn_params)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 185, in get_new_connection
connection = Database.connect(**conn_params)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name "db" to address: Temporary failure in name resolution
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "./manage.py", line 21, in <module>
main()
File "./manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/core/management/commands/test.py", line 23, in run_from_argv
super().run_from_argv(argv)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/core/management/base.py", line 328, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/core/management/base.py", line 369, in execute
output = self.handle(*args, **options)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/core/management/commands/test.py", line 53, in handle
failures = test_runner.run_tests(test_labels)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/test/runner.py", line 684, in run_tests
old_config = self.setup_databases(aliases=databases)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/test/runner.py", line 604, in setup_databases
return _setup_databases(
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/test/utils.py", line 169, in setup_databases
connection.creation.create_test_db(
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/creation.py", line 58, in create_test_db
self._create_test_db(verbosity, autoclobber, keepdb)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/creation.py", line 168, in _create_test_db
with self._nodb_connection.cursor() as cursor:
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 260, in cursor
return self._cursor()
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 236, in _cursor
self.ensure_connection()
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 220, in ensure_connection
self.connect()
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 220, in ensure_connection
self.connect()
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/base/base.py", line 197, in connect
self.connection = self.get_new_connection(conn_params)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 185, in get_new_connection
connection = Database.connect(**conn_params)
File "/home/travis/virtualenv/python3.8.1/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not translate host name "db" to address: Temporary failure in name resolution
The command "if [ "$TRAVIS_BRANCH" = "master" ]; then ./scripts/lib/run-ci; fi" exited with 1.
我不知道有什么用,我试着在互联网上搜索,但找不到任何帮助。而且 CI 未经测试就通过了。提前致谢。
经过一番努力,我发现失败的原因是我没有在Travis中添加EVN变量CI。如果您遇到相同的错误,请在 TravisCI.
的 ENV 设置中添加变量