npm install -g 실행시

> npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules

과 같은 에러가 발생함

 

  • 원인 - nodejs global 패키지 설치 시 위의 경로에 설치되는데 저 위치는 관리자 권한을 가진 유저만 접근가능하기 때문에 해당 에러가 발생하는 것
  • 해결 - sudo chown -R $(whoami) /usr/local/lib/node_modules 명령어 실행

 

 

 

 

'웹 개발' 카테고리의 다른 글

Google Font 사용법  (0) 2020.06.15

Mac 과 Windows 간 개발 시 Line Ending 이 서로 달라 코드 공유시 여러 문제가 발생한다.

 

이를 해결하기 위해 각 OS별 config설정

 

  • Windows
    • $ git config --global core.autocrlf true
    • Windows는 CRLF 를 사용하므로 저장소에서 가져올때 LF를 CRLF로 변경하고, 보낼때는 LF로 변경하도록 true로 설정
  • Linux, Mac
    • $ git config --global core.autocrlf input
    • 리눅스, 맥, 유닉스는 LF만 사용하므로 input으로 설정

'Git' 카테고리의 다른 글

자주 쓰는 명령어  (0) 2020.03.13
자료형 형식 범위 크기
sbyte SByte -128 ~ 127  8bit (= 1byte)
byte Byte 0~255  8bit (= 1byte)
short Int16 -32,768 ~ 32,767 16bit (= 2byte)
ushort UInt16 0 ~ 65,535 16bit (= 2byte)
int Int32 -2,147,483,648 ~ 2,147,483,647 32bit (= 4byte)
uint UInt32 0 ~ 4,294,967,295 32bit (= 4byte)
long Int64 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 64bit (= 8byte)
ulong UInt64 0 ~ 18,446,744,073,709,551,615 64bit (= 8byte)
float Single +-1.5e-45 ~ +-3.4e38 32bit
double Double +-5.0e-324 ~ +-1.7e308  64bit
decimal Decimal +-1.0 * 10^-28 ~ +-7.9 * 10^28 128bit

'프로그래밍 기본' 카테고리의 다른 글

자료구조별 시간복잡도  (0) 2020.09.01
  추가 검색 삭제 인덱스접근 비고
Array O(n) O(n) O(n) O(1) 순차접근
LinkedList O(1) O(n) O(n) O(n) 순차접근
List O(1) O(n) O(n) O(1) 순차접근
Stack O(1) - O(1) - 순차접근
Queue O(1) - O(1) - 순차접근
Dictionary O(1) O(1) O(1) - 랜덤접근
SortedDictionary O(log n) O(log n) O(log n) - 랜덤접근
HashSet O(1) O(1) O(1) - 랜덤접근
SortedSet O(log n) O(log n) O(log n) - 랜덤접근

'프로그래밍 기본' 카테고리의 다른 글

C# 자료형  (0) 2020.09.01

젠킨스의 파이프라인을 사용하기 위해선 필수적으로 알아야 하는 스크립트로서 Pipeline Syntax 의 영어압박을 느끼시는 분들을 위한 간단한 사용법을 공유해본다

 

먼저 pipeline 을 선언하고 안에서 agent 를 설정하는데 범용적으로 사용하려면 any가 가장 낫다. (여러가지 설정가능하지만 ...)

pipeline {
	agent any
    
    stages {
    	steps {
        
        ...
        }
    }
}

저 안에서 stages 와 step 을 선언하는게 가장 기본형태이다.

 

  • Parameter 전달받기
    • 웹 스크립트이다 보니 js와 유사한 부분이 많은데, 여기서도 파라미터는 ${params.너의파라미터이름} 으로 값을 얻어올 수 있음
  • const 선언
    • 만약 위에서 agent 를 any로 선언하면 상관 없지만 그렇지 않다면 script 블럭 내부가 아니라면 def 사용 불가능
    • 아래처럼 environment로 선언 후 이름 선언 = 초기화 형태로 정의하고, 아래에서는 ${}로 사용하면 해당 값을 사용할 수 있다.
environment {
    너의파라미터이름 = 0
    너의파라미터이름 = 'string'
    너의파라미터이름 = false
}
  • Steps 안에서 할 수 있는 것
    • build job
      • 가장 중요한 명령어로서 job을 실행한다.
      • 아래처럼 잡 이름을 적고 파라미터를 전달해야 한다면 [ ] 블럭 안에다가 갯수만큼 전달한다. (콤마로 구분)
      • js에 대한 개념이 있으신 분은 알겟지만 문자열에 변수를 담고 싶다면 큰따옴표를 써서 "random string : ${name}" 형태로 써야 한다.  변수가 포함되어 있지 않은 문자열이면, 작은 따옴표만 써도 됨
