Beispiel #1
0
def deploy_thread(service, deploy):
    ssh = RemoteShell(host=deploy.host.ssh_host,
                      port=deploy.host.ssh_port,
                      user=deploy.host.ssh_user,
                      passwd=deploy.host.ssh_pass)
    try:
        service.update(deploy, progress=0, status=2)
        # before checkout
        git = Git(deploy.project.checkout_dir, deploy.project.repo_url)
        before_checkout = deploy.project.before_checkout.replace("\r", "").replace("\n", " && ")
        logger.debug("before_checkout"+before_checkout)
        if before_checkout:
            LocalShell.check_call(
                "WORKSPACE='{0}' && mkdir -p $WORKSPACE && cd $WORKSPACE && {1}".format(
                    deploy.project.checkout_dir, before_checkout),
                shell=True)
        service.update(deploy, progress=17)
        # checkout
        git.clone()
        if deploy.mode == 0:
            git.checkout(deploy.branch, deploy.version)
        else:
            git.checkout(tag=deploy.version)
        service.update(deploy, progress=33)
        # after checkout
        after_checkout = deploy.project.after_checkout.replace("\r", "").replace("\n", " && ")
        if after_checkout:
            LocalShell.check_call(
                "WORKSPACE='{0}' && cd $WORKSPACE && {1}".format(
                    deploy.project.checkout_dir, after_checkout),
                shell=True)
        service.update(deploy, progress=50)
        # before deploy
        rc, stdout, stderr = ssh.exec_command(
            "mkdir -p {0}".format(
                os.path.join(deploy.project.deploy_history_dir, deploy.softln_filename)))
        if rc:
            raise Error(11003)

        logger.debug("before deploy:")
        rc, stdout, stderr = ssh.exec_command(
            "WORKSPACE='{0}' && cd $WORKSPACE && ls -1t | tail -n +20 | xargs rm -rf".format(
                deploy.project.deploy_history_dir))
        if rc:
            raise Error(11000)
        before_deploy = deploy.project.before_deploy.replace("\r", "").replace("\n", " && ")
        if before_deploy:
            rc, stdout, stderr = ssh.exec_command(
                "WORKSPACE='{0}' && cd $WORKSPACE && {1}".format(
                    deploy.project.deploy_dir, before_deploy))
            if rc:
                raise Error(11000)
        service.update(deploy, progress=67)
        # deploy
        logger.debug("deploy:")
        logger.debug("rsync:")
        shell = ("rsync -avzq --rsh=\"sshpass -p {ssh_pass} ssh -p {ssh_port}\" --exclude='.git' {local_dest}/ {ssh_user}@{ssh_host}:{remote_dest}/").format(
            local_dest=deploy.project.checkout_dir,
            remote_dest=os.path.join(deploy.project.deploy_history_dir, deploy.softln_filename),
            ssh_user=deploy.host.ssh_user,
            ssh_host=deploy.host.ssh_host,
            ssh_port=deploy.host.ssh_port,
            ssh_pass=deploy.host.ssh_pass)
        LocalShell.check_call(shell, shell=True)
        rc,stdout, stderr = ssh.exec_command("ln -snf {0} {1}".format(
            os.path.join(deploy.project.deploy_history_dir, deploy.softln_filename), deploy.project.deploy_dir))
        if rc:
            raise Error(11001)
        service.update(deploy, progress=83)

        # after deploy
        logger.debug("after deploy:")
        after_deploy = deploy.project.after_deploy.replace("\r", "").replace("\n", " && ")
        if after_deploy:
            rc, stdout, stderr = ssh.exec_command(
                "WORKSPACE='{0}' && cd $WORKSPACE && {1}".format(
                    deploy.project.deploy_dir, after_deploy))
            if rc:
                raise Error(11002)
    except Exception:
        service.update(deploy, status=0)
    else:
        service.update(deploy, progress=100, status=1)
    finally:
        ssh.close()