k8s

Kubernetes + UIPath Window - 3

k8s uipath with window 자동화

by HOON


1

Last updated on April 14, 2025, 3:46 p.m.


random_image

안녕하세요. 오늘은 snapshot으로 생성한 윈도우 이미지를 virtualbox를 사용해서 부팅만 시키면
바로 uipath unattended robot을 연결하고, 대기중인 상태의 프로세스를 실행하는 시나리오를 테스트 해보겠습니다.

먼저, 대략적인 시나리오는 다음과 같습니다.

Orchestrator API로 프로세스 실행(Pending 상태) → VM 복제 → UIRobot.exe를 사용하여 Connect → 자동으로 Orchestrator에서 Pending 상태인 프로세스가 로봇이랑 연결된 후 실행


UIPath 서비스모드 설치

그 전에 저희는 UIPath의 서비스모드로 설치가 되어야합니다. msi 파일을 갖고계신다면 아래 명령어를 통해 서비스 모드로 설치해야해요. (Modern Folders 에서는 사용자에게 할당되는 라이센스와 머신에게 할당되는 라이센스가 다르기 때문입니다.)

msiexec /i UiPathStudio.msi ADDLOCAL=DesktopFeature,Robot,RegisterService /qn

이런식으로 명령어를 사용하면 uipath는 서비스모드로 설치가 됩니다. qn 옵션 때문에 아무런 로그가 남지 않고 설치가 될거에요.
설치 여부는 services.msc 에서 UIPath Robot 서비스가 실행중이면 됩니다.


window 설정

저번 블로그에서 스냅샷을 사용해 윈도우를 띄워봤죠??
이번에는 해당 스냅샷에 윈도우 부팅 시 자동으로 uipath 연결과 프로세스를 실행하기위해 필요한 파일들을 작성해보겠습니다.
먼저, 같은 프로세스를 여러 로봇에서 가동하려면 뭐가 필요할까요? UIPath를 사용 해 보신 분이라면 알겠지만, 여러대의 PC가 필요했습니다. 즉 Hostname이 달라야해요.
현재 저희가 스냅샷 찍은 이미지의 Hostname은 DESKTOP-OOQKED3 입니다.

그럼 스냅샷을 그대로 복제해서 다른 vm에 띄운다면? 이전에 가동되고 있던 프로세스는 강제 종료가 되거나 정상적으로 실행되지 않을거에요. 같은 이름의 Hostname과 Username이 2개를 동시에 연결하려고 하거든요.

그럼 어떻게 할까요?

저는 여기서 Window 부팅을 두 번 하기로 했습니다.
첫 번째 부팅은 window의 Hostname을 랜덤으로 변경합니다.
두 번째 부팅은 변경된 Hostname으로 UIPath Orchestrator에 connect 시도합니다.

이렇게하면 중복되는 Hostname없이 정상적으로 Pending 상태의 프로세스를 가져와 실행 할 수 있어요.
첫 번째 부팅에 필요한 명령어부터 볼까요?

#rename-reboot.cmd

@echo off
set "RAND=%RANDOM%%TIME:~6,2%"
wmic computersystem where name="%COMPUTERNAME%" call rename name="UiBot-%RAND%"

:: 다음 부팅에 로봇 연결
reg add HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce ^
    /v UiConnect /t REG_SZ ^
    /d "\"C:\Program Files\UiPath\connect.bat\"" /f

shutdown /r /t 0

RAND 라는 변수에 랜덤값을 넣고, Hostname을 UiBot-랜덤값 으로 지정해줍니다.
다음 부팅시 로봇에 연결하고, 한번만 Orchestrator에 연결을 시도하기위해 registry 값을 패치합니다.
마지막으로 shutdown 명령어를 통해 바로 재시작 합니다.

이렇게 작성한 파일을 저는 아래 경로에 둘게요.

C:\Program Files\UiPath

여기서 끝이 아니라, 저희가 생성한 파일을 처음 한번만 실행하기위해 똑같이 registry에 값을 지정해줄게요.
(반드시 아래 명령어가 실행 된 상태로 복제해야합니다. 우선 실행만 시켜주세요)

reg add HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce ^
    /v UiRename /t REG_SZ ^
    /d "\"C:\Program Files\UiPath\rename-reboot.cmd\"" /f

“저희가 생성한 파일을 부팅시 딱 한번만 실행하겠다” 입니다.
그럼 처음 부팅에는 rename-reboot.cmd가 실행되고, 다음 두 번째 부팅에는 아직 작성하지 않았지만, connect.bat이 실행되겠죠??
그럼 이어서 바로 connect.bat을 작성해볼게요.

@echo off
"C:\Program Files\UiPath\Studio\UiRobot.exe" connect --url https://cloud.uipath.com/"{tenant}" --key "Machine KEY"

각자의 url과 머신키를 넣어주면 됩니다. 이렇게되면 두 번째 부팅에는 자동으로 Orchestrator와 연결 할거에요.
자, Window는 준비가 끝났습니다. 테스트를 위해 원본이 되는 vm을 종료 후 복제 해주세요.


UIPath, Orchestrator 설정

다음은 Orchestrator 설정입니다.
먼저 Machine은 이미 생성되어있는 상태입니다. 프로세스는 간단하게 Msgbox를 출력하는 프로세스입니다.

생성하고 test 폴더에 배포하면 위와 같은 그림으로 배포가 되어있을거에요.
꼭 호환성을 Windows로 설정해주세요.
이렇게 설정하고 실행 한번 해보겠습니다. 테스트니까 vm이 켜져있고, uipath robot도 연결이 된 상태로 테스트 해보면, 정상가동이 되는걸 확인 할 수 있습니다.


완전 자동화 테스트

이제 마지막으로, 저희가 처음에 구상한 시나리오대로 테스트를 진행해볼게요.
일단, 로봇 연결을 다 끊은 후 UIPath Robot svc만 실행 되는 상태를 유지해주세요.
즉, Robot은 끊긴상태이지만, 실제로 실행중인 상태입니다.
그리고 저희가 생성한 간단한 프로세스를 실행해주세요.

다음으로 해당 vm을 종료 후 복제 하겠습니다.

복제(기존 vm) → 복제 복제(새로운 테스트 vm)으로 복제하고 시간이 조금 지난 후 부팅을 해보면??
일단, 완전하게 부팅되기 전까지는 Orchestrator에서 프로세스를 계속 Pending 상태로 갖고있을거에요.

연결된 로봇이 없거든요.
첫번째 부팅이 끝나고, 재부팅이 될거에요. 그때까지도 프로세스는 실행되지않고 Pending 상태입니다.
그 다음 두 번째 부팅이 완료되면?? Pending 상태이던 프로세스가 실행 할 로봇을 찾았고, 자동으로 실행 됩니다.

그리고 vm을 보면??

정상적으로 실행중인걸 확인 할 수 있습니다.
참고로, 로봇도 랜덤 Hostname으로 생성 되었습니다.

만약, Login 관련 에러가 발생하시는분은 window 비밀번호 설정 → Orchestrator에서 설정한 비밀번호 업데이트 → Reg 사용한 비밀번호 없이 바로 로그인 순서를 따르면 성공적으로 될거에요.

다음 포스트는 이렇게 생성한 이미지를 바탕으로 k8s의 kubevirt에 올리고 실행되는것까지 확인해보겠습니다.

감사합니다.

×
k8s UIPath window kubevirt cdi


Leave a Comment: