백업 대상 레포 주소 A

 

 

백업을 하기 위해 새로 만들어 놓은 레포 주소 B

 

 

git clone --mirror A

cd A

git remote set-url origin B

git push --mirror

 

 

출근해서 코드 를 작성후에 평소와 같은 git작업




git status ~ 체크 


git add * 


git commit -m"솰라 솰라 이번주의 변경사항~"


git push origin master 


Error




??? 왜지? 잘되던 git이?


확인해보니 서버를 옮겼었습니다. 기존에 123.15 였다면 지금은 105.17 인거죠 gitlab의 경우 외부 접속을 하기 위한 


지정으로




sudo -s vi /etc/gitlab/gitlab.rb 


에 external_url 로 지정을 해놓을수가 있습니다.  이부분을 수정했습니다.

## GitLab URL

##! URL on which GitLab will be reachable.~~ 

##! For more details on configuring external_url see:

##! https://docs.gitlab.com/om~~

external_url 'http://111.111.105.17:8888'




저장 후 나가기를 위해서 ( ESC + :  > wq 입력 엔터 )  


gitlab을 사용하시는 분들은 알겠지만 db로 postgresql  rails  WAS도 nginx 등등 여러가지들을 한꺼번에 


구동시켜주어야 합니다. 이 구동을 위해서 gitlab-ctl 이라는 요녀석이 있는데 이녀석이 에 명령어로


command line 에서  gitlab-ctl reconfigure 를 입력하게되면 gitlab.rb를 시작으로 configure 파일들을 다시 읽음으로


적용과 함께 재시작 해주는 기능을 합니다.


그래서 


sudo -s gitlab-ctl reconfigure


Error  : not found command gitlab-ctl 


?? 알수 없는 명령어라니  6개월간 잘쓰던 git이 이상해졌습니다.


일단 gitlab-ctl 이 명령어가 없는거라면 환경변수(env_path) 설정이 문제일수 있으니 바이너리 먼저 찾아 보도록 합시다


find / -name 'gitlab-ctl'


result : nothing to do 


OMG!! 어떻게 된 일일까요??? (-__-) !  원인 파악이 잘되지않습니다. 해당 서버는 공용 서버(shared Server) TT 


기존에 설치된 ce버전으로 업그레이드를 시도해보았습니다.


sudo -s yum -y install gitlab-ce -> gitlab -ce upgrade


Error: nothing to do 


search sentence list


gitlab-ctl 을 찾기 위해서 여러가지 검색 조건을 찾아서 검색을 해보았습니다.


gitlab-ctl only install


git bin directory has been removed


gitlab start without gitlab-ctl 


gitlab-ctl error


gitlab-ctl not exist 등등


... etc


마지막으로 시도한  (last challenge)


gitlab-official home page에 있던  gitlab-ee upgrade입니다.


// 패키지 fork 


curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash


// gitlab EE upgrade


sudo yum install gitlab-ee -y


gitlab-ctl









이제 정상적으로 나오네요 감격 입니다. ㅜㅜ



이런일이 나도 복구 할수 있도록 백업 본을 하나 떠 놓도록 하겠습니다.


gitlab-rake gitlab:backup:create

해당 백업의 위치는 /var/opt/gitlab/backups/$timeStamp_version-eegitlab_backup.tar 로 있게 됩니다.



다시 gitlab 을 쓸수 있게 되었네요 ee로 업그레이드하는 바람에 좀더 최신의 느낌이긴 하지만요





다른 타 프로젝트들도 다행히 다 잘살아있네요







git을 쓰다보면 예전에 만들어 놓은 폴더를 날리고 싶은데


gitlab 같은 웹페이지에서는


파일 자체 삭제는 제공하지만  폴더 통째로 날리는 법은 제공을 안해주는 것 같습니다.


그래서 어떻게 하면 지울수 있을까 하다가


찾아본 방법이 있습니다.


우선 git CLI 에서 git pull 을 해야 될거 같으니 이거 먼저 합시다 


git pull


git rm -r --cached [날리고싶은 폴더]


> 만약에 

[폴더] TestA

[폴더] TestB

[폴더] TestC

[폴더] TestD

[파일] .gitignore

[파일] README.md


이형식인데

A,B를 git에서 제거하고 싶다!


git rm -r --cached TestA

git rm -r --cached TestB


하게되면 현재 두 폴더에 대한 캐시가 날아가게 됩니다.( 없다는것 처럼 인식 )


