1. 程式人生 > >Artifactory PHP Composer倉庫應用實踐

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流水線可以很好地實現持續交付。