Tag: 持续集成

使用PHP在dockerized应用程序上实现Git钩子的最佳实践

我是相当新的Docker,只是dockerized我的PHP应用程序。 在我的本地计算机上,当我推送所有新的提交时,我会在预推送钩子上使用PHPUnit运行一些testing。 docker环境下实现这个钩子的最佳实践是什么? 我想到了copule选项, 选项1: 创build一个链接到PHP容器的“App”容器,只通过它提交代码。 这个选项的缺点是我只能处理一个集装箱docker的提交,可能会非常烦人和限制。 选项2: 在钩子脚本中使用PHP容器上的docker exec语法。 这种情况的最佳做法是什么?

Docker:如何实现具有阶段性和生产性应用程序的工作stream程?

我正在通过创build一个docker图像 docker build -t target:stage -t target:latest . 这个图像被用于docker工作者设置 target: image: target:latest restart: always target-stage: image: target:stage restart: always 所以在构build图像后,我正在使用舞台图像进行一些testing: docker-compose up -d target-stage docker-compose run –rm webdriverio wdio 这样,容器就可以build立起来,并且在舞台环境中开始testing。 如果testing通过,应用程序应该可以提高生产力: docker-compose up -d target 但是我对这个设置有一些问题/问题: 假设已经有一个目标容器正在运行(因为这是生产性的应用程序),然后我做了一些改变,想要部署新的版本,所以图像被重新构build,即使前一个图像的容器仍在运行? 有了这个,我必须停止生产性的应用程序,并运行docker组成,以获得新的在线。 在这段时间,应用程序处于脱机状态,这不是最佳的。 我怎么能阻止呢? 也许是最糟糕的事情 :假设舞台失败了。 但由于目标图像已被覆盖,所以图像有错误的应用程序(虽然它还没有在线)。 现在假设任何事情都出错了,有人必须重新启动docker-compose:现在,越野车应用程序将在最新的工作应用程序丢失时上线。 概要 我正在构build两个版本的应用程序(阶段和生产力)。 阶段版本应该上网,应该做一些testing。 如果testing通过,应用程序应该上线以获得生产环境。 如果testing失败了,生产环境就不应该改变。 我想避免(如果可能的话)。 在CI工作stream程中两次构build应用程序…

docker-in-docker(dind)服务在gitlab ci中的作用

根据官方的gitlab文档 ,在cipipe道中启用docker docker build一种方法是使用dind服务(就gitlab-ci 服务而言 )。 但是,由于在docker执行程序上运行的ci作业始终是这种情况,因此docker:latest也需要docker:latest映像。 有人可以解释: docker:dind和docker:latest之间有什么区别docker:latest图像? (最重要的): 为什么服务和docker镜像都需要(例如,如本示例中所示 ,链接到github文档中)来执行例如docker build工作,而在ci工作中? 不是docker:latest图像( 在这个工作将在其中执行 !)包含docker守护进程(我认为docker-compose也),这是我们需要的命令(例如docker build , docker push等等)? 除非我错了,否则这个问题或多或less会变成: 为什么docker客户端和docker守护进程不能驻留在同一个docker(enabled)容器中

如何在数据库的DEV,QA,PROD环境中部署数据库的连续变化?

