顯示具有 GitLab 標籤的文章。 顯示所有文章
顯示具有 GitLab 標籤的文章。 顯示所有文章

星期五, 6月 15, 2018

GitLab Jenkins Integrated Authentication

這兩個服務除了各自有許多驗證方式之外,若要輕量化地使用者單一帳號管理,只要在 GitLab 自建帳號,再搭配 Jenkins 上有個 GitLab Authentication Plugin,即可達到通用的目的。首先來開兩部機器:
  • docker run -d --name gitlab -p 80:80 gitlab/gitlab-ce
  • docker run -d --name jenkins -p 8080:8080 jenkins/jenkins:lts
在 GitLab 除了要建帳號給使用者之外,還有設定的工作,註冊一個應用程式,如圖:
完成後,有些東西要抄起來:
在 Jenkins 外掛 GitLab Authentication Plugin 後的設定用得上:
以上其實還算單純的整合,在 Mac 硬是搞了好久,重點是那些位址究竟是要讓 Client 能找到 Server,還是 Server 要找到另一部 Server?因為 Mac 上的 Host (Client) 網路上無法看到 Container (Servers),但 Linux 沒這問題,Windows 則依這篇小加一條繞送規則即可。

星期一, 12月 11, 2017

git sparse checkout

有時候我們只想拿 Git 上的一兩個檔案,但整個儲存庫很大,或歷史悠久,實在有點浪費。首先有個下指令 sparse checkout 指定要取的路徑,也可以搭配深度省略不需要的歷史:
  • git init <repository_name>
  • cd <repository_name>
  • git config core.sparseCheckout true
  • echo '/path/to/file1' > .git/info/sparse-checkout
  • echo '/path/to/files/*' >> .git/info/sparse-checkout
  • git remote add origin https://<repository_url>
  • git pull --depth 1 origin master
指令有點多,用 api 看有沒有好一點?以無需認證的 GitHub repository 為例:
  • curl -H 'Accept: application/vnd.github.v3.raw' -O -L https://api.github.com/repos/:owner/:repo/contents/:path
需認證的 GitLab 比較麻煩些:
  • curl -H 'PRIVATE-TOKEN: <token>' https://<git_host>/api/v4/projects/:id/repository/files/<url_encoded_file_path>/raw?ref=master -o output.ext
    • token 要取一個 scope 包含 api,尚在有效期限內的 personal access token
    • project id 可在專案的一般設定找到,通常是個數字
    • 以專案第一層 a 目錄下的 b.txt 為例,url_encoded_file_path 會是 a%2Fb.txt
    • master 是分支名,也可以是 tag 或 commit id
    • output.ext 是輸出檔名

星期五, 5月 05, 2017

Jenkins Node @ CentOS 6.7 can't fetch git via GIT_ASKPASS

最近忙著將 Jenkins 的工作分散到幾個 Node 上,其中一個要去 Git 抓原始碼總是卡在 git fetch 401,但若在 Terminal 下 git fetch ... https://user@githost... 又都沒問題?
我想錯誤應是來自於 Jenkins 的 Git Plugin,從 log 來反推它的決策過程:
  • > git --version
  • using GIT_ASKPASS to set credentials
  • > git fetch ...
以上是指出 Git Plugin 下了 git --version 命令取得結果之後,決定用 GIT_ASKPASS 這種比較新的做法來傳遞帳密,但我的 git --version 是 1.7.1,其實並不支援 GIT_ASKPASS(有個說法是 1.7.1.1 才開始),參考這篇到 WANDisco's CentOS repository 裝上新版 git 立刻就解決了。

星期三, 3月 29, 2017

Docker-based GitLab hostname

如果「冒然地」使用 Docker 起一部新的 GitLab 伺服器,而沒有太注意參數的話,日後專案的 URL 可能含有一段像亂碼的主機名稱。有兩種解法:
  • 事前:docker run -h yourHostName ...
  • 事後:編輯 /etc/gitlab/gitlab.rb 其中一行 external_url 'http://yourHostName',當然也別忘了 gitlab-ctl reconfigure 套用生效。

星期五, 8月 26, 2016

GitLab 8.x Upgrade

系統升級本是一件大事,理論上流程應該是「備份、下載、升級、重啟、成功或還原」,但在我所處的困苦環境,想備份都沒有硬碟空間,所以只好冒著失敗的風險直接升(當然還是有整機還原這條後路),只要三個步驟,大約三分鐘:
  • sudo yum install gitlab-ce
  • gitlab-ctl reconfigure
  • gitlab-ctl restart

星期三, 6月 15, 2016

修正 GitLab 發系統通知信需要密碼的錯誤

不論是前任管理員或網路上都有此誤解,澄清相關設定如下即可:
  • 寄件伺服器接受網域內互寄不需密碼驗證
  • gitlab_email_from 必須是真正的郵件位址,不能是 noreply@nodomain
  • 不設定 smtp_user_name
  • 不設定 smtp_password
  • 不設定 smtp_authentication
  • 其他 smtp 相關設定依官網範例

星期五, 8月 07, 2015

bitnami.com GitLab on CentOS

這個裝在虛擬機上的,只有一位使用者的版控,卻經常有使用者反映不能 Push,錯誤訊息是「non-fast forward」,意思是「有別人的 Push 沒有 Pull 下來,又想把自己的 Commit 給 Push 上去」,哪來的「別人」?
研究了半天,果真如此,有圖為證:
原來從 bitnami.com 抓來的 GitLab 有個隱形使用者,即使是相同的帳號,透過 GitEye 的是 centos,透過 GitLab Web UI 上來的是 Administrator,這是「兩個不同的人」,但在 GitLab 管理介面列所有使用者,又只有 Administrator 一人而已。
雖然我們管不到 centos 這個人,不過有辦法讓他們合一:找到 centos 的電子郵件帳號,設成 Administrator 的第二個電子郵件帳號。

