From 60bbe01ba20bf710312338f6bdf0502103f98857 Mon Sep 17 00:00:00 2001 From: Alex <a.croix> Date: Thu, 21 Jan 2021 23:07:39 +0100 Subject: [PATCH] Add Envoy to automatic deployment --- .gitlab-ci.yml | 12 ++++++++++ Envoy.blade.php | 51 +++++++++++++++++++++++++++++++++++++++ composer.json | 1 + composer.lock | 64 ++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 Envoy.blade.php diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6e6bc04..f44cc94 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -79,3 +79,15 @@ build:tagged: - docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD - docker push cylab/mark-web:$CI_COMMIT_TAG - docker push cylab/mark-web:latest + +deploy: + image: cylab/php72 + stage: deploy + script: + # import ssh private key + - eval $(ssh-agent -s) + - ssh-add <(echo "$SSH_PRIVATE_KEY") + - mkdir -p ~/.ssh + - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config + # in cylab/php72, envoy is already installed... + - ~/.composer/vendor/bin/envoy run deploy --commit="$CI_COMMIT_SHA" diff --git a/Envoy.blade.php b/Envoy.blade.php new file mode 100644 index 0000000..f51dc0e --- /dev/null +++ b/Envoy.blade.php @@ -0,0 +1,51 @@ +@servers(['web' => 'deployer@172.20.115.101']) + +@setup + $repository = 'git@gitlab.cylab.be:a.croix/mark-web-webshells-test.git'; + $root = '~'; + $current_dir = $root . '/current'; + $releases_dir = $root . '/releases'; + $release = date('YmdHis'); + $release_dir = $releases_dir .'/'. $release; + $env = $root . '/env.prod'; +@endsetup + +@story('deploy') + docker_stop + clone + composer + maven + docker +@endstory + +@task('docker_stop') + docker stop $(docker ps -aq) + docker rm $(docker ps -aq) +@endtask +@task('clone') + echo 'clone {{ $repository }} ...' + [ -d {{ $releases_dir }} ] || mkdir {{ $releases_dir }} + git clone --depth 1 {{ $repository }} {{ $release_dir }} + cd {{ $release_dir }} + git reset --hard {{ $commit }} +@endtask + +@task('composer') + echo "install composer dependencies ..." + cd {{ $release_dir }} + composer install --prefer-dist --no-dev -o +@endtask + +@task('maven') + echo "Maven compile" + cd {{ $release_dir }} + mvn clean package + cp target/webshells-tests-1.0-SNAPSHOT.jar modules/ +@endtask + +@task('docker') + echo "Docker-compose" + cd {{ $release_dir }} + docker system prune --volumes -f + docker-compose up -d --build +@endtask diff --git a/composer.json b/composer.json index 478678d..b4cd97a 100644 --- a/composer.json +++ b/composer.json @@ -26,6 +26,7 @@ "barryvdh/laravel-ide-helper": "^2.8", "facade/ignition": "^2.0", "fzaninotto/faker": "^1.9.1", + "laravel/envoy": "^2.5", "mockery/mockery": "^1.3.1", "nunomaduro/collision": "^4.1", "phpunit/phpunit": "^8.5", diff --git a/composer.lock b/composer.lock index 07c1c12..61ef9e5 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f98567f66be7257f74cece18fe772cc7", + "content-hash": "577e187ae75c04c534580511015d2b16", "packages": [ { "name": "asm89/stack-cors", @@ -5684,6 +5684,68 @@ ], "time": "2020-07-09T08:09:16+00:00" }, + { + "name": "laravel/envoy", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/envoy.git", + "reference": "75cf048ed97e2e04622e51e703a065e7720ce729" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/envoy/zipball/75cf048ed97e2e04622e51e703a065e7720ce729", + "reference": "75cf048ed97e2e04622e51e703a065e7720ce729", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0|^7.0", + "illuminate/support": "^6.0|^7.0|^8.0", + "php": "^7.2|^8.0", + "symfony/console": "^4.3|^5.0", + "symfony/process": "^4.3|^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.0|^9.0" + }, + "suggest": { + "ext-posix": "Required to determine the System user on Unix systems." + }, + "bin": [ + "bin/envoy" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Envoy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Elegant SSH tasks for PHP.", + "keywords": [ + "laravel", + "ssh" + ], + "support": { + "issues": "https://github.com/laravel/envoy/issues", + "source": "https://github.com/laravel/envoy/tree/v2.5.0" + }, + "time": "2021-01-05T16:21:50+00:00" + }, { "name": "maximebf/debugbar", "version": "v1.16.3", -- GitLab