build job : 'job name', parameters: [
    string(name: 'name', value: 'value'),
    string(name: 'name', value: 'value')
]
  • script 블럭
    • 개발자들의 친구인 조건문, 변수 선언을 할수 있는 블럭. script 블럭 외부에서는 조건문을 쓸 수 없다.
script {
    def variable = ''
    if (a == b)
    {
        variable = 'a'
    }
    else
    {
        variable = 'b'
    }
}
  • 함수 선언
    • 일반적인 형태와 같다
    • 유의할 점은 매개변수 전달시 스트링은 대문자로 시작한다.
String MethodName(String ddd)
{
    ...
    
    return ''
}
  • 심화 과정
    • 굳이 job을 만들지 않아도 build step에 포함되는 플러그인을 직접 호출할 수 있다
    • 호출하고자 하는 클래스 이름은 어디에서 알 수 있냐면, 플러그인 github의 README.md 에서 확인할 수 있고, 플러그인은 메이븐으로 만들므로 github의 소스코드를 열여보면 어떤 변수명이 허락되는지, 호출가능한 클래스이름은 무엇인지 확인가능하다.
step([$class: '호출하고자 하는 클래스 이름', 
    해당 클래스의 매개변수 이름: 전달할 값, (매개변수가 여러개면 갯수만큼 추가)
    ])

 

'Jenkins' 카테고리의 다른 글

Jenkins Unity Build  (0) 2020.08.21

Jenkins는 CI(지속적 통합) 툴의 일종으로 여러 개발자들의 작업내용을 git 등의 저장소에 업로드 하면 이를 감지하여 배포 작업 및 자동화 테스트 등을 주기적으로 진행하는 서비스이다.

Jenkins 설치

Windows - Jenkins Download Page 에서 플랫폼에 맞는 installer 다운로드

Mac - brew를 통해 설치

$ brew install jenkins

Mac - Service 시작

$ brew services start jenkins

http://localhost:8080 접속

 

최초 접속 시 아래와 같은 화면이 나오는데, 현재 젠킨스를 설치하는 계정의 홈디렉토리 경로에 초기 비밀번호를 기록했으니 입력하라는 내용

 

해당 경로의 파일을 열어 내용을 복사한 후 붙여넣기 하자

Mac 일 경우에는 cat 명령어로 출력한 후 이를 복사붙여넣기 하면 된다

 

어떤 방식으로 설치할 것인지 묻는다. 주요 플러그인이 포함된 채로 설치할지 하나하나 직접 선택해서 설치할지 선택 (여기서는 첫번째인 Install suggested plugins 선택)

그 후 관리자 계정을 만드는 화면으로 이동한다

  1. 계정명 : 로그인 아이디
  2. 암호 : 패스워드
  3. 이름 : 닉네임 (로그인시 프로필에 노출)
  4. 이메일 주소 : 알림 있을씨 받을 이메일 주소 (optional)

다음과 같은 화면이 나오면 관리자 계정으로 로그인

Setting

플러그인 설치

 

Jenkins 메뉴에서 Manage Jenkins -> Manage Plugins 에서 필요한 플러그인을 다운로드 하자

  • Unity3d plugin - 유니티 빌드에 필요
  • Git client plugin - git을 통한 소스관리에 필요 (push, pull 등)
  • Google Cloud Storage plugin - 추출된 번들을 firebase storage에 올리기 위해 필요
  • Xcode integration - xcode 빌드에 필요
  • Pipeline - Jenkins 빌드를 script로 제어하기 위해 필요
  • Slack Notification Plugin - 빌드가 성공적으로 완료됐을시 알림을 위해 필요
  • Google Drive Uploader - 공식 플러그인 아님, apk나 ipa 파일을 구글드라이브에 업로드하기 위해 필요

Process

 

기본적으로 유니티나 xcode를 직접 열지 않고 빌드하려면 Command Line Interface (CLI) 를 이용하면 되고 Jenkins가 기본으로 제공하는 Shell Script 를 이용하면 자동빌드는 가능하다.

 

단지 위 플러그인이 필요한 이유는 CLI 를 쉽게 쓸 수 있도록 일정한 View Interface를 제공해주기 때문

 

Jenkins는 모든 작업이 Job 으로 이루어져 있고 Pipeline 이 여러 job을 감싸는 구조이다

 

