在我的项目中,我尝试打包我的应用程序:
image: php:8.1
pipelines:
default:
- step:
caches:
- composer
script:
- php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
- php composer-setup.php --install-dir=/usr/local/bin --filename=composer
- php -r "unlink('composer-setup.php');"
- chmod +x /usr/local/bin/composer
- step:
caches:
- composer
script:
- export PATH=/usr/local/bin:$PATH
- composer install
- ./vendor/bin/phpunit
- step:
caches:
- composer
script:
- export PATH=/usr/local/bin:$PATH
- composer install --no-dev
- apt-get update && apt-get install -y zip
- export FILE=release-$(date +"%Y%m%d%H%M%S").zip
- zip ${FILE} ./lib/*.php ./vendor/* composer.json composer.lock index.php config.php ./utils/*.php
- curl -X POST --user "${BB_AUTH_STRING}" "https://api.bitbucket.org/2.0/repositories/${BITBUCKET_REPO_OWNER}/${BITBUCKET_REPO_SLUG}/downloads" --form files=@"${FILE}"
artifacts:
- release-$(date +"%Y%m%d%H%M%S").zip
但在步骤中:
- step:
caches:
- composer
script:
- export PATH=/usr/local/bin:$PATH
- composer install
- ./vendor/bin/phpunit
我收到错误:
bash: composer: command not found
你知道为什么吗?似乎由于某种原因,在每个步骤之间安装的作曲家没有共享。
caches: composer
并不意味着composer本身是共享的,而是意味着composer的缓存是共享的。每个步骤都在其自己的独立容器中运行,因此如果您要在每个步骤中使用 Composer,则必须在每个步骤中安装 Composer。在您的示例中,您的第一步什么都不做——它只是启动一个容器,安装作曲家,然后扔掉该容器。您可以有两个步骤,一个用于测试,一个用于构建 zip,每个步骤都安装并运行 Composer:
pipelines:
default:
- step:
caches:
- composer
script:
- php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
- php composer-setup.php --install-dir=/usr/local/bin --filename=composer
- php -r "unlink('composer-setup.php');"
- chmod +x /usr/local/bin/composer
- export PATH=/usr/local/bin:$PATH
- composer install
- ./vendor/bin/phpunit
- step:
caches:
- composer
script:
- php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
- php composer-setup.php --install-dir=/usr/local/bin --filename=composer
- php -r "unlink('composer-setup.php');"
- chmod +x /usr/local/bin/composer
- export PATH=/usr/local/bin:$PATH
- composer install --no-dev
- apt-get update
- apt-get install -y zip
- export FILE=release-$(date +"%Y%m%d%H%M%S").zip
- zip ${FILE} ...
- curl ...
artifacts:
- release-$(date +"%Y%m%d%H%M%S").zip
或者,您可以基于
php:8.1
构建自己的自定义映像,并已安装 Composer 和 zip - 然后在管道配置中引用它。
image: my_custom_image_with_composer_and_zip_already_in_it:8.1
pipelines:
default:
- step:
caches:
- composer
script:
- composer install
- ./vendor/bin/phpunit
- step:
caches:
- composer
script:
- composer install --no-dev
- export FILE=release-$(date +"%Y%m%d%H%M%S").zip
- zip ${FILE} ...
- curl ...
artifacts:
- release-$(date +"%Y%m%d%H%M%S").zip