⚡Jenkins 사용시 참조 사항 정리
- WSL2 IP가 계속 변경이 되는 경우, 유동적으로 해당 서버의 IP를 찾아가도록 설정 하는 방법.
- 해당 작업을 하기전에 PowerShell의 스크립트 실행시 외부코드 수행 권한 확인 필요❗
> Get-ExecutionPolicy |
위의 이미지와 같은 경우, 외부 코드가 실행되지 않도록 설정이 되어있는 것이다.
확인 하지 않고 스크립트를 실행하는 경우 정상적으로 적용된것으로 보이지만 실제 적용이 되지 않아서 이슈를 찾기가 매우 힘든 상황이 발생하니 확인이 필요하다.
PowerShell 정책 변경
- 정책 옵션의 경우 여러가지가 있으니 한번 찾아봐야함.
> Set-ExecutionPolicy Unrestricted |
위의 정책의 경우 정책을 무제한으로 설정하는 옵션이다.
옵션을 설정한 뒤에 다시 확인
> Get-ExecutionPolicy |
정상적으로 변경이 된것을 볼수 있다.
이제 다시 처음으로 돌아가서 유동적으로 IP를 찾는 방법에 대해서 알아보자.
기본적으로 WSL2 에서 서버가 실행 되면 아래와 같이 연결이 된다.
localHost IP (192.168.100.181) ---> wsl IP (172.20.208.1)
위의 WSL IP로 외부에서 접근했을때 Foward 작업을 하게 되면 외부에서도 접근이 가능하도록 할수 있다.
하지만 윈도우를 새로 시작할때마다 WSL의 IP가 변경이 되기때문에 이부분에 대해서 추가적으로 작업을 해줘야 한다.
아래의 스크립트 내용을 .ps1 확장자로 저장한뒤에 스케줄러에 등록을 하게 되면 된다.
포트의 경우, 스크립트내부의 $ports의 내용을 변경하면 된다.
혹시라도 아래의 스크립트를 돌리는데 에러가 발생한다면 wsl 내부에서 아래의 명령어를 실행시키면서 어디서 이슈가 발생하는지 확인 해야한다. 내부에 새로운 wsl을 구축하다보니 wsl 내부에 ifconfig 명령어가 먹지 않고 있어서 에러가 발생한 경우도 생겼었다.
$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
if( $found ){
$remoteport = $matches[0];
} else{
echo "The Script Exited, the ip address of WSL 2 cannot be found";
exit;
}
#[Ports]
#All the ports you want to forward separated by coma
$ports=@(8080,443,10000,3000,5000);
#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";
#Remove Firewall Exception Rules
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";
#adding Exception Rules for inbound and outbound Rules
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";
for( $i = 0; $i -lt $ports.length; $i++ ){
$port = $ports[$i];
iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}
참조 : https://github.com/microsoft/WSL/issues/4150#issuecomment-504209723
위의 스크립트를 파일로 만든뒤 테스트를 진행해보자.
(파일명과 위치는 다를수 있으니 자신의 경로를 확인해보자.)
> PowerShell.exe -ExecutionPolicy Bypass -File wsl-network.ps1 |
위와 같이 명령어가 나왔다면 적용이 됬다고 보아도 된다. 하지만 정상적으로 외부망에서 IP로 접근이 되지 않는 경우, 다시한번 해당 과정을 반복 해본다. (이유는 정확하지 않지만 스크립트가 적용 되는데 시간이 소요되는것으로 보인다.)
이제 외부망에서 Jenkins 페이지를 호출시 정상적으로 로그인 페이지가 뜨게 된다.
⚡생각
구축의 경우는 나보다도 정리가 잘 되어있는 글들이 많을수가 있다. 하지만 해보지 않으면 다 소용 없다고 생각을 한다. 글을 따라해도 환경적인 변수로 인해서 정상적으로 설치가 안될수도 있고, 예상치 못한 이슈가 발생할수 있기때문이다. 심지어 혼자서 구축해서 사용한다면 발견 할수 없는 IP 설정등..😅😅
현재까지도 jenkins를 통해서 배포 작업을 진행 하고 있으며 발견되는 이슈가 있으면 처리하면서 성장해 가고 있다.
'DevOps' 카테고리의 다른 글
WSL2에서 Docker 구축 정리 (0) | 2022.10.02 |
---|---|
Docker란 무엇인가?! (0) | 2022.09.25 |
[DevOps] wsl2 + Jenkins 구축 진행 (2) (0) | 2022.05.12 |
[DevOps] wsl2 + Jenkins 구축 진행 (1) (0) | 2022.05.12 |
[DevOps] wsl 및 CI/CD 관련 개념 정리 (0) | 2022.02.17 |