git commit -m"TestA TestB 삭제"


.gitignore에서 저 위에 폴더 실제로 삭제 되진 않았기 때문에


.gitignore 파일


/TestA

/TestB


위와 같이 .gitignore파일을 작성 후


git push origin master


!! 짜잔 해당 폴더가 없어졌네요



** 번외 편 폴더 추가 

// 폴더 생성

mkdir addFolder


// 생성된 폴더 안에 .gitkeep 생성 // git은 폴더만은 인식 하지 못하기 때문에 파일을 넣어 줌

touch addFolder/.gitkeep


// git status 에서 인식이 되기 때문에 추가 가능 폴더를 추가

git add addFolder


// 마스터 푸쉬!

git push origin master


포스팅 읽어 주셔서 


감사합니다.






안녕하세요 오늘은 gitlab 에있는 웹훅 (webhook) 기능을 사용하다 발생한 이슈에 대해서 작성 하려고 합니다.


최신 버전 GitLab 에서 같은 서버에있는 CI(Jenkins) 에 webhook 을 요청시에는


Internal Server Error 500 이 나타납니다.


일단 해당 이슈는 ssrf 관련 이슈이기 때문에 gitlab ssrf 라고 검색 하여도 충분한 결과를 얻을수는 있을 겁니다.


ssrf이슈인지 파악이 안됐었.. ㅜ


해당 내용 설명에 앞서 ssrf에 대해서 간단하게 작성하자면


SSRF ( Server - Side - Request - Forgery ) 서버 요청 위조 

CSRF ( Client - Side - Request - Forgery ) - 클라이언트 요청 위조

SSRF는 CSRF 와 달리 서버가 직접 호출해서 발생하는 문제입니다.  서버가 직접 요청하는 바람에 외부에서 내부에 있는 리소소스 등 접근해서 서버 직접 제어가 가능해지기 때문에 해당 의 경우 SSRF의 위험성이 있기 때문에


Jenkins 서버와 GitLab이 같은 서버에 위치할때 루프백 (자기자신) 으로 요청하게 되면 SSRF 가 발생하게됩니다.


gitlab webhook 은 기본적으로 내부 서버 요청을 서버가 직접 하는것들을 SSRF 이슈로 인해 허용하지 않기 때문입니다.


그래서 기본적으로 gitlab 생성후 webhook 을 내부 같은 서버에 있는 jenkins(CI)에 호출하게되면 500 Internal Server Error 가 발생합니다.


우선 gitlab 업데이트 노트를 보겠습니다.



SSRF 이슈때문에 설정을 변경하여야 한다고 되어있습니다.


GitLab 에 접속합니다.  (ROOT 계정)


루트 계정으로 접속하게되면 위와같이 admin Area 가 있습니다. 해당 스패너를 클릭합시다.




최하단에보면 Settings 라고 있습니다.


그리고 우측에서 쭉 내리다보면


Outbound requests가 있습니다.

Expand 해 주신 후에

Allow requests to the local network from hooks and services 

체크 해줍시다.





자 이제 gitlab을 재시작 하고 webhook 을 테스트 해보면 정상적으로 됨을 확인 하실수 있습니다.


gitlab 시작 및 종료


sudo -s gitlab-ctl start

sudo -s gitlab-ctl stop


gitlab 재 설정 후 재 시작


sudo -s gitlab-ctl reconfigure


// gitlab 기본 설정 

https://ipex.tistory.com/entry/gitlab-기본-설정?category=768899




감사합니당~


나와 있는 그대로 마스터에서 마스터로 푸쉬를 하려고 하니까 에러가 났습니다.

 

 

일단 해결을 봐야하기 때문에

 

새로 브랜치를 만들어야 하는데 만들기전에 브랜치명이 겹치지 않도록 현재 및 리모트 저장소에 

 

있는 브랜치를 확인 합니다.

 

git branch [ Local Repo 에 있는 Branch 목록 보기 ]
git branch -r [ Remote Repo 에 있는 Branch 목록 보기 ]
git branch -a [ Local, Remote 전부 에 있는 Branch 목록 보기 ]
git branch -r [ Remote Repo 에 있는 Branch 목록 보기 ]
git branch -a [ Local, Remote 전부 에 있는 Branch 목록 보기 ]

앞서 있던 브랜치중 없는 브랜치를 새로 만듭니다. 