星期二, 4月 21, 2015

bitnami.com 救了我

花了好幾天才研究出如何安裝成功的 GitLab 竟然有個重要功能失效,放棄了!幸好有別人找到這個網站。

星期六, 4月 18, 2015

困而學之

Ruby? Rails? 這兩個我不懂也不想懂,反正能正常運作就是了。但遇到 GitLab 那個很難打的預設密碼「好像」被我自己改壞掉,不得不想辦法重置的時候,幸好參考這一篇的內容救了回來。
糟糕!我好像常這樣。論語是這麼說的:

生而知之者上也;學而知之者次也;困而學之又其次也;困而不學,民斯為下矣。

GitLab 開機後自動執行

因為 32 位元的 GitLab 沒有安裝套件,一切都得自己來。在奮鬥許久後,終於新建了一個使用者 gitlab,抓完原始碼放在家目錄下的 gitlabhq,建置安裝完成。啟動的指令如下:
  • sudo /etc/rc.d/init.d/mysqld start
  • sudo /etc/rc.d/init.d/redis start
  • cd && cd gitlabhq && bundle exec rails s -e production
想要開機後自動執行,可以將指令放在 /etc/rc.d/rc.local 這個檔案,大致需要以下這些:
  • # exec >/var/log/rc.local.log 2>&1
  • /etc/rc.d/init.d/mysqld start
  • /etc/rc.d/init.d/redis start
  • PATH=$PATH:/usr/local/bin
  • cd /home/gitlab/gitlabhq && bundle exec rails s -e production &
部份需要改變的原因是執行身分不同、路徑不同、環境變數不同,還有背景執行。如果需要偵錯,也可以打開被註解的那一行。

星期五, 4月 17, 2015

Install GitLab on CentOS 6 32bit

GitLab 只提供 64 位元的安裝套件,沒想到在 32 位元的環境這麼難裝,基本上參考一篇快滿三年的文章,再修改一些步驟以解決問題,紀錄一下:

# add current user to sudoers

# www connected

sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

sudo sed -i "s/mirrorlist=https/mirrorlist=http/" /etc/yum.repos.d/epel.repo

sudo yum -y groupinstall 'Development Tools' 'Additional Development'

sudo yum -y install readline readline-devel ncurses-devel gdbm-devel
glibc-devel tcl-devel openssl-devel curl-devel expat-devel db4-devel
byacc gitolite sqlite-devel gcc-c++ libyaml libyaml-devel libffi
libffi-devel libxml2 libxml2-devel libxslt libxslt-devel libicu
libicu-devel system-config-firewall-tui python-devel redis

curl -O http://ftp.ruby-lang.org/pub/ruby/2.2/ruby-2.2.2.tar.gz

tar xzvf ruby-2.2.2.tar.gz

cd ruby-2.2.2

./configure --enable-shared --disable-pthread

sudo make && sudo make install

sudo yum -y install qt-devel qtwebkit-devel

export PATH=$PATH:/usr/lib/qt4/bin

alias sudo="sudo env PATH=$PATH"

sudo gem update --system

sudo gem update

sudo gem install rails

sudo adduser --shell /bin/bash --create-home --home-dir /home/gitlab gitlab

sudo passwd gitlab

su gitlab

ssh-keygen -t rsa

# keep default filename, empty for no passphrase

exit

sudo adduser --system --shell /bin/sh --comment 'gitolite'
--create-home --home-dir /home/git git

sudo cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub

sudo passwd git

su git

gl-setup ~/gitlab.pub

# When the prompt appears edit the provided file (it's in a vi-Editor)
and set $REPO_UMASK to 0007

exit

sudo usermod -a -G git gitlab

sudo chmod -R g+rwX /home/git/repositories/

sudo chmod 770 /home/git

sudo service sshd start

su gitlab

ssh git@localhost

exit

exit

su -

curl https://bootstrap.pypa.io/ez_setup.py | python

exit

sudo easy_install pip

sudo pip install pygments

sudo gem install bundler

sudo visudo

# add: gitlab    ALL=(ALL)    ALL

sudo gem install charlock_holmes

sudo yum -y install cmake

sudo gem install rugged -v '0.21.4'

su gitlab

cd && git clone https://github.com/gitlabhq/gitlabhq.git

cd gitlabhq

bundle install

sudo yum -y install mysql-server

sudo yum -y install nodejs

sudo /etc/init.d/mysqld start

mysql_secure_installation

mysql -u root -p

mysql> CREATE DATABASE gitlab CHARACTER SET UTF8;

mysql> GRANT ALL PRIVILEGES ON gitlab.* TO 'gitlabusr'@'localhost'
IDENTIFIED BY 'supersecret' WITH GRANT OPTION;

mysql> quit

sudo nohup redis-server > /dev/null

# hit CTRL+Z

bg

cp ~/gitlabhq/config/database.yml.mysql ~/gitlabhq/config/database.yml

cp ~/gitlabhq/config/gitlab.yml.example ~/gitlabhq/config/gitlab.yml

vim ~/gitlabhq/config/database.yml

# In database.yml you have to edit the production settings of your
database (at the very top of the file). You have to change the
database-name, username and password.

RAILS_ENV=production rake db:setup

RAILS_ENV=production rake db:seed_fu

bundle exec rails s -e production

# visit http://localhost:3000 with root / 5iveL!fe

以上。日後要啟動 GitLab 服務的步驟也整理在此:

# Terminal #1

sudo /etc/rc.d/init.d/mysqld start

redis-server

# Terminal #2

su gitlab

cd

cd gitlabhq

bundle exec rails s -e production