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