持续集成环境Gitlab CI的官方安装过程解析
持续集成环境是一个非常重要的工具,在分工合作的项目中有着举足轻重的作用。公司最近要用Gitlab,需要配套的持续集成环境。研究了官方的文档,感觉官方的文档不是很明了。各种修改过后终于成功了。为了大家安装时不再重蹈覆辙,特写这篇博客。博客内容大部分都是官方文档的内容,我仅仅是在一些容易失误的地方做了写解释。官方文档可能会不时更新。但这些注意的点应该变化不是很大。官方安装文档网址:https://github.com/gitlabhq/gitlab-ci/wiki 进入后点击相应的版本。
Requirements:
- GitLab 5.3+
Setup:
1. Packages / Dependencies
sudo
is not installed on Debian by default. Make sure your system is up-to-date and install it.
sudo apt-get update sudo apt-get upgrade
Note: Vim is an editor that is used here whenever there are files that need to be edited by hand. But, you can use any editor you like instead.
# Install vim sudo apt-get install -y vim
Install the required packages:
sudo apt-get install -y wget curl gcc checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libreadline6-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev openssh-server git-core libyaml-dev postfix libpq-dev libicu-dev sudo apt-get install redis-server
2. Ruby
Download Ruby and compile it:
mkdir /tmp/ruby && cd /tmp/ruby curl --progress http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.tar.gz | tar xz cd ruby-1.9.3-p392 ./configure make sudo make install
Install the Bundler Gem:
sudo gem install bundler --no-ri --no-rdoc
3. Prepare the database
You can use either MySQL or PostgreSQL.
MySQL
# Install the database packages sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev # Login to MySQL $ mysql -u root -p # Create the GitLab CI database mysql> CREATE DATABASE IF NOT EXISTS `gitlab_ci_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`; # Create the MySQL User change $password to a real password 这里的 $password密码需要替换为你希望的密码
mysql> CREATE USER 'gitlab_ci'@'localhost' IDENTIFIED BY '$password';
# Grant proper permissions to the MySQL User mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlab_ci_production`.* TO 'gitlab_ci'@'localhost';
PostgreSQL
# Install the database packages sudo apt-get install -y postgresql-9.1 libpq-dev # Login to PostgreSQL sudo -u postgres psql -d template1 # Create a user for GitLab. (change $password to a real password) 这里的 $password密码需要替换为你希望的密码 template1=# CREATE USER gitlab_ci WITH PASSWORD '$password'; # Create the GitLab production database & grant all privileges on database template1=# CREATE DATABASE gitlab_ci_production OWNER gitlab_ci; # Quit the database session template1=# \q # Try connecting to the new database with the new user sudo -u git -H psql -d gitlab_ci_production
4. GitLab CI user:
sudo adduser --disabled-login --gecos 'GitLab CI' gitlab_ci
5. Get code
cd /home/gitlab_ci/ sudo -u gitlab_ci -H git clone https://github.com/gitlabhq/gitlab-ci.git cd gitlab-ci sudo -u gitlab_ci -H git checkout 3-0-stable
6. Setup application
# Edit application settings sudo -u gitlab_ci -H cp config/application.yml.example config/application.yml sudo -u gitlab_ci -H vim config/application.yml #下边是application.yml的例子defaults: &defaults
allowed_gitlab_urls: - 'http://earth.bao.ac.cn/gitlab/' #这是你的gitlab的地址 #- 'https://dev.gitlab.org/' #这两个注释掉 #- 'https://staging.gitlab.org/' development: <<: *defaults neat_setting: 800 test: <<: *defaults #allowed_gitlab_urls: #这个注释掉 # - 'http://demo.gitlab.com/' production: <<: *defaults allowed_gitlab_urls: - 'http://earth.bao.ac.cn/gitlab/'#这是你的gitlab的地址
# Create a sockets directory sudo -u gitlab_ci -H mkdir -p tmp/sockets/ sudo chmod -R u+rwX tmp/sockets/
Install gems
sudo -u gitlab_ci -H bundle --without development test postgres --deployment sudo -u gitlab_ci -H bundle --without development test postgres --deployment
Setup db
# mysql sudo -u gitlab_ci -H cp config/database.yml.mysql config/database.yml # postgres sudo -u gitlab_ci -H cp config/database.yml.postgres config/database.yml # Edit user/password sudo -u gitlab_ci -H vim config/database.yml
以下是database.yml例子
# # PRODUCTION # production: adapter: mysql2 encoding: utf8 reconnect: false database: gitlab_ci_production pool: 5 username: gitlab_ci password: "travelchallenge" #这里设置你的先前设置的gilab_ci的密码 # host: localhost # socket: /tmp/mysql.sock # # Development specific # development: adapter: mysql2 encoding: utf8 reconnect: false database: gitlab_ci_development pool: 5 username: debian-sys-maint password: "r0VpzdDxG33ruj0m" # socket: /tmp/mysql.sock # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: &test adapter: mysql2 encoding: utf8 reconnect: false database: gitlab_ci_test pool: 5 username: debian-sys-maint password: "r0VpzdDxG33ruj0m" # socket: /tmp/mysql.sock
# Setup tables sudo -u gitlab_ci -H bundle exec rake db:setup RAILS_ENV=production # Setup scedules # sudo -u gitlab_ci -H bundle exec whenever -w RAILS_ENV=production
7. Install Init Script
Download the init script (will be /etc/init.d/gitlab_ci):
sudo wget https://raw.github.com/gitlabhq/gitlab-ci/master/lib/support/init.d/gitlab_ci -P /etc/init.d/ sudo chmod +x /etc/init.d/gitlab_ci
Make GitLab start on boot:
sudo update-rc.d gitlab_ci defaults 21
Start your GitLab instance:
sudo service gitlab_ci start # or sudo /etc/init.d/gitlab_ci restart
8. Nginx
Installation
sudo apt-get install nginx
Site Configuration
Download an example site config:
sudo wget https://raw.github.com/gitlabhq/gitlab-ci/master/lib/support/nginx/gitlab_ci -P /etc/nginx/sites-available/ sudo ln -s /etc/nginx/sites-available/gitlab_ci /etc/nginx/sites-enabled/gitlab_ci
Make sure to edit the config file to match your setup:
# Change **YOUR_SERVER_IP** and **YOUR_SERVER_FQDN** # to the IP address and fully-qualified domain name # of your host serving GitLab CI sudo vim /etc/nginx/sites-enabled/gitlab_ci
#下面是gitlab_ci的例子
<span>upstream gitlab_ci {</span><br><span>server unix:/home/gitlab_ci/gitlab-ci/tmp/sockets/gitlab-ci.socket;</span><br><span>}</span><br><br><span>server {</span>
#设置访问gitlab_ci的地址<br>listen 192.168.47.46:9292;<br>server_name 192.168.47.46; <br><br>root /home/gitlab_ci/gitlab-ci/public;<br><br>access_log /var/log/nginx/gitlab_ci_access.log;<br>error_log /var/log/nginx/gitlab_ci_error.log;<br><br>location / {<br>try_files $uri $uri/index.html $uri.html @gitlab_ci;<br>}<br><br>location @gitlab_ci {<br>proxy_read_timeout 300;<br>proxy_connect_timeout 300;<br>proxy_redirect off;<br><br>proxy_set_header Host $host:$server_port;<br>proxy_set_header X-Real-IP $remote_addr;<br>proxy_set_header X-Sendfile-Type X-Accel-Redirect;<br><br>proxy_set_header X-Forwarded-Proto $scheme;<br>proxy_set_header Host $http_host;<br>proxy_set_header X-Real-IP $remote_addr;<br><br>proxy_pass http://gitlab_ci;<br>}<br>}
Restart
sudo /etc/init.d/nginx restart
9. Runners
Requirements
The project is designed for the Linux operating system.
We officially support (recent versions of) these Linux distributions:
- Ubuntu Linux
- Debian/GNU Linux
Installation
# Get code git clone https://github.com/gitlabhq/gitlab-ci-runner.git # Enter code dircd gitlab-ci-runner # Install dependencies # a) Linux sudo apt-get install libicu-dev # b) MacOSx (make sure you have brew installed) sudo brew install icu4c gem install bundler bundle install # Install runner in interactive mode bundle exec ./bin/install # SSH into your GitLab server and confirm to add host key to known_hosts ssh git@<your gitlab url>
Run
bundle exec ./bin/runner
Autostart Runners
On linux machines you can have your runners operate like daemons with the following steps
# make sure you install any system dependancies first administrator@server:~$ sudo adduser --disabled-login --gecos 'GitLab CI Runner' gitlab_ci_runner administrator@server:~$ sudo su gitlab_ci_runner gitlab_ci_runner@server:/home/administrator$ cd ~/ # perform the setup above gitlab_ci_runner@server:~$ exit; gitlab_ci_runner@server:/home/gitlab_ci_runner$ sudo cp ./gitlab-ci-runner/lib/support/init.d/gitlab_ci_runner /etc/init.d/gitlab-ci-runner gitlab_ci_runner@server:/home/gitlab_ci_runner$ cd ~ administrator@server:~$ sudo chmod +x /etc/init.d/gitlab-ci-runner administrator@server:~$ sudo update-rc.d gitlab-ci-runner defaults 21 administrator@server:~$ sudo service gitlab-ci-runner start
Done!
Visit YOUR_SERVER for your first GitLab CI login. You should use your GitLab credentials in orider to login
GitLab 的详细介绍:请点这里
GitLab 的下载地址:请点这里
相关阅读: