์ด๋ฒ์ ์ ์์ ๋ถํ๋ ์์ํฌ์ ์๋ฒ์ฉ ๊ฐ๋ฐํ๊ฒฝ์ ์ด์ฉํด์ CI, CD๋ฅผ ๊ตฌ์ถํ๋ค.
๋ค์์ ์ ๋ฒ์ ์ค์นํ GitLab๊ณผ ์๋ก ์ค์นํ Jenkins๋ก ์ฒ์๋ถํฐ ์ฐ๋ํ๋ ๊ฒ๋ ํฌ์คํ ์์ ์ด๋ค.
[DevOps] CentOS 8 JenKins ์ค์น(feat. CI, CD)
๋ชฉ์ฐจJenKins ์ค์น๊ณผ์ ๋ด ๊ฒฝ์ฐ๋ jdk๊ฐ ์ด๋ฏธ ์ค์น๋์ด ์์๊ธฐ์ ๊ทธ ๋ถ๋ถ์ ์๋ตํ๋ค.#๊ณต๊ฐํค ๊ฐ์ ธ์จ๋ค.rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key#์ ์ฅ์ ํ์ผ ์ค์นsudo wget -O /etc/yum.repos.d/je
yaga.tistory.com
[DevOps] CentOS 8 GitLab ์ค์น
๋ชฉ์ฐจGitLab ์ค์น๊ณผ์ #GitLab์ CentOS์ฉ RPM ์ ์ฅ์ ์ค์นํ๊ธฐ ์ํ ์คํฌ๋ฆฝํธ ๋ค์ด๋ก๋ ๋ฐ ์คํcurl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash#gitlab ์ปค๋ฎค๋ํฐ๋ฒ์ ์ค์นsudo yum
yaga.tistory.com
๊ทธ๋ฆผ์ ์ฐธ ๋ชป๊ทธ๋ ธ์ง๋ง ๊ตฌ์กฐ๋ ๋๋ต์ ์ผ๋ก ์๋์ ๊ฐ๋ค.
์ด๋ก์จ ํด๋ณด์ง ์์๋ JenKins ์ธํ ์ด๋ผ๋ small success๋ฅผ ๋ ์ป์๋ค. ๐
1. ๊ฐ๋ฐ์pc์์ GitLab์ผ๋ก ์์ค๋ฅผ commit/pushํ๋ค.
2. GitLab์ push ์ด๋ฒคํธ ๋ฐ์ ์ webhook์ ์ด์ฉํด์ jenkins์ job์ ์คํ์ํจ๋ค.
3. jenkins์ job์์๋ ๋น๋ ํด(์ฌ๊ธฐ์ maven)์ ์ด์ฉํด์ ๋น๋ํ๋ค.
4. ๋น๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ํ๋ ๊ฒฝ์ฐ WAS์ ๋ฐฐํฌ๊ฒฝ๋ก์ ์์ค๋ฅผ warํ์ผ ํํ๋ก ๋ฐฐํฌํ๋ค.
๋ค์์ ๋ฒ์ถ์ผ๋ฐ์ค์ ๋ค ์ค์นํด์ ๋ผ์ด๋ธ๋ก ์ดฌ์ํ ๊น ์๊ฐ์ค์ด๋ค.
GitLab Community Edition ver: 15.9.1
Jenkins 2.426.3
JenKins๋ฅผ ๋์ฐ๋ tomcat 9.0.85
jdk 17.0.11(OpenJDK Corretto)
apache-maven 3.9.6
๋ด์ฉ์ด ๊ธฐ๋๊น ๋ชฉ์ฐจ๋ก ์ด๋ํ๊ธธ ๋ฐ๋๋ค.
์๋ฒ์ฉ ๊ฐ๋ฐํ๊ฒฝ ๋ค์ด๋ก๋ ๋ฐ ์ ๋ก๋
์๋ ๊ฒฝ๋ก์์ eGovCI-4.2.0.tar.xz๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๋๋ค.
https://www.egovframe.go.kr/home/sub.do?menuNo=94
์ ๋ก๋ ๊ถ์ฅ ๊ฒฝ๋ก(/home/์ฌ์ฉ์ํด๋)์ ์ ๋ก๋ ํ๋ค.
์ ๋ก๋ํ eGovCI-4.2.0.tar.xz์ ์์ถ์ ํด์ ํ๋ค.
์๋ฒ์ฉ ๊ฐ๋ฐํ๊ฒฝ ํด๋ ๋ชฉ๋ก์ ํ์ธํ๋ค.
Jenkins ์คํ ๋ฐ ์ค์
์๋ฒ์ฉ ๊ฐ๋ฐํ๊ฒฝ ๋ฆฌ๋ ์ค์ฉ์ jdk๊ฐ ๋๋ด๋์ด ์์ง ์์ผ๋ jdk๋ฅผ ๋ฏธ๋ฆฌ ์ธํ ํด๋์ผ ํ๋ค.
์ด ๋ถ๋ถ์ ํ์คํ๋ ์์ํฌ์ผํฐ์์ ๋ฆฌ๋ ์ค์ฉ ๋ฐฐํฌํ ๋ ๋๋ฝ๋๊ฑด์ง ์ ํํ ์ ์ ์๋ค. ๐ฅ
๊ทธ๋ฅ ๋ค ๋ฃ์ด์ฃผ๋ฉด ์ข์ผ๋ จ๋ง..๋ฆฌ๋ ์ค์ฉ ๋ง๊ณ ์๋์ฒ๋ผ windows์ฉ์ jdk 1.8๊ณผ 17 ๋ ๋ค ๋ค์ด์๋ค.
์ธํ ๋ jdk์ jenkins๋ฅผ ์ฐ๋ํ๊ธฐ ์ํด ๋ค์ ํ์ผ์ JAVA_HOME ๊ฒฝ๋ก๋ฅผ ์์ ํ๋ค.
vi /home/์ฌ์ฉ์ํด๋/eGovCI-4.2.0/setEnv.sh
jenkins๋ฅผ ๋์ฐ๋ tomcat์ ํฌํธ ๋ณ๊ฒฝ(WAS์ port ์ค๋ณต ๋ฐฉ์ง) ํ ๋ฐฉํ๋ฒฝ์ ํด์ ํ๋ค.
#ํฌํธ ์ค์ ์์ ํ๊ธฐ ์ํ ํ์ผ ํธ์ง
vi /home/์ฌ์ฉ์๋ช
/eGovCI-4.2.0/bin/apache-tomcat-9.0.85-jenkins/conf/server.xml
#๋ฐฉํ๋ฒฝ ํ์ฉ
sudo firewall-cmd --permanent --zone=public --add-port=ํฌํธ๋ฒํธ/tcp
#๋ฐฉํ๋ฒฝ ์ ์ฉ
sudo firewall-cmd –reload
#๋ฐฉํ๋ฒฝ ํ์ฉ ๋ชฉ๋ก
sudo firewall-cmd --list-all
jenkins๋ฅผ ๊ธฐ๋ํ๋ค.
jenkins์ admin ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ธ ํ ๋ณต์ฌํ๋ค.
cat /home/์ฌ์ฉ์๋ช
/eGovCI-4.2.0/home/Jenkins/secrets/initialAdminPassword
๋ธ๋ผ์ฐ์ ์์ host:8081/jenkins๋ก ํธ์ถํ ๋ค admin/์์๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธ ํ๋ค.
๊ทธ ํ admin ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณ๊ฒฝ ํ ์ฌ๋ก๊ทธ์ธํ๋ค.(Jenkins๊ด๋ฆฌ > Users > Password)
Tools
Jenkins ๊ด๋ฆฌ > System Configuration > Tools ์ ํ ํ Maven Configuration, JDK installations, Git installations, Maven installations์ ์ค์ ํ ์ ์ฅํ๋ค.
GitLab Plugin ์ค์น
์์ค ์ ์ฅ์๊ฐ GitLab์ด๋ผ์ GitLab ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋ค.(Jenkins๊ด๋ฆฌ > Plugins > ์ฌ์ฉ๊ฐ๋ฅ ํ๋ฌ๊ทธ์ธ)
Item ์์ฑ ๋ฐ ์ค์
์์ ์ ์งํํ Item๋ช ์ ๋ ฅ ํ Maven project ์ ํ ํ Ok๋ฅผ ๋๋ฅธ๋ค.
์์ค์ฝ๋๊ด๋ฆฌ์์ Git์ ์ ํํ ํ Repository URL์ GitLab ์ ์ฅ์ URL์ ์ ๋ ฅํ๋ค.
ํ์ฌ๋ GitLab ๊ณ์ ์ด ์์ด์ ์ฐ๊ฒฐ์ด ์คํจํ๋ค.
Credentials > Add(Jenkins) ์ ํ ํ Username, Password๋ง ๋ณธ์ธ์ gitLab๊ณ์ ๋ก ์ ๋ ฅ ํ Add๋ฅผ ๋๋ฅธ๋ค.(ID, Description์ ์ ํ์ฌํญ์ด๋ค.)
Git > Repositories > Credentials์์ ๋ฐฉ๊ธ ์ถ๊ฐํ ๊ณ์ ์ ์ ํํ๋ค.
Branches to build๋ ํ ์คํธ๋ฅผ ์ํด์ Branch Specifier๋ฅผ ๋น๊ฐ์ผ๋ก ํด์ ๋ชจ๋ branch๋ก ์ค์ ํ๋ค.
Apply๋ฅผ ๋๋ฅธ๋ค.
๋น๋์ ๋ฐ์์ Build when a change is pushed to GitLab์ ์ฒดํฌ ํ GitLab webhook URL์ ๋ฉ๋ชจํด ๋๋ค.
๋น๋ ์ ๋ฐ > ์คํฌ๋กค ๋ด๋ ค์ Secret token์์ Generate์ ๋๋ฅด๋ฉด ํ ํฐ์ด ์์ฑ๋๋๋ฐ ์ด๋ฅผ ๋ฉ๋ชจํด ๋๊ณ (์ ๋ ์ธ๋ถ์ ์ ์ถ๋๋ฉด ์๋๋ค.) Apply ๋๋ฅธ ํ ์ ์ฅ์ ๋๋ฅธ๋ค.
GitLab์ผ๋ก ์ด๋ ํ > ํด๋น ํ๋ก์ ํธ > Settings > Access Tokens์์ ํ ํฐ์ ์์ฑํ๋ค.
๋ง๋ฃ์ผ์ ์ง์ธ ๊ฒฝ์ฐ ๋ง๋ฃ๊ฐ ์๊ฒ ๋๊ณ Select scopes๋ ์ํฉ์ ๋ง๊ฒ ์ฒดํฌ ํ Create Project access token ์ ํ ์ ํ ํฐ์ด ์์ฑ๋๋๋ฐ ์ด๋ฅผ ๋ฉ๋ชจํด๋๋ค. (์ ๋ ์ธ๋ถ์ ์ ์ถ๋๋ฉด ์๋๋ค.)
Settings > Webhooks์์ URL์ jenkins์์ ๋ฉ๋ชจํด ๋ GitLab webhook URL์ ์ ๋ ฅ(์ด ๋ host๋ localhost๊ฐ ์ค์ IP๋ฅผ ์ ๋ ฅํด์ผ ์ธ๋ถ ํต์ ์ด ๋๋ค.), Secret token๋ jenkins์์ ์์ฑํ ํ ํฐ ์ ๋ ฅ ํ Trigger > Push events์์ ์ํ๋ branch๋ฅผ ์ฒดํฌ ํ ๋ค (ํ ์คํธ๋ฅผ ์ํด All branches๋ก ์ฒดํฌํ๋ค.) Add webhook์ ๋๋ฅธ๋ค.
๋ง์ผ webhook ์์ฑ ์ ์๋์ฒ๋ผ ์๋ฌ๊ฐ ๋ฐ์ ํ ๊ฒฝ์ฐ ์ ์ฒด ๊ด๋ฆฌ์๋ก ์ ์ ํ Admin Area > Network > outbound requests ์ ํ ํ Allow requests to the local network from web hooks and services ์ฒดํฌ ํ ์ ์ฅ ํ ๋ค ์ฌ์๋ํ๋ค.
webhook์ด ์์ฑ๋๋ฉด Test > Push events๋ฅผ ๋๋ฌ ํ
์คํธํ๋ค.
๋ง์ผ ์๋์ฒ๋ผ 403 ์๋ฌ ๋ฐ์ํ ๊ฒฝ์ฐ jenkins์์ Secret token์ด ์ ๋๋ก ์์ฑ๋์๋์ง ํ์ธํ๋ค. Secret token Generate ํ Apply ๋๋ฅธ ํ ์ ์ฅ์ ๋๋ฌ์ผ ์์ฑ๋๋ค.
webhook ์ ์ ํต์ ๋ ๊ฒฝ์ฐ ์๋์ฒ๋ผ ์ํ๊ฐ 200์ด ํ์ธ๋๋ค.
๋ค์ Jenkins๋ก ์์ Jenkins ๊ด๋ฆฌ > Credentials > Stores scoped to Jenkins์์ Domains์ global์ ๋๋ฅธ๋ค.
Kind > GitLab API token ์ ํ, API token์ GitLab์์ ์์ฑํ API token์ ์ ๋ ฅ ํ Create๋ฅผ ๋๋ฅธ๋ค.
Jenkins ๊ด๋ฆฌ > System > GitLab์์ Connection name, GitLab host URL ์ ๋ ฅ ํ Credentials์์ ์์ฑํ GitLab API token ์ ํ ํ Test Connection์ ๋๋ฅด๊ณ Success๊ฐ ํ์ถ๋๋์ง ํ์ธํ๋ค.
Dashboard์์ ์๊น ์์ฑํ item ์ ํ ํ ๊ตฌ์ฑ์ ๋๋ฅด๊ณ Build๋ถ๋ถ์์ Goals and options์ ์๋์ฒ๋ผ ์ ๋ ฅ(์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ ๋ ฅํ๋ค.) ํ Apply๋ฅผ ๋๋ฅธ๋ค.
WAS(apache tomcat 9.x) ์ค์
WAS์ tomcat manager ๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋๋ก ์๋ ๋ช ๋ น์ด๋ก ํ์ผ์ ํธ์ง ํ tomcat ์ฌ๊ธฐ๋ํ๋ค.
#tomcat user ํธ์ง
vi /tomcat์ค์น๊ฒฝ๋ก/tomcat/conf/tomcat-users.xml
#tomcat manager ์๊ฒฉ ์ ์ ํ์ฉํ๊ธฐ ์ํจ
vi /tomcat์ค์น๊ฒฝ๋ก/tomcat/webapps/manager/META-INF/context.xml
# <Value className…> ์ฃผ์์ฒ๋ฆฌ
๋ธ๋ผ์ฐ์ ์์ host:port/manager ํธ์ถ ํ ์์ฑํ tomcat manager๊ณ์ ์ผ๋ก ์ ์ ๋๋์ง ํ์ธํ๋ค.
๋ค์ Jenkins๋ก ์์ Jenkins๊ด๋ฆฌ > Plugins์์ deploy๋ผ๊ณ ๊ฒ์ ํ Deploy to container๋ฅผ ์ค์นํ๋ค.
Item > ๊ตฌ์ฑ์์ ๋น๋ ํ ์กฐ์น > ๋น๋ ํ ์กฐ์น ์ถ๊ฐ์์ Deploy war/ear to a container๋ฅผ ์ ํํ๋ค.
War/EAR files์ ํํ์์ ์
๋ ฅ ํ(๋งค๋ด์ผ์์๋ ๋ชจ๋ warํ์ผ๋ก ์
๋ ฅํ๋ค.)
Containers > Add Container ์ ํ ํ Tomcat 9.x Remote๋ฅผ ์ ํํ๋ค.
Tomcat 9.x Remote > Credentials > Add(Jenkins)๋๋ฅธ ํ tomcat manager์ ๋ณด๋ฅผ ์ ๋ ฅ ํ Add๋ฅผ ๋๋ฌ์ ์ถ๊ฐ ํ Credentials์์์ ํ ํ Tomcat URL ์ ๋ ฅ ํ ์ ์ฅํ๋ค.
CI, CD ํ ์คํธ
ํ ์คํธ์ฉ์ผ๋ก branch ์์ฑ ๋ฐ ํ๋ฉด ์์ ํ GitLab์ commit/pushํ๋ค.
Jenkins์์ ๋น๋๊ฐ ์คํ๋๋ค.
Console Output ์ ํ ์ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๋ค.
์๋ฒ์ WAS ๋ฐฐํฌ ๊ฒฝ๋ก์ warํ์ผ์ ๋ฐฐํฌ์ํ๋ฅผ ํ์ธํ๋ค.
warํ์ผ์ด ์ ์ฎ๊ฒจ์ก๊ณ ์์ถ๋ ํ๋ ธ๋ค.
๋ธ๋ผ์ฐ์ ์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ url ํธ์ถ ํ ๋ก๊ทธ์ธ ํ๋ฉด ๋ด์ฉ์ ๋ณ๊ฒฝ์ ํ์ธํ๋ค.
์ ์์ ์ผ๋ก ์์ ํ ์์ค๊ฐ ์ ์ฉ๋์๋ค.
์ ์์ ๋ถ CI ๊ตฌ์ถ ๊ฐ์ด๋๊ฐ ๋ฆฌ๋ ์ค์ฉ์ ์ฐธ์กฐํ ๋งํ ๊ฒ ๋ณ๋ก ์์ด์ ์ฝ์ง ๋ง์ดํ๋ค.
ํด ์ด๋ฒ ํฌ์คํ ์ ๋งค์ฐ ํ๋ค์๋ค.

๋ฏธ๋์ ๋๋ฅผ ์ํด ํ๋ ๊ธฐ๋ก์ด๊ณ ๋๊ตฐ๊ฐ์๊ฒ ์์ ๋์์ด ๋๊ธธ ๋ฐ๋ผ๋ฉฐ..
๊ฐ์ธ ์คํฐ๋ ๊ธฐ๋ก์ ๋ฉ๋ชจํ๋ ๊ณต๊ฐ์ด๋ผ ํ๋ฆฐ์ ์ด ์์ ์ ์์ต๋๋ค.
ํ๋ฆฐ ์ ์์ ๊ฒฝ์ฐ ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค.
[AWS] EC2 + Docker + RDS๋ก ์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๋ฒ ๋ฐ DB ๊ตฌ์ถ ๊ฐ์ด๋ ๐๐ป๐ฆ
์ด ํฌ์คํ ์ AWS ํ์๊ฐ์ ๋ถํฐ EC2/RDS ์ธ์คํด์ค ์์ฑ ๋ฐ ์น์๋ฒ์ ์ฐ๋ํ ๊ธฐ๋ณธ ๊ฐ์ด๋์ ๋๋ค.๋น ๋ฅธ ์์ผ๋ด์ AWS ํ์๊ฐ์ ๋ถํฐ ์ํคํ ์ฒ 3๊น์ง ๊ตฌ์ถํ๋ ๋ผ์ด๋ธ ์์ ํฌ์คํ ์์ ์ ๋๋ค.2025๋ 2์15
yaga.tistory.com
[DevOps] CentOS7 ์ค์น๋ถํฐ jdk, mysql, tomcat ์ฐ๋๊น์ง ๊ณผ์
CentOS7 ์ค์น๋ถํฐ jdk, mysql, tomcat ์ค์น ๋ฐ ๊ฐ๋จํ ์ฐ๋๊ณผ์ ์ ๊ฐ๋ตํ ํฌ์คํ ํ๋ค.CentOS ๋ฏธ๋ฌ ์ฌ์ดํธ์์ isovํ์ผ ๋ค์ด๋ก๋ํ๋ค.(์ฌ๊ธฐ์ GUIํ๊ฒฝ์ผ๋ก ์ค์นํ๊ธฐ ์ํด DVD ์ ํ)CentOS7 ์ค์น๋ฆฌ๋ ์ค ๋ถํ ๋
yaga.tistory.com
'IT > DevOps' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[git] git reset(feat. soft, mixed, hard) (36) | 2024.06.06 |
---|---|
[DevOps] Nexus ์คํ ๋ฐ ์ฐ๋ (feat. eGovCI) (37) | 2024.05.08 |
[DevOps] CentOS 8 GitLab ์ค์น (35) | 2024.05.01 |
[DevOps] CentOS 8 JenKins ์ค์น(feat. CI, CD) (37) | 2024.05.01 |
[DevOps] CentOS7 ์ค์น๋ถํฐ jdk, mysql, tomcat ์ฐ๋๊น์ง ๊ณผ์ (55) | 2024.04.25 |
๋๊ธ