DeployDockerComposeJob   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 32
dl 0
loc 50
rs 10
c 0
b 0
f 0
wmc 3

1 Method

Rating   Name   Duplication   Size   Complexity  
A newDeployOnRemoteServer() 0 38 3
1
<?php
2
3
namespace TheAentMachine\AentGitLabCI\GitLabCI\Job;
4
5
use TheAentMachine\AentGitLabCI\Context\BaseGitLabCIContext;
6
use TheAentMachine\AentGitLabCI\Exception\JobException;
7
8
final class DeployDockerComposeJob extends AbstractDeployJob
9
{
10
    /**
11
     * @param string $dockerComposeFilename
12
     * @param BaseGitLabCIContext $context
13
     * @param string $remoteIP
14
     * @param string $remoteUser
15
     * @param string $remoteBasePath
16
     * @param bool $isManual
17
     * @return DeployDockerComposeJob
18
     * @throws JobException
19
     */
20
    public static function newDeployOnRemoteServer(string $dockerComposeFilename, BaseGitLabCIContext $context, string $remoteIP, string $remoteUser, string $remoteBasePath, bool $isManual): self
21
    {
22
        $self = new self($context->getEnvironmentName());
23
        $self->image = 'kroniak/ssh-client:3.6';
24
        $self->variables = [
25
            'SSH_KNOWN_HOSTS' => 'You should put this value in your secrets CI variables!',
26
            'SSH_PRIVATE_KEY' => 'You should put this value in your secrets CI variables!',
27
            'DOCKER_COMPOSE_FILENAME' => $dockerComposeFilename,
28
            'REGISTRY_DOMAIN_NAME' => $context->getRegistryDomainName(),
29
            'REMOTE_IP' => $remoteIP,
30
            'REMOTE_USER' => $remoteUser,
31
            'REMOTE_BASE_PATH' => $remoteBasePath,
32
        ];
33
        $self->script = [
34
            'mkdir ~/.ssh',
35
            'echo "${SSH_KNOWN_HOSTS}" >> ~/.ssh/known_hosts',
36
            'chmod 644 ~/.ssh/known_hosts',
37
            'eval $(ssh-agent -s)',
38
            'ssh-add <(echo "${SSH_PRIVATE_KEY}"',
39
            'ssh ${REMOTE_USER}@${REMOTE_IP} "docker login -u ${CI_DEPLOY_USER} -p ${CI_DEPLOY_PASSWORD} ${REGISTRY_DOMAIN_NAME}"',
40
            'ssh ${REMOTE_USER}@${REMOTE_IP} "mkdir ${REMOTE_BASE_PATH}" || true',
41
            'ssh ${REMOTE_USER}@${REMOTE_IP} "cd ${REMOTE_BASE_PATH} && docker-compose down --rmi=all" || true',
42
            'scp ${DOCKER_COMPOSE_FILENAME} ${REMOTE_USER}@${REMOTE_IP}:${REMOTE_BASE_PATH}/docker-compose.yml',
43
            'ssh ${REMOTE_USER}@${REMOTE_IP} "cd ${REMOTE_BASE_PATH} && docker-compose up -d"'
44
        ];
45
        $branchesModel = $context->getBranchesModel();
46
        foreach ($branchesModel->getBranches() as $branch) {
47
            $self->addOnly($branch);
48
        }
49
        foreach ($branchesModel->getBranchesToIgnore() as $branch) {
50
            $self->addExcept($branch);
51
        }
52
        $self->environment = [
53
            'name' => 'review/$CI_COMMIT_REF_NAME',
54
            'url' => '# updates this with your environment URL',
55
        ];
56
        $self->manual = $isManual;
57
        return $self;
58
    }
59
}
60