git branch newBranch

새로 만든 브랜치로 이동 합니다.

git checkout newBranch

해당 이동된 브랜치에서

git commit -m"New Branch"

git push

 

하게되면 master에 바로 붙는것이 아닌 branch 가 새로 생겨나게 됩니다. 

 

기존에

 

----- master* 

----- master* 형식이였다면

 

 

----- master* ----- new Branch

 

----- master*

 

형식이 되었습니다.

 

자 이제 해당 브랜치를 푸쉬 했기 때문에 master에 서 merge request를 해주어야 합니다.

 

gitlab을 사용한다면 머지 리퀘스트를 바로 확인 하실수 있지만 그렇지 않다면

 

git merge [브랜치] 를 master에 가서 newBranch 로 해준다.

 

 

 

 

 

 

 

git을 아직 일주일도 안되서 쓴지 명령어가 외워지질 않아 계속 쓰면서 외워 보려고합니다.


최초 실행 시 이름 및 이메일 설정  후 확인

git config --glboal user.name "GDL"
git config --global user.email gdl@example.com
git config --list

git Clone 

git clone http://192.11.111.11/myproject.git

// 현재 브랜치를 확인 합니다.


git branch -v 

// 현재 브랜치와 마스터 브랜치를 비교하여 보여준다. (pull 인 경우는 떙겨오지만 확인만 합니다.)


git fetch 

기존 git주소가 바뀌었을 경우 예

http://111.111.11.1:8888 이였는데

포트번호가

8082로 바뀌는 경우 git remote 위치도 바뀌어야 합니다.

현재 리모트 레포 주소 

git remote -v 


확인 후 리모트 주소 변경

git remote set-url origin http://111.111.11.1:8082/home/project/myproject.git


git remote -v 로 확인 


   git stash [ 아직 커밋 하지 않은 일을 워킹 디렉토리에 저장한다. ]
   git tag  [ 히스토리에서 특정 부분을 북마크 ] 
   git log  [ 프로젝트 히스토리를 시간의 역순으로 보여준다. Ref를 넘겨주지않을 경우 HEAD가 가리키는 브랜치의 히스토리를 보여준다. ]







gitlab 을 설치하다보면 자주 사용하여야 하는 명령어 또는 설정 파일들 위치가 매번 하지 않다 보니


자꾸 까먹게 되어서 필요하는 경우만 다 적어 놓도록 하려고 합니다.


gitlab 시작 및 종료


sudo -s gitlab-ctl start

sudo -s gitlab-ctl stop


gitlab 재 설정 후 재 시작


sudo -s gitlab-ctl reconfigure


url 에 대한 정보 확인(gitlab UI app configuration)

sudo -s vi /etc/gitlab/gitlab.rb 


//


## GitLab URL

##! URL on which GitLab will be reachable.

##! For more details on configuring external_url see:

##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external....

밑 부분에

external_url 'http://ip:port'


을 입력후 저장한다.


그러면 클라이언트에서 붙을때 http://ip:port 로 붙을수 있습니다.


*주의점은 저장 후 stop start 말구 sudo -s gitlab-ctl reconfigure 로 재시작 하자 



gitlab 이 오류날때 확인해야 하는 액세스 로그 (gitlab accesslog.txt)

sudo -s vi /var/log/gitlab/gitlab-rails/production.log

해당 액세스 로그에 맨 밑을 확인하면 가장 최근 의 gitlab로그를 확인 가능합니다.


vi 말고도 cat이나 tail을 사용할 수도 있습니다.


급한대로 사용시에는


tail을 사용하여서 가져올수 있는데


sudo -s tail /var/log/gitlab/gitlab-rails/production.log 라고 입력시


맨 끝에서 10개의 행을 보여줍니다.


더 많은 행을 보고 싶을 경우

-n 옵션 (--lines=K)

tail -n 30(30개행)


-c 옵션 (--bytes=K)

tail -c 300 (마지막에서 300bytes)


-f 옵션 (--follow) -F 도있습니다. 해당의 경우는 --follow=name --retry

tail -f 를 쓰게 되면 해당 액세스 로그를 실시간으로 모니터링하게 되며 종료는 ctrl - c 로 종료합니다.


 이외에도


--version --quite --sleep 등등 이 있습니다.  tail --help 참조


 

설치 후 접속시에는


처음에 설정하게 되는 계정명은 root 입니다. 







+ Recent posts