命令行执行docker里面的PHP,如何用 Docker 实现 PHP 命令行程序的 CI/CD

数人云今天带来的文章将分享如何用Docker实现PHP命令行程序的CI/CD过程中整体思路以及需要注意哪些问题。

6月10日,《DevOps&SRE超越传统运维之道》的话题将在北京延续,四位业界大牛技术齐聚,结合传统运维现状及实践案例,讲述DevOps&SRE的超越之道。点击即可报名。

内容要点:

使用Jet设置环境并在本地运行测试

配置Codeship Pro每次新代码提交时,自动运行测试

上一步的测试通过后,自动将更新部署到服务器

持续集成

应用程序和测试套件已经在本地运行,下一步要做的是建立一些持续集成系统。虽然可以设置服务器来执行此操作,但这个过程工作量略大,因此推荐一个像Codeship Pro的服务。

使用Jet进行本地测试

代码提交到Codeship测试前,建议先安装其本地版本的持续集成平台:Jet。这会更快地推进工作,下面示例配置文件中,需要根据应用的实际情况,做出相应调整。

安装Jet后,在项目的根目录中创建两个新文件——

1)codeship-services.yml –docker-compose.yml文件的变种,适用于Codeship

2)codeship-steps.yml – 在持续集成过程中,命令和顺序的说明

codeship-services.yml文件与 docker-compose.yml几乎一样。内容如下:

version: "2.0"

services:

# PHP Application

app:

build: .

links:

- database

encrypted_env_file: .env.encrypted

command: cron -f

# Database

database:

image: mariadb

encrypted_env_file: .env.encrypted

# Composer

composer:

image: composer/composer

volumes:

- ./:/app

codeship-steps.yml内容如下,这个文件在例子里很简单,按顺序执行这些的命令(一个接一个地)就好。如果应用程序允许,也可以并列地跑某几个步骤:

-type: serial

steps:

-service: composer

command: install

-service: app

command: bash docker/codeship-run.sh

为了确保应用程序容器和数据库容器已启动,可以看到codeship-steps.yml文件调用了一个尚未创建的shell脚本。若数据库迁移,说明测试通过。把脚本放在 ./docker/codeship-run.sh ,内容如下:

#!/usr/bin/env bash

## Ensure that the database is up and running

function test_database {

mysqladmin -h"$DB_HOST"-u"$DB_USERNAME"-p"$DB_PASSWORD"ping

}

count=0

until( test_database )

do

((count++))

## This will check up to 100 times.

if[${count}-gt 100]

then

echo"Services didn't become ready in time"

exit1

fi

## And the script waits one second between each try

sleep1

done

## Create the database

mysql -h"$DB_HOST"-u"$DB_USERNAME"-p"$DB_PASSWORD"-e 'CREATE DATABASE IF NOT EXISTS laravel'

## Run migrations

php artisan migrate

## Run the test suite

vendor/bin/phpunit

首先,该脚本会尝试连接到数据库。Codeship软件会自动启动应用程序容器和数据库容器,但MySQL初始化需要几秒,所以必须重试该test_database()功能,直到成功连接数据库(或尝试100次)。这在Codeship的Docker文档中有更详细的概述。

一旦脚本能连接到数据库,它将创建默认数据库(数据库名为laravel)。然后会运行迁移,通过PHPUnit创建数据库表和测试套件。

最后,为了测试配置正常运行和且结果通过,用Jet来运行所有步骤:

$ jet steps

如果一切正常,那么在构建容器镜像过程中,会看到一堆输出,运行返回一条成功消息:

{ContainerRunStdout=step_name:"serial_bash_docker/codeship-run.sh" service_name:"app"}: PHPUnit 5.7.19 by Sebastian Bergmann and contributors.

{ContainerRunStdout=step_name:"serial_bash_docker/codeship-run.sh" service_name:"app"}:. 1/1(100%)

Time:1.09 seconds, Memory:12.00MB

OK (1test,1 assertion)

{StepFinished=step_name:"serial_bash_docker/codeship-run.sh"type:STEP_FINISHED_TYPE_SUCCESS}

$

将仓库连接到Codeship

如果尚未提交本地代码到GitHub或Bitbucket上。每次提交代码更改时,Codeship都自动会从私有或公共仓库中拉取代码,所以只需要设置Codeship去监视那个仓库。

在Codeship中创建一个新项目,并将其连接到仓库:

1460000009513302?w=656&h=358

Meetup北京|DevOps&SRE超越传统运维之道

DevOps&SRE超越传统之道北京站来啦!6月10日,四位业界大牛技术齐聚,结合传统运维现状及实践案例,讲述DevOps&SRE的超越之道。

活动报名地址:

http://www.bagevent.com/event...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值