Artifactory PHP Composer仓库应用实践

php开发效率高,很多公司都会采用PHP Composer来管理依赖,JFrog Artifactory是全球唯一一款全语言制品仓库,默认也支持Composer仓库,这篇文章介绍如何使用Artifactory PHP Composer 仓库来管理PHP依赖。

PHP Composer

PHP Composer是PHP依赖的管理工具,我们通过该工具与Artifactory PHP Composer仓库交互。Artifactory会按需下载PHP依赖包并缓存,客户端获得依赖后将代码打包,最终的制品通过Artifactory进行存储和分发。

Composer安装很简单,参考这里即可,这里不再赘述。

安装好之后,我们需要配置~/.composer/config.json, 内容大致如下:

{
    "repositories": [{
            "type": "composer",
            "url": "http://{ARTI-HOST}/artifactory/api/composer/php-local"
        },
        {
            "packagist": false
        }
    ]
}

如果想使用http协议,需要增加如下配置:

"config": {
   "secure-http" : false
}

接下来是配置认证,增加auth.json,内容如下:

{
    "http-basic": {
        "xxx.xxx.xxx": {
            "username": "<USERNAME>",
            "password": "<PASSWORD>"
        }
    }
}

创建Hello-world程序

可以试用init命令来创建

php /usr/local/bin/composer init

这时候会生成composer.json,内容如下:

{
    "name": "root/php-demo",
    "type": "project",
    "authors": [
        {
            "name": "John Smith",
            "email": "[email protected]"
        }
    ],
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

注意: 我们在这里加入了我们自己的依赖monolog/monolog:1.0.*,通过如下方式下载依赖

# /usr/local/bin/composer install --prefer-dist
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 1 install, 0 updates, 0 removals
  - Installing monolog/monolog (1.0.2): Loading from cache
Generating autoload files
#

打包及上传

hello-world.php 代码如下:

<!DOCTYPE html>
<html>
<head>
 <title>PHP Site</title>
</head>
<body>
 <p>
  <?php
   require 'vendor/autoload.php';
   echo "Hello World!";
  ?>
 </p>
</body>
</html>

下载依赖之后,我们可以手动通过php内部的web server来进行测试:

# php -S 0.0.0.0:8000 -t .
PHP 5.4.16 Development Server started at Fri Sep  7 17:20:20 2018
Listening on http://0.0.0.0:8000
Document root is /root/php-demo
Press Ctrl-C to quit.

启动另外一个console

# curl -i -k localhost:8000/hello-world.php
HTTP/1.1 200 OK
Host: localhost:8000
Connection: close
Content-type: text/html

<!DOCTYPE html>
<html>
<head>
 <title>PHP Site</title>
</head>
<body>
 <p>
  Hello World! </p>
</body>
</html>

测试通过后打包,然后上传到Artifactory本地仓库:

# tar -zcvf php-demo.tar.gz php-demo

调用Artifactory REST API即可上传至本地仓库,如php-local。

自动化流水线

可以写一个自动化的作业来完成所有手动工作:

node {
   stage('SCM') {
       git([url: 'https://gitlab.com/php-demo.git', branch: 'master', credentialsId: 'jenkins-gitlab'])
   }
   stage('dependency') {
       sh 'cd ${WORKSPACE} && php /usr/local/bin/composer install'
   }
   stage('package') {
       sh 'cd ../ && tar -zcvf php-demo-${BUILD_ID}.tar.gz php-pipeline-demo'
   }
   stage('upload') {
       sh 'echo $(pwd)'
       sh 'cd ../ && curl -X PUT http://{ARTI-HOST}/artifactory/php-local/${BUILD_ID}/php-demo-${BUILD_ID}.tar.gz -uadmin:{API-KEY} -T php-demo-${BUILD_ID}.tar.gz'
   }
   stage('clean') {
       sh 'rm -f /root/.jenkins/workspace/php-demo-${BUILD_ID}.tar.gz'
   }
}

这里写图片描述

我们可以在Artifactory上查看到结果:

这里写图片描述

总结

PHP 不需要编译,但是依赖管理和打包后的制品管理依然会面临较严重的挑战,JFrog Artifactory可以很好地支持依赖管理和产出物管理,结合Jenkins流水线可以很好地实现持续交付。

猜你喜欢

转载自blog.csdn.net/afandaafandaafanda/article/details/82500241
今日推荐