이를 pipeline script 라는 언어를 통해 컨트롤 할 수 있으며, git을 통해 버전관리도 가능

  • Job 생성
  • New Item 선택

  • Freestyle project 선택하고 이름 입력

  • Build Step 추가
    • 해당 Job이 실행할 스텝을 추가하면 되는데 여기에는 Unity 빌드를 등록하거나 Xcode 빌드를 등록하는 등 job이 실제 실행할 동작들을 명시한다.
    • 여러 Step이 있을 경우 Top Down 방식으로 진행됨

  • Invoke Unity3d Editor

  • Unity3d installation name - 유니티가 설치된 경로를 설정
  • Jenkins의 Global Tool Configuration에 가보면 Unity3d 항목이 있다. 여기서 job에 노출될 이름과 설치 경로를 설정하고 installation을 추가해야만 해당 항목에서 선택할 수 있다

  • Editor command line argument - 유니티는 CLI를 위한 다양한 argument를 제공하므로 여기에 argument를 명시한다
    • Unity CLI Manual
    • e.g) -quit -batchmode -nographics -projectPath YOUR_PATH -executeMethod YOUR_METHOD
  • Xcode
    • General build settings
    • Development Team ID - 애플 개발자 계정에 등록된 ID

team ID

  • Configuration  - Debug나 Release 입력
  • Xcode Schema File - 특정 스키마파일 경로인데 유니티에서 iOS로 빌드시 자동생성되는스키마 네임은 Unity-iPhone 이므로 입력
  • Generate Archive - 빌드테스트가 아닌 ipa 파일 추출이 목적이므로 체크
  • Pack application, build and sing .ipa - 체크
  • Export method - ipa파일의 용도 명시인데, 단순 개발목적이라면 development, TestFlight 등 AppStore 등록이 목적이라면 app-store 기입
  • .ipa filename pattern - 추출될 ipa파일 이름. 추후에 설명할테지만 ${환경변수} 형태로 환경변수를 미리 설정해놓고 그 값에 접근할 수 있는데, ${BASE_NAME} 이나 ${VERSION} 등 여러 환경변수를 제공한다
  • Output directory - .ipa 파일이 추출될 경로. 비어놓을시 기본경로 (xcode project/build)에 추출됨
  • 나머지 값들은 필수가 아니거나 입력하지 않음

  • Code sigining & OS X keychain options - Automatic sigining 설정

  • Advanced Xcode build options
    • Xcode Workspace File - 유니티에서 iOS 빌드를 통해 Xcode Project 생성시 만약 Pod Project가 포함되어 있다면, 이 항목에 Unity-iPhone 를 입력한다. 특이한 점은 경로 모두 제외하고 이름만 입력하면 되는데 경로는 아래 항목인 Xcode Project Directory에서 참조하거나 Jenkins의 job 저장소에서 참조하기 때문이다
    • Xcode Project Directory - 유니티에서 빌드된 Xcode Project의 경로를 설정해준다

  • 환경변수 (Global Environment Variables)
    • jenkins 에서는 동일한 값의 중복사용을 방지하고자 C# 의 static 변수처럼 미리 Key, Value를 설정해놓고 항목이나 script에서 이를 참조할 수 있는데 이때 사용하는 형식이 ${변수} 형태이다
    • 또한 아래에서 설명하겠지만 job 별로 parameter 값을 입력받아 내부에서 접근할 수 있는데 이때에도 {변수}형태를 쓰면 된다
    • 환경변수 설정은
      • Manage Jenkins
      • Configure System
      • Global properties
      • Environment Variables 체크 -> Add 클릭 -> Key, Value 설정

  • 전달변수 (Parameter)
    • job 은 실행시에 값을 입력받을 수 있는데 이를 Parameters 라 한다job 설정 부분에서 This project is parameterized 를 체크하면 여러 Parameter형태를 등록할 수 있는데 Name 란에 입력된 값은 Build Step 단계에서 ${Name}으로 접근할 수 있고, 하나라도 Parameter가 있으면 job 선택시에 왼쪽 메뉴에 Build with Parameters 메뉴가 활성화된다

  • 이를 선택하면 Parameter 형태에 따라 입력필드가 생기는데 기본 종류에 더해 플러그인을 통해 Parameter 타입을 추가할 수도 있다

 

Pipeline Script

이렇게 위에서 구성한 Job들을 통해 빌드를 진행하는데, XR 프로젝트처럼 여러 job이 연쇄적으로 실행되어 최종 결과물을 뽑아야 할 경우를 대비해 Jenkins는pipeline 을 제공하고 pipeline은 별도의 script를 통해 이러한 job들을 생성, 관리 할 수 있다.

  • Pipeline  생성 - Jenkins -> New Item -> Pipeline 선택

  • Definition
  • pipeline script - 직접 스크립팅
    • syntax (문법) 에 대해선 양이 방대하므로 해당 문서에서는 다루지 않음
  • Pipeline Syntax
    • pipline script from SCM - 원격저장소에서 스크립트를 읽어서 실행

 

