Jump to heading Deploying artifacts
If you want to deploy artifacts, phabalicious can help you here, currently there are two methods supported:
- artifacts--git
- artifacts--ftp
Both methods create a new application from scratch and deploy all or parts of it to a ftp server or store the artifacts in a git repository. Both methods are using the same stage mechanisms as in app:create
.
Both methods needs the global repository
-config, so they can pull the app into a new temporary folder.
Jump to heading artifacts--ftp
ftp will create a new application in a temporary folder, install all needed dependencies, copies the data into a new temporary folder and run the deploy script of the host-config. After that is finished, phab will mirror all changed files via lftp
to the server. lftp
supports multiple protocols, not only ftp, but it needs to be installed on the machine running phab.
ftp-sync use the following stages:
installCode
will most of the time clone the source repositoryinstallDependencies
will install all needed dependenciesrunActions
will run all defined actions (see below)runDeployScript
run the deploy-script of the host to apply some custom changessyncToFtp
sync all changed files with the remote ftp server.
Jump to heading Example config
hosts:
ftp-artifacts:
needs:
- git
- composer
- artifacts--ftp
- script
artifact:
user: stephan
host: sftp://localhost
port: 22
password: my-secret
rootFolder: /home/stephan/somewhere
actions:
- action: copy
arguments:
from: "*"
to: .
- action: script
arguments:
- cp .env.example .env
- action: delete
arguments:
- .git/
- .fabfile
- .editorconfig
- .env.example
- .gitattributes
- .gitignore
- composer.lock
- composer.json
- docker-compose.yml
- action: script
arguments:
- ls -la
- action: confirm
arguments:
question: Do you want to continue?
The default actions for the ftp-artifact-method will copy all files to the target repo and remove the .git
-folder and the fabfile.
Jump to heading artifacts--git
This method will create the artifact, pull the target repository, copy all necessary files over to the target repository, commit any changes to the target repository and push the changes again. A CI listening to commits can do the actual deployment
It is using the following stages:
installCode
, creates a temporary folder and pulls the source repository. (only whenuseLocalRepository
is set to false)installDependencies
to install the dependenciesgetSourceCommitInfo
get the commit hash from the source repo.runActions
will run all defined actions (see below)copyFilesToTargetDirectory
, copy specifiedfiles
to the target directory, removes all files listed inexcludeFiles.gitSync
runDeployScript
run the deploy script of the host-config.pushToTargetRepository
commit and push all changes, using the changelog as a commit-message
If you run phabalicious as part of a CI-setup, it might make sense to set useLocalRepository
to true, as this will instruct phab to use the current folder as a base for the artifact and won't create a new application in another temporary folder.
Jump to heading Example config
hosts:
git-artifact:
branch: develop
needs:
- git
- composer
- artifacts--git
- script
artifact:
gitOptions:
clone:
- --depth 10
branch: develop
baseBranch: master
repository: ssh://somewhere/repository.git
useLocalRepository: false
actions:
- action: copy
arguments:
from: '*'
to: .
- action: script
arguments:
- cp .env.example .env
- action: delete
arguments:
- .env.example
- composer.json
- composer.lock
- docker-compose.yml
- docker-compose-mbb.yml
- .projectCreated
the default actions for the git-artifact-method will copy all files to the target repo and remove the fabfile.
property | default value | description |
---|---|---|
artifact.branch |
false |
if set to false, the name of the source-branch is used, otherwise the value |
artifact.baseBranch |
master |
If phabalicious needs to create a new branch, because it is missing from the target-repository, then start the branch from masterBranch |
artifact.repository |
The url to the target-repository | |
artifact.actions |
Actions to perform |
Phab will use a shallow clone for the target repository to keep resources low. If you need to use a deep copy for the target repository, you can adapt the gitOptions like:
hosts:
git-artifacts:
artifact:
gitOptions:
clone: []
If the target repository contains commits not added by the artifact deployment, a warning will be shown to the user, with a list of commits and changed files. The user can confirm that he wants to continue, or stop the execution.
You can force the artifact based deployment by adding the --force
-option, or by setting the PHABALICIOUS_FORCE_GIT_ARTIFACT_DEPLOYMENT
environment variable to 1.
Jump to heading artifacts--custom
@TODO
Jump to heading Available actions
You can customize the list of actions be run when deploying an artifact. Here's a list of available actions
Jump to heading docker-copy
- action: docker-copy
arguments:
image: "%settings.gitlab.imageBaseTag%/builder:%host.branch%"
imageRootPath: /app
from: "*"
to: .
This action will copy the listed files from from
inside the docker image image
to to
. If from
is '*' phabalicious will get the contents of the directory. As the copy is initiated from the container, make sure that the imageRootPath
points to a valid directory inside the container. The image
-property supports replacement patterns, in the example case it will get the image name from the gitlab settings and the branch from the host-config. Phab will try to pull the latest image before running the action. The action supports the excludeFiles.gitSync
settings to skip certain files and folders (it defaults to .git
).
Jump to heading copy
- action: copy
arguments:
from:
- file1
- folder2
- subfolder/file3
to: targetsubfolder
This will copy the three mentioned files and folders into the subfolder targetsubfolder
of the target folder. Please be aware, that you might need to create subdirectories beforehand manually via the script
-method. Also be aware that copy action deletes existing files and folders from target before doing the copy, if you want to combine files from multiple sources it is better to also use the script
-method for that.
The action supports the excludeFiles.gitSync
settings to skip certain files and folders (it defaults to .git
). If from
is *
phabalicious will get the contents of the directory.
Jump to heading delete
- action: delete
arguments:
- file1
- folder2
- subfolder/file3
This action will delete the list of files and folders in the target folder. Here you can clean up the target and get rid of unneeded files.
Jump to heading exclude
- action: exclude
arguments:
- file1
- folder2
- subfolder/file3
Similar to delete
this will exclude the list of file and folders from be transferred to the target. For ftp
the list of files get excluded from transferring, for git
they will get resetted from the target repository.
Jump to heading confirm
- action: confirm
arguments:
question: Do you want to continue?
This action comes handy when degugging the build process, as it will stop the execution and asks the user the questions and wait for yes
before continuing. Answering sth different will cancel the further execution.
Jump to heading script
- action: script
arguments:
- echo "Hello world"
- cp .env.production .env
- action: script
arguments:
name: compile:vue
- action: script
arguments:
context: docker-image
image: node:12
script:
- npm install
- npm run build
The script
-action will run the script from the arguments section line by line. You can use the usual replacement patterns as for other scripts. Most helpful are:
Pattern | Description |
---|---|
%context.data.installDir% |
The installation dir, where the app got installed into |
%context.data.targetDir% |
The targetdir, where the app got copied to, which gets committed or synced |
If arguments
contains a name, then this named script will be executed. It should be available under the global scripts
-section or on the hosts' scripts section.
Since 3.7 phab supports executing a script in a different context. If you set arguments.context
to docker-image
the lines in script
will be executed in a docker-container started from the named docker-image provided via the image
-argument.
Note, that the container will be removed after the script finishes. Also the current user and group will be used inside the container to reduce issues with permissions. The current host-directory is available at /app
inside the container. If you want to keep files after the script finishes, make sure they are inside /app
.
Jump to heading message
- action: message
arguments:
message: Hello world!
type: (comment|note|warning|error|success)
Prints out a message regardless of the log-level using symfony styles.
Jump to heading log
- action: log
arguments:
message: Hello world!
severity: (debug|info|notice|warning|error)
Logs a message, will be visible according to the verbosity-level and the used severity.