(我想知道什么是数据库更改的最佳部署实践,假设例如我们有一个node.js服务器,如果有任何变化,我将部署它们由开发人员在开发中,如果每一件事情顺利在DEV我部署到质量保证和PROD,部署意味着为这些更改创build新的映像,并在jenkins和docker的帮助下删除之前的node.js映像作为容器,我们如何做到这一点? 我在Docker环境中需要数据库的环境中工作。 我没有得到的是假设。 我第一次为postgres设置了Docker容器,我已经将所有表添加到了模式和所有函数中。 我想知道如果假设我必须在数据库中做一些更改。 我有DEV,QA,PROD所以首先变化进入DEV环境,如果每件事情都很好,那么就去QA然后PROD。 那么部署Docker变更的方法是什么呢? 应该是这样的。 什么时候有变化。 我将为postgres和所有新的更改手动创build新的图像,或者每次我必须在docker脚本中添加更改以进行更改。 (我不关心数据量或主机挂载的数据持久性问题,我担心新的数据库更改应该如何转到DEV然后是QA,然后是PROD) 我们如何继续整合/继续部署postgres数据库? 对于任何语言更改 (如node.js中的代码更改),我每次创build新的泊坞窗图像并删除以前的图像。 但是对于数据库更改 ,我怎么做继续集成/继续部署postgres数据库,因为如果我删除docker容器postgres我必须创build整个结构再次为数据库中的单行更改。 任何帮助将赞赏? 这个员工有任何真实的生活经验吗?

使用docker同时运行多个相同的容器

我目前正在研究使用Docker(compose)来开发/ CI和最终生产环境的可能性。 我试图同时运行多个相同的容器,但仍然遇到问题。 因为我找不到使用Google的这个问题的任何引用,我相信我正在想要采取的方法在概念上犯了一个错误。 我有以下用例我想解决。 我们有一个专门的Jenkins部署服务器,在这里我们创build我们的构build并运行自动化testing。 由于开发速度很快,我希望能够同时启动多个相同的Docker镜像,而不会有容器相互干扰的风险。 一组testing将使用例如一个MySQL数据库,我希望能够为每个正在运行的版本有一个新的MySQL容器。 当我们想在生产中使用它的时候也是一样的问题。 在这种情况下,我希望每个客户都有一个单独的数据库所在的mysql容器的实例。 什么是最常见的方法来处理这些使用情况,并允许每个同时运行的同一个泊坞窗组合文件,同时为每个运行单独的MySQL容器。

GitLab CI:我的testing作业不拾取MySQL容器

我有一个连接到mysql数据库的springboot应用程序。 我想使用.gitlab-ci.yml来处理pipe道。 我创build了以下configuration文件。 before_script: – echo "Execute scripts which are required to bootstrap the application. !" after_script: – echo "Clean up activity can be done here !." services: – mysql stages: – build – connect – test – package – deploy variables: MAVEN_CLI_OPTS: "–batch-mode" MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository" MYSQL_DATABASE_NAME: gyyconsortiumdb MYSQL_DATABASE_SCHEMA: "$CI_PROJECT_DIR/src/main/resources/static/sql/gyyconsortiumdb.sql" MYSQL_ROOT_PASSWORD: mysql cache: paths: – […]

为什么node_modules在构build之后会从docker中消失?

我模仿在这里find的设置https://github.com/mjhea0/node-docker-workflow 。 使用docker-compose链接2个docker容器(node,redis)。 这里是圆ci文件: machine: services: – docker dependencies: override: – sudo pip install -U docker-compose test: override: – docker-compose run -d –no-deps node – cd node; npm test 这里是我的节点Dockerfile: FROM dockerfile/nodejs RUN mkdir /src RUN npm install nodemon -g WORKDIR /src ADD . /src RUN npm install EXPOSE 3000 CMD npm start 由于chai不能find,testing不断失败。 这是由于构build完成后node_modules消失。 […]

重build并重新运行DockerContainer

我正在试验Docker,并设置了一个Node App。 该应用程序在我的Gogs容器中的GIT Repo中。 我想保留在我的容器内的所有代码,所以在应用程序的根我有我的Dockerfile。 我想创build一个Shell脚本来自动重build我的Container并重新运行它。 这个脚本在GIT推送期间通过“webhook-container”调用。 Docker CLI只有一个构build和一个运行命令。 但是,如果一个图像或名称的容器已经存在,都会失败。 处理这个问题的最佳做法是什么? 备注:我不想保留主机上的应用程序源,只更新源代码并重新启动容器! 我喜欢这个想法,我的整个应用程序是一个容器。

在JenkinstestingDocker集群

我有一些困难,configurationJenkins在dockerized应用程序上运行testing。 首先这里是我的设置:项目是在bitbucket上,我有一个docker-compose来运行我的应用程序,它由三个三个conmtainer(一个用于mongo,一个用于redis,一个用于我的节点应用程序)组成。 bitbucket的webhook运行良好,Jenkins在我推动时触发。 然而,我想要做一个构build是:获得一个回购docker组成的位置,运行docker-compose为了让我的集群运行,然后在回购里面运行一个“npmtesting”(我的testing使用摩卡),最后让jenkins通知testing是否通过。 如果有人能够帮助我得到jenkins所应用的这一连串的操作,那将是非常棒的。

Docker CD / CI工作stream程的最佳实践是什么?

我对docker worlflow来说是个很新的东西,我想知道docker CD / CI工作stream程的最佳做法是什么……现在大多数文章似乎并没有真正谈论docker的“部署”部分,注册。 我想做的事: 进行一些代码更改 推到Git jenkinsunit testing/ EEtesting jenkinsbuild立docker形象 在registry中存储docker图像 在服务器上运行docker映像。 为了实现步骤1-5,我有下面的堆栈。 用户推送到gitlab – > Gitlab webhook通知jenkins – > jenkins构build项目 – >将图像存储在gitlab dockerregistry中。 我使用Rancher进行Docker镜像部署…我非常喜欢Rancher的分布式。 即我可以指定一个docker镜像来运行,而rancher负责部署我的容器的服务器。 理想情况下,我想第6步是“分布式”(即我不想ssh到服务器,并运行docker run {imagename} ),并有一些服务是部署的权力 有什么目前这样的事情可以让我做到这一点?