-
단순 프로젝트 빌드 배포 서버에서 확인개발/개발관련 2020. 3. 27. 17:40
0. 왜 새로운 뻘짓을 하는가
단순 프로젝트를 서버에 올려야하는데 기존에 쓰던 spring 프로젝트는 html 파일에서 한글이 깨진다. spring프로젝트가 아닌 프로젝트에선 안깨진다. 어짜피 db도 붙을 필요도없고 html과 리소스들만 올라가면 되니 단순 가벼운 프로젝트를 만들어서 서버에 올려보자 이게 결론. 귀찮은건 spring은 미리 다 세팅이 되어있어서 복붙하면서 새로운 프로젝트 생성하면되는데.. 이건 뭔가 내가 다 설정해주고 고쳐줘야하는게.... 더 어렵다
1. 톰캣 새로 깔기
spring을 쓰고있는데 단순 html 사이트가 올라가는 서버로 바꿔야했다. 일단 기존 spring 프로젝트는 서버에서 톰캣 통째로 백업을 해둔후 톰캣 통째로 삭제했다.
톰캣을 서버에 새로 깔고 localhost:8080에서 톰캣 사이트 뜨는 것 까진 쉽다. 구글링하면 많이 나온다.
기존에 도메인이나 ssl 등등을 유지하기위해 톰캣 폴더명은 이전과 같게했다.
2. 이클립스에서 프로젝트 생성 + 서버에서 확인
이클립스에서 단순 html만 돌릴거라 dynamic web project 인가로 생성해서 테스트겸 index.html 만들었다. export를 war로 하고 war파일을 톰캣 webapps안에 넣어줬다.
나중에 메이븐프로젝트로 다시 생성했다... 젠킨스에서 빌드 및 배포를 하려면 메이븐같은걸 써야해서...
톰캣안에 conf 폴더 안에 server.xml파일 열어서 하단에 아래 소스를 넣어줬다.
<Context docBase="pano" path="/" reloadable="true" source="org.eclipse.jst.jee.server:pano"/></Host>
프로젝트 이름과 war 파일명을 pano라고 했고, path는 /로 잡았다.
톰캣 bin 폴더에 들어가서 ./startup.sh 실행하면 서버가 올라가고 http://localhost:8080/test.html 이렇게 접속하면 잘 뜬다! test.html파일의 위치는 프로젝트 안에 webapp바로 아래에 넣어두었다.
여기서 http://localhost:8080 로 바로 열리게 하고싶으면 server.xml을 고쳐야한다.
<Service name="Pano"> <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" /> <Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/etc/letsencrypt/live/도메인/~~.p12" keystorePass="~~~~" keystoreType="~~" /> <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="pano" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="/~~~~/tomcat8/webapps/pano" reloadable="true" source="org.eclipse.jst.jee.server:pano"></Context> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service>
위와같이 service태그가 끝나는 위치 바로 밑에 위 service 태그를 추가해줘야한다.
상단에 letsencrypt관련된 부분은 ssl 적용부분이기때문에 ssl 적용이 안되어있다면 저 부분은 제외하고 넣어야한다.
다음에 웰컴파일 설정을 해줘야한다. 톰캣 conf 폴더 밑에 (server.xml과 같은 위치에) web.xml이 있다. 제일 밑에 보면 태그가 있는데 그부분에 test.html을 추가해주면 된다.
톰캣 bin에 들어가서 서버 내렷다 올리고 http://localhost:8080 접속하면 test.html 이 잘 뜬다!!!!
3. 메이븐
war파일을 항상 수작업으로 말아서 넣어줄 수 없으니 배포툴을 젠킨스를 이용할 것이다. 그런데 빌드는?
빌드는 메이븐을 쓸것이다. 전에 spring하면서 메이븐으로 빌드하고 젠킨스로 배포하고 했는데 spring 기본 뼈대 프로젝트가 있어서 그것만 복붙하면서 프로젝트 생성하면 됐는데, 메이븐 설치부터 해야하는듯 하다.
무튼 이클립스에서 메이븐 프로젝트로 생성해야된단다. 하려했더니 중간에 계속 에러가나면서 생성 자체도 안됐다. 여러해결방법이 있는데 깔금하게 워크스페이스를 변경했다.
그러면 메이븐 프로젝트가 생성이되고, 톰캣으로 로컬로 돌려서 html 확인하니 잘된다. war로 묶어서 서버에 올려서 확인했는데 그것도 잘된다.
이제 빌드와 배포를 젠킨스로 하는 것이 남았다.
4. 젠킨스
젠킨스에서 새 작업 생성해서 메이븐프로젝트 빌드, 배포 설정하고 실행했는데 에러가났다.
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project pano: Execution default-clean of goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean failed: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to collect dependencies for org.apache.maven.plugins:maven-clean-plugin:jar:2.5 (): Failed to read artifact descriptor for org.codehaus.plexus:plexus-utils:jar:3.0: Could not transfer artifact org.sonatype.forge:forge-parent:pom:5 from/to central (http://repo.maven.apache.org/maven2): Failed to transfer file: http://repo.maven.apache.org/maven2/org/sonatype/forge/forge-parent/5/forge-parent-5.pom. Return code is: 501, ReasonPhrase: HTTPS Required. -> [Help 1]
pom.xml에 dependency나 플러그인들을 추가해줘야한다.
아마 처음 pom.xml은 junit 관련된거 하나 나올것이다.
밑에와 같이 추가해줘야한다.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>~~</groupId> <artifactId>~~</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>~~</name> <url>http://maven.apache.org</url> <repositories> <repository> <id>mvn2</id> <url>http://repo1.maven.org/maven2/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> </dependencies> <build> <finalName>~~</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skipTests>true</skipTests> <forkMode>once</forkMode> <reportFormat>xml</reportFormat> <excludes> <exclude>**/Abstract*.java</exclude> <exclude>**/*Suite.java</exclude> </excludes> <includes> <include>**/*Test.java</include> </includes> </configuration> </plugin> </plugins> </build> </project>
톰캣 내렸다가 올리고 다시 젠킨스 돌리면 빌드 성공! 배포도 성공!
에러가 뭐 못깐다 없다 이런 에러가 나면 해당 파일명 구글에 검색해서 dependency나 plugin 추가해주면된다. 하루종일 삽질하던게 끝났다.
다시 한번 깨닫는다. 시간이 걸릴지라도 어떻게해서든 하면 된다.
728x90'개발 > 개발관련' 카테고리의 다른 글
Google mediapipe 손동작 인식 (0) 2020.07.15 ie에서 forEach 못쓰는 경우 (1) 2020.04.06 스크립트 순서 ready, onload, javascript (0) 2020.03.18 ssl 적용하기 (0) 2020.03.10 외부사이트 html 코드 가져오기 (0) 2020.03.05