рдЧреНрд░рд┐рд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рддреИрдирд╛рддреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛

рдореБрдЭреЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ


WAR рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

grails war 

рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐ WAR рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ WAR рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЯреЙрдордХреИрдЯ рд╣реИред рдореИрдиреБрдЕрд▓ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрджреНрд░рд╡ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ:
  1. рд╕рд░реНрд╡рд░ рдмрдВрдж рдХрд░реЛред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдорд╛рд░ рдбрд╛рд▓реЛ рдЕрдЧрд░ рдпрд╣ рдЦреБрдж рдХреЛ рд░реЛрдХ рдирд╣реАрдВ рдкрд╛рддрд╛ рд╣реИред
  2. рдкреБрд░рд╛рдиреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣рдЯрд╛рдПрдВ (рдХреЗрд╡рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ)
  3. рд╕рд░реНрд╡рд░ рдкрд░ рдирдП WAR рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБред рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЬреИрд╕реЗ, ROOT.war рдореЗрдВ)
рдорд╛рд╡реЗрди рдореЗрдВ, рдпрд╣ рдПрдХ рдХрд╛рд░реНрдЧреЛ рдкреНрд▓рдЧрдЗрди рджреНрд╡рд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд╛рд╣рд╕рд┐рдХ рдФрд░ рдЕрдиреБрдХреВрд▓рди рд╣реИрдВ, рдФрд░ рд╡рд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред

рд╣рдо рдПрдХ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬрдм рдПрдХ рдЕрджреНрднреБрдд рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЧреНрд░реВрд╡реА рднрд╛рд╖рд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╢реЗрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рдХреНрдпреЛрдВ рд▓рд┐рдЦреЗрдВ?


рдЧреНрд░реВрд╡реА рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛


рдЧреНрд░рд┐рд▓реНрд╕ рдЧреНрд░реВрд╡реА рдкрд░ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдм рдХрдВрд╕реЛрд▓ рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╣рдо Deploy.groovy рдирд╛рдордХ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВрдЧреЗ ред

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░ рдЖрдк рд╣рдорд╛рд░реЗ рдЧреНрд░реЗрд▓реНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рдирд╛рдо рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдкрд░реНрдпрд╛рд╡рд░рдг-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВред рдЧреНрд░рд┐рд▓реНрд╕ 1.3.7 рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдЗрд╕ рддрд░рд╣ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 depends(compile) depends(createConfig) /*   Gant,   Config.groovy */ def host = ConfigurationHolder.config?.deploy.host def username = ConfigurationHolder.config?.deploy.username 

рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрд╣рд╛рдВ рдкрд░ рдЧреНрд░реЗрди-рдПрдк / рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ / рдХреЙрдиреНрдлрд┐рдЧ.рдЧреНрд░реЙрд╡реЛрд╡реА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛрдЧрд╛:

 ... environments { production { ... deploy { host = 'www1.shards.intra' username = 'deployer' } } } 

рдПрдХ рдЫреЛрдЯреА рд╕реА рдЪрд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ config.groovy рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ (рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ) , рдЬрд╣рд╛рдВ рд╕рдВрдХрд▓рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреНрдЮрд╛рдд рдХрдорд╛рдВрдб (рдХрд╛рд░реНрдп) рд╣реИред

рд╣рдо SSH рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ


рд╣рдореЗрдВ SSH рдкрд╣реБрдВрдЪ рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдореБрдлреНрдд JSch рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реА рдФрд░ рдЦреБрдж рдХреЛ рдкрд╛рд╕рд╡рд░реНрдб рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдХрд▓реНрдк рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд▓рд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рддрд░рд╣ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ:

 @GrabResolver(name='jcraft', root='http://jsch.sourceforge.net/maven2') @Grab(group='com.jcraft', module='jsch', version='0.1.44') import com.jcraft.jsch.* 

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо JSch рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЬрд╛рджреБрдИ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░реЗрдВрдЧреЗред рд╣рдореЗрдВ рджреЛ рдЪреАрдЬреЗрдВ рдЪрд╛рд╣рд┐рдП:
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдЧреНрд░реВрд╡реА рднрд╛рд╖рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рдиреА-рдбреАрдПрд╕рдПрд▓ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИред рд╕рддреНрд░ рдСрдмреНрдЬреЗрдХреНрдЯ (JSch рд╕реЗ) рдореЗрдВ рдХреБрдЫ рдирдП рддрд░реАрдХреЗ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдПрдХ SSH рд╕рддреНрд░ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд░реНрд╡рд░ рдкрд░ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рд╡рд┐рдзрд┐:

 Session.metaClass.exec = { String cmd -> Channel channel = this.openChannel("exec") channel.command = cmd channel.inputStream = null channel.errStream = System.err InputStream inp = channel.inputStream channel.connect() int exitStatus = -1 StringBuilder output = new StringBuilder() try { while (true) { output << inp if (channel.closed) { exitStatus = channel.exitStatus break } try { sleep(1000) } catch (Exception ee) { } } } finally { channel.disconnect() } if (exitStatus != 0) { println output throw new RuntimeException("Command [${cmd}] returned exit-status ${exitStatus}") } output.toString() } 

рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рддрд╛рдХрд┐ рд╕рдлрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░, рд╡рд┐рдзрд┐ рдХреБрдЫ рднреА рдЖрдЙрдЯрдкреБрдЯ рди рдХрд░реЗ, рдФрд░ рдЬрдм рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рдкреВрд░реЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред

рдЕрдм рдореИрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рднреА рд▓рд┐рдЦреВрдВрдЧрд╛:

 Session.metaClass.scp = { sourceFile, dst -> ChannelSftp channel = (ChannelSftp) openChannel("sftp") channel.connect() println "${sourceFile.path} => ${dst}" try { channel.put(new FileInputStream(sourceFile), dst, new SftpProgressMonitor() { private int max = 1 private int points = 0 private int current = 0 void init(int op, String src, String dest, long max) { this.max = max this.current = 0 } boolean count(long count) { current += count int newPoints = (current * 20 / max) as int if (newPoints > points) { print '.' } points = newPoints true } void end() { println '' } }) } finally { channel.disconnect() } } 

рджрд░рдЕрд╕рд▓, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рд╕рднреА рдореБрдЦреНрдп рднрд░рдирд╛ рдкреНрд░рдЧрддрд┐ рдХрд╛ рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдкреВрд░реНрдг-рдкреВрд░реНрдг рдбреАрдПрд╕рдПрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ ( doRemote рд╡рд┐рдзрд┐ рд╕реЗ рдЬреБрдбрд╝рд╛ ):

 Session.metaClass.doRemote = { Closure closure -> connect() try { closure.delegate = delegate closure.call() } finally { disconnect() } } 

DoRemote рдкрджреНрдзрддрд┐ "рдХреЛрд╖реНрдардХ" рдмрдирд╛рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ scp рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ, рддреИрдирд╛рддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦреЗрдВ


рджрд░рдЕрд╕рд▓, рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

 //   .    grails help. target(main: " WAR-  .") { ..  JSch JSch jsch = new JSch() Properties config = new Properties() config.put("StrictHostKeyChecking", "no") config.put("HashKnownHosts", "yes") jsch.config = config //    ,  host  username  . ... String password = new String(System.console() .readPassword("Enter password for ${username}@${host}: ")) Session session = jsch.getSession(username, host, 22) session.setPassword(password) session.doRemote { exec "- " ... scp warFile, '/opt/tomcat/latest/webapps/ROOT.war' ... } } 

рдЕрдм, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдбрдмреНрд▓реНрдпреВрдПрдЖрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╣рд╛рдВ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХреИрд╕реЗ рдмрддрд╛рдПрдВ рдХрд┐ рддреИрдирд╛рддреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдЧрдг рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ :

 depends(clean) depends(war) 

рдкрд╣рд▓реЗ рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо рдбрдмреНрд▓реНрдпреВрдПрдЖрд░ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВред WAR рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдХреБрдЫ рднреА рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред GrailsSettings рдЪрд░ рд╕рднреА рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЖрдк рдпрд╣ рднреА рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдБ рд╣реИ:

 File warFile = grailsSettings.projectWarFile 

рджрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВред

рджрд░рдЕрд╕рд▓, рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ, рдЖрдЦрд┐рд░реА рд╕реНрдкрд░реНрд╢ рдмрдирд╛ рд╣реБрдЖ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдореБрдЦреНрдп) рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрд╛рд░реНрдп рд╣реИ, рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ:

 setDefaultTarget(main) 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдирд┐рд░реНрдорд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ: рд╕рдВрдХрд▓рди , рдпреБрджреНрдз , рдЖрджрд┐ред рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрднрд░ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ), рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 includeTargets << grailsScript("Clean") includeTargets << grailsScript("Init") includeTargets << grailsScript("War") 

рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдЯреЙрдордХрдЯ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ ред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╣рдордиреЗ SSH рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдорд┐рдиреА-рдлреНрд░реЗрдорд╡рд░реНрдХ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 grails deploy 
рдПрдХ рд╣реА рдЪрд▓ рд░рд╣рд╛ рд╣реИ
 grails help deploy 
рд╣рдо рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :)

рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдпрд╣ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдпрджреЗ рджреЗрддрд╛ рд╣реИ:

Source: https://habr.com/ru/post/In124035/


All Articles