벡터 기초 2
https://tpree.tistory.com/207 벡터 기초벡터는 크기와 방향으로 이루어졌다. 크기는 length 또는 Magnitude 라고 한다. 방향은 Normalized 로 표시한다. 왜냐하면 벡터에서 크기요소를 1로 고정해서 영향을
tpree.tistory.com
https://github.com/gxtxhm/VectorPracticeWithJenkins
간단하게 CI/CD를 실습해보기로 했다.
게임잡에서 요구사항이나 우대사항 중 젠킨스라는 단어가 보였기 때문이다.
빌드 및 배포 자동화라는 개념이며 뭐든 해보는 것이 중요하다 생각해 실습해보았다.
젠킨스를 위해 여러가지 설치를 하고 윈도우 계정 정보를 입력한다.
이는 젠킨스가 백그라운드로 작업하기 위해서라고 한다.
젠킨스를 설치하고 빌드 자동화를 먼저 해본다.
D:\2022.3.57f1\Editor\Unity.exe" ^
-quit -batchmode ^
-projectPath "D:\UnityProject\VectorPractice" ^
-executeMethod BuildScript.BuildWindows ^
-logFile build.log
빌드를 하라는 명령어이다.
이 때 executeMethod는 Assets/Editor/ 안에 스크립트를 만들고 함수를 만들면 된다.
Editor안에 있어야 인식할 수 있다.
public class BuildScript
{
public static void BuildWindows()
{
string[] scenes = { "Assets/Scenes/SampleScene.unity" };
BuildPipeline.BuildPlayer(
scenes,
"Build/MyGame.exe",
BuildTarget.StandaloneWindows64,
BuildOptions.None
);
}
}
스크립트의 코드이다.
빌드를 해보았으니 젠킨스의 새 아이템을 만들고 직접해보았다.
먼저 freestyle로 진행했는데 add build step 에 명령어를 입력하고 now build 를 해보니 정말 빌드가 되었다.
확실히 너무 편리하긴 하다.
물론 혼자하는 입장에서 체감이 확 느껴지는 정도는 아니지만 협업이라고 생각하면 너무 편리할 것이라고 생각된다.
다음은 깃허브 연결이다.
누군가 깃허브에서 push -> 자동으로 빌드 및 디스코드 알림보내기 까지가 이번 프로젝트이다.
푸시한 걸 감지하기 위해 webhook 이란 기능을 사용한다.
따라서 깃허브 프로젝트에서 webhook을 추가해야하는데 이 때, 로컬에선 localhost 로 접근하지만, 외부에선 젠킨스에 접근할 수 없으므로 포트포워딩을 진행해야한다. 외부에서 접근 가능한 url로 변경해주는 건데 ngrok 를 알아보면 된다.
이를 webhook으로 추가하고 젠킨스에 이를 연결한다.
트리거에서 GitHub hook trigger for GITScm polling 를 체크하고 소스코드관리에서 git 저장소를 연결하면 된다.
그리고 push를 하면 자동으로 build 되는 것을 볼 수 있다.
마지막으로 discord 알림이다.
slack을 현업에서 사용한다지만 실습진행을 위해 discord로 대체했다.
이 경험으로 개인적인 프로젝틀르 진행할 때 discord와 젠킨스를 이용해 자동화하면 될 것 같다.
본론으로 돌아와서 discord 알림을 위해 discord 채널 설정을 보면 webhook 설정이 있는데 여기서 관련 코드를 복사하고
기존 젠킨스 아이템에 add build step 으로
powershell
-ExecutionPolicy Bypass
-Command "[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
$headers = @{ 'Content-Type' = 'application/json' };
$body = @{ content = ' Unity build succeeded! `n
Output: Builds/Windows/MyGame.exe`n please verify!' } |
ConvertTo-Json -Compress; Invoke-RestMethod
-Uri 'https://discord.com/api/webhooks/1234/LyUF7-3ogYCq-hJpGJ'
-Method Post -Headers $headers -Body ([System.Text.Encoding]::UTF8.GetBytes($body))"
이런식으로 추가하면 body 내용이 알림으로 그 채널에 도착하는 것을 볼 수 있다.
근데 여기서 빌드 성공, 실패를 분기하기 위해서 파이프라인을 이용해야했다.
새 아이템을 만들고
pipeline {
agent any
triggers {
githubPush()
}
environment {
DISCORD_WEBHOOK = 'https://discord.com/api/webhooks/1/LgUrWGVQkyUF7-3odCq-h82J'
}
stages {
stage('Checkout') {
steps {
git url: 'https://github.com/gxtxhm/VectorPractice.git', branch: 'master'
}
}
stage('Unity Build') {
steps {
bat '"D:\\\\2022.3.57f1\\\\Editor\\\\Unity.exe" -quit -batchmode -projectPath "D:\\\\UnityProject\\\\VectorPractice" -executeMethod BuildScript.BuildWindows -logFile build.log'
}
}
}
post {
success {
echo ' Build succeeded, sending Discord message.'
bat 'powershell -ExecutionPolicy Bypass -Command "[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; $headers = @{ \\"Content-Type\\" = \\"application/json\\" }; $body = @{ content = \\"Build succeeded.\\nOutput: Builds/Windows/MyGame.exe\\nQA please verify.\\" } | ConvertTo-Json -Compress; Invoke-RestMethod -Uri \\"%DISCORD_WEBHOOK%\\" -Method Post -Headers $headers -Body ([System.Text.Encoding]::UTF8.GetBytes($body))"'
}
failure {
echo ' Build failed, sending Discord message.'
bat 'powershell -ExecutionPolicy Bypass -Command "[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; $headers = @{ \\"Content-Type\\" = \\"application/json\\" }; $body = @{ content = \\"Build failed.\\nPlease check the Jenkins logs.\\" } | ConvertTo-Json -Compress; Invoke-RestMethod -Uri \\"%DISCORD_WEBHOOK%\\" -Method Post -Headers $headers -Body ([System.Text.Encoding]::UTF8.GetBytes($body))"'
}
}
}
이런식으로 명령어를 입력하면 된다.
이렇게 알림을 받아볼 수 있다.
협업할 일이 생기면 써봐야겠다.
깃 푸시했을 때 매번 뭐가 올라왔는지 확인하는 것도 그렇고 뭐 올렸다고 확인하는 것도 번거로운데 slack이나 디스코드에
알림을 보내놓으면 편할 것 같다.
안드로이드 빌드나 빌드파일 압축 등 뭔가 더 있는데 추후 진행해봐야겠다.
또 이걸 하기 위해 세팅과정이 꽤나 번거로웠는데 알기로는 docker 가 이런 것들을 한번에 세팅해주는 기능이 있다고 한다.
docker도 공부해봐야겠다.