Custom Plugin

  • Jenkins 의 plugin 페이지에 제공되지 않는 비공식 플러그인이 필요할때가 있다. Google Drive Upload 가 그 예인데, Manage Plugin 페이지에는 없지만 github나 오픈소스 사이트에 Jenkins 플러그인이 있다면, 우리는 직접 이 프로젝트를 빌드해서 Jenkins에서 사용해야 한다
  • Jenkins의 모든 plugin은 Maven 이라는 아파치의 자바용 프로젝트 관리 도구로 만드는데, 이를 사용하기 위해서는 command 창을 열어 사이트에서 받은 소스중 pom.xml 이 있는 root 폴더로 이동한 뒤에 오픈소스 사이트의 README.md 나 가이드 문서에 나온대로 명렁어를 실행하면 된다. (mvn clean 이나 mvn compile, mvn test 등..)
  • 실행한 뒤 hpi 파일을 뽑아내야 한다

  • mvn 명령어를 사용하기 위해선 Maven 을 설치해야 함
  • Maven Install
  • jenkins 는 hpi 파일을 plugins folder에 넣어주고 재시작하면 설치 가능 목록에 추가한 Custom Plugin이 노출됨

'Jenkins' 카테고리의 다른 글

Pipeline Script  (0) 2020.08.21

VS 윈도우 버전은 Tools -> Import and Export Settings... 를 통해 Editor설정값들을 내보낼 수가 있는데 VS Mac 에서는 무슨 이유에선지 해당 메뉴가 없다.

 

처음엔 계정을 같은걸로 로그인 하면 셋팅값도 동기화되지 않을까 했는데 그렇진 않았고, 따로 설정값이 저장되어있는 파일을 찾아서 수동으로 넣어줘야 함

 

폰트 정보나 Editor 정보값이 들어있는 파일 : ~/Library/Preferences/VisualStudio/버전/MonoDevelopProperties.xml

키 바인딩 정보가 들어있는 파일 : ~/Library/VisualStudio/버전/KeyBindins/Custom.mac-kb.xml

 

저 두파일을 복사해서 다른 Mac 의 동일한 경로에 붙여넣기 해주면 끝

종류는 두가지가 있는데 (Enterprise 와 Community) 개인 학습용도이므로 여기는 Community 기준으로 작성합니다.

 

또한, tgz파일을 받아 설치하는 방법과 brew를 통한 설치를 제공하는데, 가이드 문서에서 추천한 brew를 통한 설치를 작성합니다.

 

가이드 문서는 아래와 같지만 우리는 한국인이니까 풀어서 써보겠습니다.

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/

 

Install MongoDB Community Edition on macOS — MongoDB Manual

 

docs.mongodb.com

준비물 : brew

brew는 이미 설치되어 있다고 가정합니다. mac에 brew를 설치하는 방법은 검색해보면 너무나도 많이 나오기 때문에 생략

 

다음 명령어들을 터미널을 통해 실행시킵니다.

 

$ brew tap mongodb/brew

 

$ brew install mongodb-community@4.2

@뒤에 붙는 숫자는 버전으로서 맨 위 명령어가 성공적으로 실행되면 설치가능 버전이 나옵니다. 그중에서 원하는 버전명을 기입합니다. (작성일 기준 최신버전이 4.2임)

 

$ brew services start mongodb-community@4.2

실질적인 mongo DB 실행

 

$ brew services stop mongodb-community@4.2

해당 명령어는 mongo DB를 멈추고 싶을때 사용

 

설치는 여기까지가 끝입니다만, 글작성의 동기이기도 한 한가지 문제가 있었습니다.

가이드 문서에 보면 터미널에서 $mongo 나 $mongod 명령어가 잘 실행되는데 본인 mac에서 해당 명령어를 찾을 수 없다면서 실행이 되지 않았습니다.

zsh: command not found mongod

zsh: command not found mongo

 

가이드 문서 어디를 찾아봐도 해당 문제에 대해 명시하지 않아 약간의 삽질 끝에 해결하여 공유합니다.

 

$ export PATH="$PATH:/usr/local/Cellar/mongodb-community@4.2/4.2.8/bin"

해당 위치로 가보면 mongod.exe 와 mongo.exe가 보일것입니다. 이 위치를 PATH로 지정해주면 어떤 위치에서도 mongod, mongo를 실행할 수 있으므로 위 명령어는 저 위치를 PATH 로 지정해주는 방법입니다.

본인이 zsh를 사용하고 있다면, ~/.zshrc 파일을 열어 위 명령어를 추가하시면 됩니다 (파일 내 위치 상관없이 아무데나 붙여넣기 하세요)

아니라면, 해당 터미널의 path를 지정하는 파일을 찾아서 거기에 추가 하면 됩니다.

 

물론 저 @뒤 숫자는 각자가 설치한 버전명이 될것이므로 변경될 수 있습니다.

 

 

'웹 개발 > MongoDB' 카테고리의 다른 글

Shell Command  (0) 2020.09.29

+ Recent posts