配置数据库
本文档描述了如何在CircleCI 2.0中的数据库服务中使用官方的CircleCI预构建的Docker容器映像。
概观
CircleCI提供语言服务,如数据库预建的图像与加入上的图像了很多便利CircleCI泊坞枢纽。
下面的示例示出了一个2.0.circleci / config.yml
一个作业文件名为构建
。Docker被选择为执行器,第一个映像是发生所有执行的主容器。这个示例有第二个映像,它将用作服务映像。第一个图像是编程语言Python。Python的图像有皮普
安装-browsers
浏览器测试。辅助映像提供了对数据库等内容的访问。
PostgreSQL数据库测试示例
在主映像中,配置用属性定义一个环境变量环境
键,给它一个URL。这个URL告诉它它是一个PostgreSQL数据库,所以它将默认为PostgreSQL默认端口。这个预构建的circleci映像已经包含了一个数据库和一个用户。用户名是Postgres的
和数据库circle_test
。所以,你可以使用该用户和数据库,而不必设置它从你自己开始。
将你的CircleCI配置中的POSTGRES_USER环境变量设置为Postgres的
到角色添加到相关图片如下:
- 图片:circleci / Postgres的:9.6高山身份验证:用户名:mydockerhub用户口令:$ DOCKERHUB_PASSWORD#背景/项目UI ENV-VAR参考环境:POSTGRES_USER:Postgres的
这个Postgres图像在这个例子中已经稍微修改过了内存
在最后。它运行在内存中,因此不会打磁盘,将通过使用此图像显著改善这种PostgreSQL数据库的性能测试。
版本:2工作:构建:运行所有命令的主容器映像搬运工人:-图像:circleci / python: 3.6.2-stretch-browsers身份验证:用户名:mydockerhub-user密码:DOCKERHUB_PASSWORD美元#背景/项目UI ENV-VAR参考环境:TEST_DATABASE_URL:postgresql: / / root@localhost / circle_test#服务容器映像-图像:circleci / postgres的:9.6.5高山-RAM身份验证:用户名:mydockerhub-user密码:DOCKERHUB_PASSWORD美元#背景/项目UI ENV-VAR参考步骤:-查看-跑:sudo apt-get更新-跑:sudo易于得到安装PostgreSQL客户端 - 9.6-跑:我是谁-跑:|psql \- d $ TEST_DATABASE_URL \-c “CREATE TABLE测试(名称char(25));”-跑:|psql \- d $ TEST_DATABASE_URL \-c“插入到测试值中('John'), ('Joanna'), ('Jennifer');”-跑:|psql \- d $ TEST_DATABASE_URL \-c “SELECT * FROM测试”
的步骤
跑查看
第一,然后再安装Postgres的客户端工具。的Postgres的:9.6.5高山-RAM
image没有安装任何特定于客户机的数据库适配器。例如,对于Python,您可以安装psycopg2
这样您就可以与PostgreSQL数据库进行接口。看到预构建的CircleCI服务映像对于图像的列表,并为这个构建配置的视频。
在这个例子中,配置会安装PostgreSQL客户端工具来访问PSQL
。注意:那须藤
,因为图像不像大多数容器默认情况下在根帐户下运行。CircleCI有一个默认运行命令的circle帐户,因此如果您希望执行管理员权限或根权限,则需要添加须藤
在你的命令的前面。
后面跟着三个命令PostgreSQL的客户端 - 9.6
与数据库服务交互的安装。这些SQL命令创建一个名为test的表,向该表插入一个值,并从该表中进行选择。提交更改并将其推到GitHub后,构建将在CircleCI上自动触发,并旋转主容器。
注意:CircleCI注入了许多便利的环境变量到主容器,你可以在条件语句整个构建的休息使用。例如,CIRCLE_NODE_INDEX和CIRCLE_NODE_TOTAL都涉及到并行编译环境。查看构建特定的环境变量文件的详细信息。
当数据库服务启动时,它会自动创建数据库circlecitest
和根
角色可以用它来登录并运行测试。它不运行的根
,它正在使用圈
帐户。然后运行数据库测试来创建一个表,向表中插入值,当在表上运行SELECT时,就会出现值。
可选定制
本节描述用于进一步自定义生成和避免竞态条件的其他可选配置。
优化Postgres图片
默认的circleci / postgres
Docker映像在磁盘上使用常规的持久存储。使用TMPFS
可能使测试运行得更快,并可以使用更少的资源。要使用一个变种杠杆TMPFS
存储,就添加内存
到circleci / postgres
标签(例如,-alpine-ram circleci / postgres: 9.6
)。
PostGIS的也可以,可以与前面的例子组合:-alpine-postgis-ram circleci / postgres: 9.6
使用二进制文件
要使用pg_dump的
,那么pg_restore
和类似的实用程序需要一些额外的配置,以确保pg_dump的
调用也将使用正确的版本。将以下内容添加到您的config.yml
文件来启用pg_ *
或同等数据库实用程序:
步骤:#添加的Postgres 9.6二进制文件的路径。- 执行:echo '出口PATH = / usr / lib目录/ PostgreSQL的/ 9.6 /斌/:$ PATH' >> $ BASH_ENV
使用Dockerize等待依赖项
使用多个Docker容器为你的工作可能会导致竞争条件如果作业尝试使用它之前在一个容器中的服务没有启动。例如,你的PostgreSQL容器可能运行,但可能还没有准备好接受连接。通过解决此问题dockerize
等待依赖性。以下是如何做到这一点在你的CircleCI为例config.yml
文件:
版本:2.0工作:构建:working_directory的:/你/ WORKDIR搬运工人:-图像:你的/ image_for_primary_container身份验证:用户名:mydockerhub-user密码:DOCKERHUB_PASSWORD美元#背景/项目UI ENV-VAR参考-图像:postgres: 9.6.2-alpine身份验证:用户名:mydockerhub-user密码:DOCKERHUB_PASSWORD美元#背景/项目UI ENV-VAR参考环境:POSTGRES_USER:your_postgres_userPOSTGRES_DB:your_postgres_test步骤:-查看-跑:名称:安装dockerize命令:wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && sudo tar - c /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz环境:DOCKERIZE_VERSION:v0.3.0-跑:名称:等待db命令:dockerize -等待tcp://localhost:5432 -超时1m
可以对下列数据库应用相同的原则:
- MySQL的:
dockerize - 等待TCP://本地主机:3306 -timeout1米
- Redis的:
dockerize -等待tcp://localhost:6379 -超时1m
Redis也有一个CLI可用:
sudo apt-get安装redisk -tools;虽然!redis-cli ping 2>/dev/null;做睡眠1;完成
- 其他服务,如Web服务器:
dockerize - 等待HTTP://本地主机:80 -timeout1米
另请参阅
指的是数据库配置举例附加配置文件示例的文档。