성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
[정성태] 만드실 수 있습니다. 단지, Unity 엔진 내의 스크립트와 W...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>.NET Framework 프로젝트를 위한 GitLab CI/CD Runner 구성</h1> <p> 이번 글은 다음의 내용을 실습하면서 작성해 본 것입니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > GitLab CI/CD with .Net Framework ; <a target='tab' href='https://medium.com/@gabriel.faraday.barros/gitlab-ci-cd-with-net-framework-39220808b18f'>https://medium.com/@gabriel.faraday.barros/gitlab-ci-cd-with-net-framework-39220808b18f</a> </pre> <br /> <hr style='width: 50%' /><br /> <br /> 일반적으로 빌드 머신은 GitLab 서버와 별도로 구성하기 때문에 .NET Framework 프로젝트를 위한 빌드 서버를 별도로 하나 구성해야 합니다. 아니면, 그냥 기존에 사용하던 빌드 머신을 그대로 재사용해도 상관없습니다. 빌드 서버가 구성되었으면, 이제 필요한 것은 GitLab에 소스 코드가 commit되었을 때 해당 빌드 서버에서 git fetch 후 빌드 스크립트를 연동해 줄 프로그램이 있어야 합니다. 물론 그런 프로그램을 만들어도 되겠지만, GitLab의 경우 이런 기능을 하는 "Runner"를 만들어서 배포하고 있으니,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > GitLab Runner ; <a target='tab' href='https://docs.gitlab.com/runner/'>https://docs.gitlab.com/runner/</a> </pre> <br /> 여러분의 빌드 서버에 Runner를 설치해 주면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Install GitLab Runner on Windows ; <a target='tab' href='https://docs.gitlab.com/runner/install/windows.html'>https://docs.gitlab.com/runner/install/windows.html</a> gitlab-runner-windows-amd64.exe ; <a target='tab' href='https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-amd64.exe'>https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-amd64.exe</a> </pre> <br /> 단일 파일로 되어 있어서 좋군요. ^^ 이제 gitlab-runner-windows-amd64.exe 파일을 다운로드해 아래의 경로에 (이름을 바꾸지 않아도 되지만) 저장해 줍니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > d:\gitlab-runner\gitlab-runner.exe </pre> <br /> 해당 runner를 여러분들의 GitLab 서버와 연동시키기 위해 등록 과정이 필요한데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Install GitLab Runner on Windows ; <a target='tab' href='https://docs.gitlab.com/runner/install/windows.html'>https://docs.gitlab.com/runner/install/windows.html</a> Registering Runners ; <a target='tab' href='https://docs.gitlab.com/runner/register/index.html'>https://docs.gitlab.com/runner/register/index.html</a> </pre> <br /> "register" 인자를 넣어 실행하면 됩니다. (또는 명령행 인자로 값을 전달할 수도 있습니다.)<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > D:\GitLab-Runner> <span style='color: blue; font-weight: bold'>gitlab-runner.exe register</span> Runtime platform arch=amd64 os=windows pid=7996 revision=1b659122 version=12.8.0 Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): <span style='color: blue; font-weight: bold'>https://git.testsrv.com:5000/</span> Please enter the gitlab-ci token for this runner: <span style='color: blue; font-weight: bold'>PreuZnmZc6yvc_Rout2j</span> Please enter the gitlab-ci description for this runner: [mybuild]: <span style='color: blue; font-weight: bold'>MY PRODUCT Build</span> Please enter the gitlab-ci tags for this runner (comma separated): <span style='color: blue; font-weight: bold'>j5a</span> Registering runner... succeeded runner=PreuZnmZ Please enter the executor: docker, docker-windows, docker-ssh, parallels, docker-ssh+machine, kubernetes, custom, shell, ssh, virtualbox, docker+machine: <span style='color: blue; font-weight: bold'>shell</span> Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! </pre> <br /> 입력해야 할 값들을 보면, 우선 GitLab 서버의 URL과 해당 서비스와 연동하기 위한 인증 토큰을 묻는데, 이 값들은 여러분들의 GitLab 서버에 등록된 "프로젝트"의 Settings / "CI / CD" 메뉴로 들어가면 다음과 같이 "Runners" 범주에서 확인할 수 있습니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='gitlab_specific_runner_1.png' src='/SysWebRes/bbs/gitlab_specific_runner_1.png' /><br /> <br /> 그다음, "Description"은 임의의 값을 넣어주고, "Tags"의 경우에는 나중에 이 Runner로 빌드 요청을 전달하기 위한 "구분 문자열" 용도로 넣어주면 됩니다. 제 경우에는 그냥 "j5a"로 넣었고 이에 대해서는 Runner 구성 완료 후에 한 번 더 언급하게 될 것입니다. (참고로 "Description"과 "Tags"는 나중에 GitLab UI를 통해 모두 변경이 가능하므로 너무 크게 고민을 하지 않아도 됩니다.)<br /> <br /> 마지막으로 "executor"를 지정해야 하는데 .NET Framework 빌드 머신의 경우 대개 가상 머신(또는 물리 머신) 등으로 구성할 것이므로 "shell"을 지정하면 됩니다. 여기까지 구성이 완료되면 GitLab 프로젝트의 CI/CD 설정에서 다음과 같이,<br /> <br /> <img alt='gitlab_specific_runner_2.png' src='/SysWebRes/bbs/gitlab_specific_runner_2.png' /><br /> <br /> "hu3PeNxo" Runner가 구성된 것을 확인할 수 있습니다. 하지만, 아직 해당 문자열의 왼쪽 아이콘이 삼각형으로 둘러싸인 느낌표로 나오는데 Runner가 구성만 되었을 뿐 구동은 되지 않았기 때문입니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 일단 "register" 단계까지 완료했으면 Runner 실행 파일이 있는 폴더에는 "config.toml" 파일이 생성됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > D:\GitLab-Runner> <span style='color: blue; font-weight: bold'>dir /b</span> <span style='color: blue; font-weight: bold'>config.toml</span> gitlab-runner.exe D:\GitLab-Runner> <span style='color: blue; font-weight: bold'>type config.toml</span> concurrent = 1 check_interval = 0 [session_server] session_timeout = 1800 [[runners]] name = "MY PRODUCT Build" url = "https://my.testsrv.com:5000/" token = "hu3PeNxoEz1FwkQ9zSWK" executor = "shell" shell = "powershell" [runners.custom_build_dir] [runners.cache] [runners.cache.s3] [runners.cache.gcs] </pre> <br /> 보는 바와 같이 우리가 입력한 값들과 함께 executor로 등록한 "shell"이 "powershell"로 연결된 것을 볼 수 있습니다. 즉, 나중에 작성할 빌드 스크립트에 여러분들이 사용할 수 있는 명령어의 형식은 PowerShell이라는 의미입니다.<br /> <br /> 등록한 상태 정보를 기반으로 Runner를 구동하는 방법은 "run" 인자로 가능합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > D:\GitLab-Runner> <span style='color: blue; font-weight: bold'>gitlab-runner.exe run</span> Runtime platform arch=amd64 os=windows pid=2228 revision=1b659122 version=12.8.0 Starting multi-runner from D:\GitLab-Runner\config.toml... builds=0 Configuration loaded builds=0 listen_address not defined, metrics & debug endpoints disabled builds=0 [session_server].listen_address not defined, session endpoints disabled builds=0 </pre> <br /> 물론 이렇게 실행하면 로그아웃 시 프로그램이 종료되므로 NT 서비스로 등록하는 방법도 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > D:\GitLab-Runner> <span style='color: blue; font-weight: bold'>gitlab-runner.exe install</span> Runtime platform arch=amd64 os=windows pid=6572 revision=1b659122 version=12.8.0 </pre> <br /> 위와 같이 "install" 인자로 실행하면 "gitlab-runner"라는 이름의 NT 서비스가 Automatic 유형으로 등록되고, (시작은 아직 안 되어 있으므로) 명시적으로 "start" 인자로 시작하거나,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > D:\GitLab-Runner> <span style='color: blue; font-weight: bold'>gitlab-runner.exe start</span> Runtime platform arch=amd64 os=windows pid=6572 revision=1b659122 version=12.8.0 </pre> <br /> "서비스 관리자(services.msc)"를 통해 직접 시작해 줄 수 있습니다. 그럼, 해당 서비스 프로세스는 GitLab 서버에 연결하는 소켓을 하나 마련하고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp> <span style='color: blue; font-weight: bold'>netstat -ano | findstr :5000</span> <span style='color: blue; font-weight: bold'>TCP 192.168.100.50:27891 192.168.100.55:5000 ESTABLISHED 1080</span> </pre> <br /> 이후 GitLab 서버로부터의 빌드 신호를 처리하게 됩니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> Runner 구성은 이것으로 완료가 됩니다. 이제 실제로 프로젝트에 commit 했을 때 빌드가 되도록 만들어야 하는데요, 바로 이 과정을 연결해 주는 것이 GitLab 프로젝트의 "루트 폴더"에 위치한 ".gitlab-ci.yml" 파일입니다. (Visual Studio에서 구성한 솔루션인 경우, ".gitlab-ci.yml" 파일을 추가하면 "Solution Items" 논리 폴더에 위치하게 됩니다.) 간단하게 다음과 같은 식의 내용을 입력하고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > stages: - mybuild - mytest build_job: stage: mybuild script: - echo "build" <span style='color: blue; font-weight: bold'>tags: - j5a</span> test_job: stage: mytest script: - echo "test" <span style='color: blue; font-weight: bold'>tags: - j5a</span> dependencies: - build_job </pre> <br /> commit하면 GitLab 서버는 해당 프로젝트에 ".gitlab-ci.yml" 파일이 있으므로 이를 읽어 "tags"에 지정된, 위의 경우 "j5a"가 명시되었으므로 등록된 "Runners" 중에서 "j5a" 태그를 처리하도록 구성했던 Runner를 찾아 ".gitlab-ci.yml" 스크립트를 실행하라고 지시합니다. (당연히, 해당 스크립트에서 msbuild.exe를 실행하는 등의 빌드 및 테스트, 배포까지 모두 명시적으로 지정해야 합니다.)<br /> <br /> 그리고 그 결과는 GitLab 관리 페이지의 "CI / CD" / "Pipelines" 메뉴를 통해 다음과 같은 화면으로 yml 스크립트가 정상적으로 실행되었는지 상황을 쉽게 파악할 수 있습니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='gitlab_specific_runner_3.png' src='/SysWebRes/bbs/gitlab_specific_runner_3.png' /><br /> <br /> <hr style='width: 50%' /><br /> <br /> Runner의 경우 좀 더 상세한 출력을 보여주는 "-debug" 옵션이 있으므로 문제가 있을 때는 다음과 같이 실행하면 원인 파악에 도움이 될 것입니다.<br /> <br /> <pre style='height: 400px; margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > D:\GitLab-Runner> <span style='color: blue; font-weight: bold'>gitlab-runner.exe -debug run</span> Runtime platform arch=amd64 os=windows pid=6500 revision=1b659122 version=12.8.0 Starting multi-runner from D:\GitLab-Runner\config.toml... builds=0 Checking runtime mode GOOS=windows uid=-1 Configuration loaded builds=0 listenaddress: "" sessionserver: listenaddress: "" advertiseaddress: "" sessiontimeout: 1800 concurrent: 1 checkinterval: 0 loglevel: null logformat: null user: "" runners: - name: MY PRODUCT Build limit: 0 outputlimit: 0 requestconcurrency: 0 runnercredentials: url: https://my.testsrv.com:5000/ token: hu3PeNxoEz1FwkQ9zSWK tlscafile: "" tlscertfile: "" tlskeyfile: "" runnersettings: executor: shell buildsdir: "" cachedir: "" cloneurl: "" environment: [] preclonescript: "" prebuildscript: "" postbuildscript: "" debugtracedisabled: false shell: powershell custombuilddir: enabled: false referees: null cache: type: "" path: "" shared: false s3: serveraddress: "" accesskey: "" secretkey: "" bucketname: "" bucketlocation: "" insecure: false gcs: cachegcscredentials: accessid: "" privatekey: "" credentialsfile: "" bucketname: "" ssh: null docker: null parallels: null virtualbox: null machine: null kubernetes: null custom: null sentrydsn: null modtime: 2020-03-18T10:03:59.5144561+09:00 loaded: true builds=0 listen_address not defined, metrics & debug endpoints disabled builds=0 [session_server].listen_address not defined, session endpoints disabled builds=0 Feeding runners to channel builds=0 Starting worker builds=0 worker=0 Dialing: tcp my.testsrv.com:5000 ... Checking for jobs... nothing runner=hu3PeNxo Feeding runners to channel builds=0 Checking for jobs... nothing runner=hu3PeNxo Feeding runners to channel builds=0 Checking for jobs... nothing runner=hu3PeNxo Feeding runners to channel builds=0 ...[이후 반복]... </pre> <br /> 실행 후, GitLab 서버로부터 "job"을 체크하면서 기다리다가,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Checking for jobs... nothing runner=hu3PeNxo Feeding runners to channel builds=0 Checking for jobs... nothing runner=hu3PeNxo Feeding runners to channel builds=0 Checking for jobs... nothing runner=hu3PeNxo Feeding runners to channel builds=0 ...[이후 반복]... </pre> <br /> 새로운 commit이 발생하면 다음과 같이 Buid Job을 맡아 수행하고,<br /> <br /> <pre style='height: 400px; margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Feeding runners to channel builds=0 <span style='color: blue; font-weight: bold'>Checking for jobs... received job=13332 repo_url=https://my.testsrv.com:5000/testusr/testprj.git runner=hu3PeNxo</span> Processing chain chain-leaf=[0xc000034680 0xc000034c00 0xc000035180 0xc000035700] context=certificate-chain-build Certificate doesn't provide parent URL: exiting the loop Issuer=AddTrust External CA Root IssuerCertURL=[] Serial=1 Subject=AddTrust External CA Root context=certificate-chain-build Failed to requeue the runner builds=1 runner=hu3PeNxo Running with gitlab-runner 12.8.0 (1b659122) job=13332 project=132 runner=hu3PeNxo on MY PRODUCT Build hu3PeNxo job=13332 project=132 runner=hu3PeNxo Shell configuration: environment: [] dockercommand: - PowerShell - -NoProfile - -NoLogo - -InputFormat - text - -OutputFormat - text - -NonInteractive - -ExecutionPolicy - Bypass - -Command - '-' command: powershell arguments: - -noprofile - -noninteractive - -executionpolicy - Bypass - -command passfile: true extension: ps1 job=13332 project=132 runner=hu3PeNxo Using Shell executor... job=13332 project=132 runner=hu3PeNxo Waiting for signals... job=13332 project=132 runner=hu3PeNxo No referees configured job=13332 project=132 runner=hu3PeNxo Executing build stage build_stage=prepare_script job=13332 project=132 runner=hu3PeNxo Executing build stage build_stage=get_sources job=13332 project=132 runner=hu3PeNxo Feeding runners to channel builds=1 Appending trace to coordinator... ok code=202 job=13332 job-log=0-570 job-status=running runner=hu3PeNxo sent-log=0-569 status=202 Accepted update-interval=30s Executing build stage build_stage=restore_cache job=13332 project=132 runner=hu3PeNxo Executing build stage build_stage=download_artifacts job=13332 project=132 runner=hu3PeNxo Executing build stage build_stage=build_script job=13332 project=132 runner=hu3PeNxo Executing build stage build_stage=after_script job=13332 project=132 runner=hu3PeNxo Executing build stage build_stage=archive_cache job=13332 project=132 runner=hu3PeNxo Executing build stage build_stage=upload_artifacts_on_success job=13332 project=132 runner=hu3PeNxo Skipping referees execution job=13332 project=132 runner=hu3PeNxo Job succeeded duration=29.9556539s job=13332 project=132 runner=hu3PeNxo Appending trace to coordinator... ok code=202 job=13332 job-log=0-2065 job-status=running runner=hu3PeNxo sent-log=570-2064 status=202 Accepted update-interval=30s Submitting job to coordinator... ok code=200 job=13332 job-status= runner=hu3PeNxo Checking for jobs... nothing runner=hu3PeNxo Feeding runners to channel builds=0 Checking for jobs... received job=13333 repo_url=https://my.testsrv.com:5000/testusr/testprj.git runner=hu3PeNxo Processing chain chain-leaf=[0xc000034680 0xc000034c00 0xc000035180 0xc000035700] context=certificate-chain-build Certificate doesn't provide parent URL: exiting the loop Issuer=AddTrust External CA Root IssuerCertURL=[] Serial=1 Subject=AddTrust External CA Root context=certificate-chain-build Failed to requeue the runner builds=1 runner=hu3PeNxo Running with gitlab-runner 12.8.0 (1b659122) job=13333 project=132 runner=hu3PeNxo on MY PRODUCT Build hu3PeNxo job=13333 project=132 runner=hu3PeNxo Shell configuration: environment: [] dockercommand: - PowerShell - -NoProfile - -NoLogo - -InputFormat - text - -OutputFormat - text - -NonInteractive - -ExecutionPolicy - Bypass - -Command - '-' command: powershell arguments: - -noprofile - -noninteractive - -executionpolicy - Bypass - -command passfile: true extension: ps1 job=13333 project=132 runner=hu3PeNxo Using Shell executor... job=13333 project=132 runner=hu3PeNxo Waiting for signals... job=13333 project=132 runner=hu3PeNxo No referees configured job=13333 project=132 runner=hu3PeNxo Executing build stage build_stage=prepare_script job=13333 project=132 runner=hu3PeNxo Executing build stage build_stage=get_sources job=13333 project=132 runner=hu3PeNxo Feeding runners to channel builds=1 Executing build stage build_stage=restore_cache job=13333 project=132 runner=hu3PeNxo Appending trace to coordinator... ok code=202 job=13333 job-log=0-709 job-status=running runner=hu3PeNxo sent-log=0-708 status=202 Accepted update-interval=30s Executing build stage build_stage=download_artifacts job=13333 project=132 runner=hu3PeNxo Executing build stage build_stage=build_script job=13333 project=132 runner=hu3PeNxo Executing build stage build_stage=after_script job=13333 project=132 runner=hu3PeNxo Executing build stage build_stage=archive_cache job=13333 project=132 runner=hu3PeNxo Executing build stage build_stage=upload_artifacts_on_success job=13333 project=132 runner=hu3PeNxo Skipping referees execution job=13333 project=132 runner=hu3PeNxo Job succeeded duration=5.6489393s job=13333 project=132 runner=hu3PeNxo Appending trace to coordinator... ok code=202 job=13333 job-log=0-1590 job-status=running runner=hu3PeNxo sent-log=709-1589 status=202 Accepted update-interval=30s Submitting job to coordinator... ok code=200 job=13333 job-status= runner=hu3PeNxo Checking for jobs... nothing runner=hu3PeNxo Feeding runners to channel builds=0 Checking for jobs... nothing runner=hu3PeNxo Feeding runners to channel builds=0 Checking for jobs... nothing runner=hu3PeNxo </pre> <br /> ".gitlab-ci.yml" 스크립트 작업이 모두 완료되면 다시 "Checking for jobs..." 과정을 반복하게 됩니다.<br /> <br /> <hr style='width: 50%' /><br /> <a name='localsystem'></a> <br /> 명령행으로 직접 "gitlab-runner.exe run"을 실행했을 때는 빌드가 잘 되면서, NT 서비스로 수행하면 빌드가 실패할 수 있습니다. 왜냐하면 명령행의 경우 로그인 사용자 환경에서 동작하는 반면, 서비스로 등록된 "gitlab-runner"의 기본 계정은 "Local SYSTEM"이기 때문에 환경이 아주 다릅니다.<br /> <br /> 따라서, 이런 경우 서비스의 구동 계정을 "Local SYSTEM"에서 현재 로그인 계정으로 바꾸면 거의 모든 문제가 해결될 것입니다. 만약, Local SYSTEM 계정을 고집한다면 디버깅을 위해 "<a target='tab' href='https://www.sysnet.pe.kr/2/1/1153'>psexec</a>"를 이용해 Local System 계정으로 cmd.exe 창을 띄운 후,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp> <span style='color: blue; font-weight: bold'>psexec -s -i cmd.exe</span> </pre> <br /> 그 환경에서 "gitlab-runner.exe run"을 수행하거나, 실패한 yml 스크립트 안의 명령어를 직접 수행해 보는 식으로 테스트할 수 있습니다. 가령, msbuild.exe가 로그인 환경에서는 잘 동작할 수 있어도 Local System 계정 환경에서는,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\Windows\system32> <span style='color: blue; font-weight: bold'>msbuild</span> 'msbuild' is not recognized as an internal or external command, operable program or batch file. </pre> <br /> 명령어를 찾을 수조차 없는 등의 상황이 비일비재할 것입니다. ^^<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1482
(왼쪽의 숫자를 입력해야 합니다.)