Artifactory PHP Composer倉庫應用實踐
阿新 • • 發佈:2018-12-25
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流水線可以很好地實現持續交付。