ubuntu 16.04.2 源码安装gitlab并且利用runner持续集成
参考原档:https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md#using-https
本章只写重要的
Gitlab安装包括设置一下组件:
- Packages / Dependencies
- Ruby
- Go
- Node
- System Users
- Database
- Redis
- GitLab
- Nginx
1. Packages / Dependencies(可有可无的更新)
# run as root! apt-get update -y apt-get upgrade -y apt-get install sudo -y
安装所需的软件包(需要编译Ruby和Ruby gem的本机扩展):
sudo apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate python-docutils pkg-config cmake
如果要使用Kerberos进行用户身份验证,请安装libkrb5-dev:
sudo apt-get install libkrb5-dev
注意:如果你不知道Kerberos是什么,你可以假设你不需要它。
确保您安装了正确版本的Git
# Install Git sudo apt-get install -y git-core # Make sure Git is version 2.8.4 or higher git --version
系统打包Git是否太老了?从源文件中删除并编译。
# Remove packaged Git sudo apt-get remove git-core # Install dependencies sudo apt-get install -y libcurl4-openssl-dev libexpat1-dev gettext libz-dev libssl-dev build-essential # Download and compile from source cd /tmp curl --remote-name --progress https://www.kernel.org/pub/software/scm/git/git-2.8.4.tar.gz echo '626e319f8a24fc0866167ea5f6bf3e2f38f69d6cb2e59e150f13709ca3ebf301 git-2.8.4.tar.gz' | shasum -a256 -c - && tar -xzf git-2.8.4.tar.gz cd git-2.8.4/ ./configure make prefix=/usr/local all # Install into /usr/local/bin sudo make prefix=/usr/local install # When editing config/gitlab.yml (Step 5), change the git -> bin_path to /usr/local/bin/git
注意:为了接收邮件通知,请确保安装邮件服务器。默认情况下,Debian随exim4一起提供,但Ubuntu并没有出现问题。推荐的邮件服务器是后缀,您可以安装它:
sudo apt-get install -y postfix
然后选择“Internet站点”,然后按确认确认主机名。
2.Ruby
注意:目前支持的Ruby(MRI)版本为2.3.x。GitLab 9.0支持Ruby 2.1.x。
查看Ruby的版本:
sudo ruby -v
删除旧的Ruby 1.8如果存在:
sudo apt-get remove ruby1.8
下载Ruby并编译它:
mkdir /tmp/ruby && cd /tmp/ruby curl --remote-name --progress https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.3.tar.gz echo '1014ee699071aa2ddd501907d18cbe15399c997d ruby-2.3.3.tar.gz' | shasum -c - && tar xzf ruby-2.3.3.tar.gz cd ruby-2.3.3 ./configure --disable-install-rdoc make sudo make install
然后安装Bundler Gem:
sudo gem install bundler --no-ri --no-rdoc
3.Go
# Remove former Go installation folder sudo rm -rf /usr/local/go curl --remote-name --progress https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz echo '1862f4c3d3907e59b04a757cfda0ea7aa9ef39274af99a784f5be843c80c6772 go1.8.3.linux-amd64.tar.gz' | shasum -a256 -c - && \ sudo tar -C /usr/local -xzf go1.8.3.linux-amd64.tar.gz sudo ln -sf /usr/local/go/bin/{go,godoc,gofmt} /usr/local/bin/ rm go1.8.3.linux-amd64.tar.gz
4.Node
由于GitLab 8.17,GitLab需要使用node> = v4.3.0来编译javascript资源,而且使用“>> = v0.17.0来管理javascript依赖关系。在许多发行版中,官方软件包版本提供的版本已过期,因此我们需要通过以下命令进行安装:
# install node v7.x curl --location https://deb.nodesource.com/setup_7.x | sudo bash - sudo apt-get install -y nodejs # install yarn curl --location https://yarnpkg.com/install.sh | bash -
如果如上述安装时出现问题,就去官网查看相应的地方,会有解决方法,相信我,我成功了。
node:https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions
yarn:https://yarnpkg.com/en/docs/install/
5.System Users
git为GitLab 创建一个用户:
sudo adduser --disabled-login --gecos 'GitLab' git
6.Database
我们建议使用PostgreSQL数据库。对于MySQL,请查看MySQL安装指南,官网相应的地方也有链接。
1.安装数据库包:
sudo apt-get install -y postgresql postgresql-client libpq-dev postgresql-contrib
2.为GitLab创建数据库用户:
sudo -u postgres psql -d template1 -c "CREATE USER git CREATEDB;"
3.创建pg_trgm扩展名(GitLab 8.6+需要):
sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
4. 创建GitLab生产数据库并授予数据库所有权限:
sudo -u postgres psql -d template1 -c "CREATE DATABASE gitlabhq_production OWNER git;"
5.尝试使用新用户连接到新数据库:
sudo -u git -H psql -d gitlabhq_production
6.检查pg_trgm分机是否启用:
SELECT true AS enabled FROM pg_available_extensions WHERE name = 'pg_trgm' AND installed_version IS NOT NULL;
如果分机启用,则会产生以下输出:
enabled --------- t (1 row)
7.退出数据库会话:
gitlabhq_production> \q
7.Redis:
GitLab至少需要Redis 2.8。
如果您使用的是Debian 8或Ubuntu 14.04及更高版本,那么您可以简单地安装Redis 2.8:
sudo apt-get install redis-server
如果您使用的是Debian 7或Ubuntu 12.04,请遵循备用Redis安装的特殊文档(官网对应处)。完成后,请遵循指南的其余部分。
# Configure redis to use sockets sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.orig # Disable Redis listening on TCP by setting 'port' to 0 sed 's/^port .*/port 0/' /etc/redis/redis.conf.orig | sudo tee /etc/redis/redis.conf # Enable Redis socket for default Debian / Ubuntu path echo 'unixsocket /var/run/redis/redis.sock' | sudo tee -a /etc/redis/redis.conf # Grant permission to the socket to all members of the redis group echo 'unixsocketperm 770' | sudo tee -a /etc/redis/redis.conf # Create the directory which contains the socket mkdir /var/run/redis chown redis:redis /var/run/redis chmod 755 /var/run/redis # Persist the directory which contains the socket, if applicable if [ -d /etc/tmpfiles.d ]; then echo 'd /var/run/redis 0755 redis redis 10d -' | sudo tee -a /etc/tmpfiles.d/redis.conf fi # Activate the changes to redis.conf sudo service redis-server restart # Add git to the redis group sudo usermod -aG redis git
8.GitLab
# We'll install GitLab into home directory of the user "git" cd /home/git
克隆来源
# Clone GitLab repository sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 8-7-stable gitlab
版本不要装最新的,最好是差1~2个大版本。
# Go to GitLab installation folder cd /home/git/gitlab # Copy the example GitLab config sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml # Update GitLab config file, follow the directions at top of file sudo -u git -H editor config/gitlab.yml
#修改host:localhost 为host:你的域名或者ip,我改的是192.168.222.131
#修改bin_path:/usr/bin/git 为bin_path:/usr/local/bin/git # Copy the example secrets file sudo -u git -H cp config/secrets.yml.example config/secrets.yml sudo -u git -H chmod 0600 config/secrets.yml # Make sure GitLab can write to the log/ and tmp/ directories sudo chown -R git log/ sudo chown -R git tmp/ sudo chmod -R u+rwX,go-w log/ sudo chmod -R u+rwX tmp/ # Make sure GitLab can write to the tmp/pids/ and tmp/sockets/ directories sudo chmod -R u+rwX tmp/pids/ sudo chmod -R u+rwX tmp/sockets/ # Create the public/uploads/ directory sudo -u git -H mkdir public/uploads/ # Make sure only the GitLab user has access to the public/uploads/ directory # now that files in public/uploads are served by gitlab-workhorse sudo chmod 0700 public/uploads # Change the permissions of the directory where CI job traces are stored sudo chmod -R u+rwX builds/ # Change the permissions of the directory where CI artifacts are stored sudo chmod -R u+rwX shared/artifacts/ # Change the permissions of the directory where GitLab Pages are stored sudo chmod -R ug+rwX shared/pages/ # Copy the example Unicorn config sudo -u git -H cp config/unicorn.rb.example config/unicorn.rb # Find number of cores nproc # Enable cluster mode if you expect to have a high load instance # Set the number of workers to at least the number of cores # Ex. change amount of workers to 3 for 2GB RAM server sudo -u git -H editor config/unicorn.rb # Copy the example Rack attack config sudo -u git -H cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb # Configure Git global settings for git user # 'autocrlf' is needed for the web editor sudo -u git -H git config --global core.autocrlf input # Disable 'git gc --auto' because GitLab already runs 'git gc' when needed sudo -u git -H git config --global gc.auto 0 # Enable packfile bitmaps sudo -u git -H git config --global repack.writeBitmaps true # Configure Redis connection settings sudo -u git -H cp config/resque.yml.example config/resque.yml # Change the Redis socket path if you are not using the default Debian / Ubuntu configuration sudo -u git -H editor config/resque.yml
重要注意事项:请确保同时编辑gitlab.yml和unicorn.rb匹配您的设置。
配置GitLab数据库设置
# PostgreSQL only: sudo -u git cp config/database.yml.postgresql config/database.yml # MySQL only: sudo -u git cp config/database.yml.mysql config/database.yml # MySQL and remote PostgreSQL only: # Update username/password in config/database.yml. # You only need to adapt the production settings (first part). # If you followed the database guide then please do as follows: # Change 'secure password' with the value you have given to $password # You can keep the double quotes around the password sudo -u git -H editor config/database.yml # PostgreSQL and MySQL: # Make config/database.yml readable to git only sudo -u git -H chmod o-rwx config/database.yml
Install Gems
注意:从捆绑器1.5.2开始,您可以调用bundle install -jN(N处理器内核的数量),并享受并行宝石安装,并在完成时间内可以有显着差异(约60%)。检查你的核心数量nproc。有关更多信息,请查看此信息。首先确保你有一个bundle => 1.5.2(run bundle -v),因为它解决了在1.5.2 中修复的一些问题。
# For PostgreSQL (note, the option says "without ... mysql")(过程会比较慢,不要急,会成功的,网上说的那些都是骗人的。) sudo -u git -H bundle install --deployment --without development test mysql aws kerberos # Or if you use MySQL (note, the option says "without ... postgres") sudo -u git -H bundle install --deployment --without development test postgres aws kerberos
注意:如果要使用Kerberos进行用户身份验证,请kerberos在上述--without选项中省略。
安装GitLab Shell
GitLab Shell是专门为GitLab开发的SSH访问和存储库管理软件。
# Run the installation task for gitlab-shell (replace `REDIS_URL` if needed): sudo -u git -H bundle exec rake gitlab:shell:install REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production SKIP_STORAGE_VALIDATION=true # By default, the gitlab-shell config is generated from your main GitLab config. # You can review (and modify) the gitlab-shell config as follows: sudo -u git -H editor /home/git/gitlab-shell/config.yml(此处修改时需要将gitlab_url:http://127.0.0.1:8080/)
安装gitlab-workhorse
GitLab-Workhorse使用GNU Make。以下命令行将安装GitLab-Workhorse,/home/git/gitlab-workhorse其中是推荐的位置。
sudo -u git -H bundle exec rake "gitlab:workhorse:install[/home/git/gitlab-workhorse]" RAILS_ENV=production(这个安装方式会出现问题,然后我从网上找了另一个方式)
在gitlab的上层目录git下安装:
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-workhorse.git
cd gitlab-workhorse
sudo -u git -H make
您可以通过将其作为额外参数来指定不同的Git仓库:
sudo -u git -H bundle exec rake "gitlab:workhorse:install[/home/git/gitlab-workhorse,https://example.com/gitlab-workhorse.git]" RAILS_ENV=production
初始化数据库并激活高级功能
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production # Type 'yes' to create the database tables. # When done you see 'Administrator account created:'
注意:您可以通过在环境变量提供他们设置管理员/ root密码和电子邮件,GITLAB_ROOT_PASSWORD并GITLAB_ROOT_EMAIL分别如下所示。如果您没有设置密码(并且设置为默认密码),请等待公开GitLab到公共网络,直到安装完成,并且您已经首次登录到服务器。在第一次登录时,您将被迫更改默认密码。
sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD=yourpassword GITLAB_ROOT_EMAIL=youremail(这个可以不设置,无所谓)
安装Init脚本
下载init脚本(将是/etc/init.d/gitlab):
sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab
如果您使用非默认文件夹或用户副本进行安装并编辑默认文件:
sudo cp lib/support/init.d/gitlab.default.example /etc/default/gitlab
如果您将GitLab安装在另一个目录或默认设置之外,您应该更改这些设置/etc/default/gitlab。不要编辑,/etc/init.d/gitlab因为它将在升级时更改。
使GitLab启动时启动:
sudo update-rc.d gitlab defaults 21
安装Gitaly
# Fetch Gitaly source with Git and compile with Go sudo -u git -H bundle exec rake "gitlab:gitaly:install[/home/git/gitaly]" RAILS_ENV=production
您可以通过将其作为额外参数来指定不同的Git仓库:
sudo -u git -H bundle exec rake "gitlab:gitaly:install[/home/git/gitaly,https://example.com/gitaly.git]" RAILS_ENV=production
接下来,确保配置gitaly:
# Restrict Gitaly socket access sudo chmod 0700 /home/git/gitlab/tmp/sockets/private sudo chown git /home/git/gitlab/tmp/sockets/private # If you are using non-default settings you need to update config.toml cd /home/git/gitaly sudo -u git -H editor config.toml
如果你安装出错,请看后面信息,我安装的是gitlab8-7:Gitaly(在GitLab 9.0中引入)是一种为Git存储库提供高级RPC访问权限的服务。从GitLab 9.3起,它仍然是一个可选的组件,范围有限。
访问Git存储库(gitlab-rails,gitlab-shell,gitlab-workhorse)的GitLab组件充当Gitaly的客户端。最终用户无法直接访问Gitaly。
安装Logrotate
sudo cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab
检查应用程序状态
检查GitLab及其环境是否正确配置:
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
编译资产
sudo -u git -H yarn install --production --pure-lockfile sudo -u git -H bundle exec rake gitlab:assets:compile RAILS_ENV=production NODE_ENV=production(这个有可能会出错,但是问题不大)
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production(这个不错,如果没有尝试需要修复的信息就完成了)
编译GetText PO文件
sudo -u git -H bundle exec rake gettext:compile RAILS_ENV=production(这个也是有问题的没事)
启动您的GitLab实例
sudo service gitlab start # or sudo /etc/init.d/gitlab restart
Nginx
注意: Nginx是GitLab正式支持的Web服务器。如果您不能或不想使用Nginx作为Web服务器,请查看GitLab配方。
安装
sudo apt-get install -y nginx
站点配置
复制示例站点配置:
sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab
确保编辑配置文件以匹配您的设置。另外,请确保您将路径与GitLab相匹配,特别是如果为“git”用户以外的用户安装:
# Change YOUR_SERVER_FQDN to the fully-qualified # domain name of your host serving GitLab. # # Remember to match your paths to GitLab, especially # if installing for a user other than 'git'. # # If using Ubuntu default nginx install: # either remove the default_server from the listen line # or else sudo rm -f /etc/nginx/sites-enabled/default sudo editor /etc/nginx/sites-available/gitlab(可以该一下server_name,我改的是本机的ip)
测试:
sudo nginx -t
如果此时报错如下:
nginx: [emerg] a duplicate default server for 0.0.0.0:80 in /etc/nginx/sites-enabled/gitlab:29 nginx: configuration file /etc/nginx/nginx.conf test failed
解决方法:
bill@bill:/home/git/gitlab$ sudo rm -rf /etc/nginx/sites-enabled/default
bill@bill:/home/git/gitlab$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
最后再检查一下:
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production
并且重启服务:
sudo service nginx restart
sudo service gitlab restart
还有就是一定要关闭防火墙,除非你自己制定规则,省去麻烦直接关闭吧
sudo service ufw stop
接下来就是搭建gitlab-runner,持续集成
可以参考:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner
https://docs.gitlab.com/runner/register/index.html
1.添加GitLab的官方资料库:
# For Debian/Ubuntu curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash # For RHEL/CentOS curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
2.安装gitlab-ci-multi-runner
:
# for DEB based systems root@host:# apt-get install gitlab-ci-multi-runner=1.11.2 # for RPM based systems root@host:# yum install gitlab-ci-multi-runner-1.11.2-1
3.注册
sudo gitlab-ci-multi-runner register
注册就可以看看官网的资料:https://docs.gitlab.com/runner/register/index.html
4.一些操作
参考:https://help.aliyun.com/document_detail/52857.html,还有自己新建一个项目的时候也会给出参数便于你设置。