Gitlab gitlab-ce-zh:11.1.4 持续集成

  • 2020博客地址汇总
  • 2019年博客汇总

第一章安装GItLab

1.1备注

GitLab CI 就已经集成在 GitLab 中,我们只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 Runner,即可进行持续集成。

(如果已经安装Gitlabb则不需要安装,尽量保证 GitLab 于GitRunner镜像版本号一致或接近)

1.2安装部署

创建文件夹

mkdir -p /usr/local/loit/soft/docker/gitlab

编辑

vi docker-compose.yml

如下代码

其中 39.100.100.120 需改为实际ip

version: '3'
services:
  web:
    image: 'twang2218/gitlab-ce-zh:11.1.4'
    restart: always
    hostname: '39.100.100.120'
    environment:
      TZ: 'Asia/Shanghai'
      GITLAB_OMNIBUS_CONFIG: |
        external_url  'http://39.100.100.120:12011'
        gitlab_rails['gitlab_shell_ssh_port'] = 12222
        unicorn['port'] = 12011
        nginx['listen_port'] = 80
    ports:
      - '12011:80'
      - '12443:443'
      - '12222:22'
    volumes:
      - /usr/local/loit/soft/docker/gitlab/config:/etc/gitlab
      - /usr/local/loit/soft/docker/gitlab/data:/var/opt/gitlab
      - /usr/local/loit/soft/docker/gitlab/logs:/var/log/gitlab

查看日志

docker ps

docker logs -f mmmmmm

1.3解决更改默认端口号后http协议不带端口号

docker exec -u root -it gitlab_web_1  bash

vim /etc/gitlab/gitlab.rb

修改external_url,直接增加端口号即可,比如我这里用8800端口:

external_url 'http://ipaddr:12011'

然后执行:

gitlab-ctl reconfigure

在这里插入图片描述

1.4免密登录

1.4.1生成 SSH KEY

使用 ssh-keygen 工具生成,位置在 Git 安装目录下,我的是 C:\Program Files\Git\usr\bin

输入命令:

ssh-keygen -t rsa -C "[email protected]"

执行成功后的效果:

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/nick/.ssh/id_rsa):
/c/Users/nick/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/nick/.ssh/id_rsa.
Your public key has been saved in /c/Users/nick/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:D4iujDj1OSzQD1wnIR8awwvQPyPwp1EfOpLB+yts2SM [email protected]
The key's randomart image is:
+---[RSA 3072]----+
|o+               |
|o O + .          |
| + & = .         |
|  X @.o.         |
| o O.*. S        |
|. *..    o       |
| + B.o    .      |
|ooE.X            |
|ooo+ o           |
+----[SHA256]-----+

1.4.2复制 SSH-KEY 信息到 GitHub

秘钥位置在:C:\Users\你的用户名.ssh 目录下,找到 id_rsa.pub 并使用编辑器打开并拷贝

第二章GItLab 持续集成

2.1概念

Pipeline

一次 Pipeline 其实相当于一次构建任务,里面可以包含多个流程,如安装依赖、运行测试、编译、部署测试服务器、部署生产服务器等流程。

任何提交或者 Merge Request 的合并都可以触发 Pipeline,如下图所示:

Gitlab gitlab-ce-zh:11.1.4 持续集成_第1张图片

Gitlab gitlab-ce-zh:11.1.4 持续集成_第2张图片

Stages

Stages 表示构建阶段,说白了就是上面提到的流程。我们可以在一次 Pipeline 中定义多个 Stages,这些 Stages 会有以下特点:

所有 Stages 会按照顺序运行,即当一个 Stage 完成后,下一个 Stage 才会开始
只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功
如果任何一个 Stage 失败,那么后面的 Stages 不会执行,该构建任务 (Pipeline) 失败

Gitlab gitlab-ce-zh:11.1.4 持续集成_第3张图片

Jobs
Jobs 表示构建工作,表示某个 Stage 里面执行的工作。我们可以在 Stages 里面定义多个 Jobs,这些 Jobs 会有以下特点:

相同 Stage 中的 Jobs 会并行执行
相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功
如果任何一个 Job 失败,那么该 Stage 失败,即该构建任务 (Pipeline) 失败
所以,Jobs 和 Stage 的关系图就是:

Gitlab gitlab-ce-zh:11.1.4 持续集成_第4张图片

2.2JitLab Runner 介绍

一般来说,构建任务都会占用很多的系统资源 (譬如编译代码),而 GitLab CI 又是 GitLab 的一部分,如果由 GitLab CI 来运行构建任务的话,在执行构建任务的时候,GitLab 的性能会大幅下降。

GitLab CI 最大的作用是管理各个项目的构建状态,因此,运行构建任务这种浪费资源的事情就交给 GitLab Runner 来做拉!

因为 GitLab Runner 可以安装到不同的机器上,所以在构建任务运行期间并不会影响到 GitLab 的性能

2.3JitLab Runner 安装

环境准备

创建工作目录 /usr/local/loit/soft/docker/gitlab-runner
创建配置目录 /usr/local/loit/soft/docker/gitlab-runner/config

cd /usr/local/loit/soft/docker/gitlab-runner

vi docker-compose.yml

version: '3'
services:
    runner:
      image: 'gitlab/gitlab-runner:v11.4.2'
      container_name: gitlab-runner
      restart: always
      networks:
        - gitlab_default
      volumes:
        - ./config:/etc/gitlab-runner
        - /var/run/docker.sock:/var/run/docker.sock
networks:
  gitlab_default:
external: true

docker-compose up -d

2.3.1安装JAVA

安装java

linux 64 jdk1.8 jdk-8u161-linux-x64.tar.gz

百度云盘下载链接:https://pan.baidu.com/s/18IicPYf7W0j-sHBXvfKyyg

下载好后拷贝到

cd /usr/local/soft

将安装包copy到jenkins中的root路径下

docker cp jdk-8u161-linux-x64.tar.gz gitlab-runner:/root/

进入docker容器中,切换到root路径下

docker exec -u root -it gitlab-runner bash

cd /root/

对maven压缩包进行解压,并移动到/var/local/路径下

tar -zxvf jdk-8u161-linux-x64.tar.gz

mv jdk1.8.0_161 /var/local/java

2.3.2安装maven

安装maven

cd  /usr/local/soft

wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

将安装包copy到jenkins中的root路径下

docker cp apache-maven-3.6.3-bin.tar.gz gitlab-runner:/root/

进入docker容器中,切换到root路径下

docker exec -u root -it gitlab-runner bash

cd /root/

对maven压缩包进行解压,并移动到/var/local/路径下

tar -zxvf apache-maven-3.6.3-bin.tar.gz

mv apache-maven-3.6.3 /var/local/

2.3.3 配置环境变量

开始配置环境变量,编辑文件/etc/profile

在最下面添加以下内容(MAVEN_HOME是刚才解压maven的路径)

export JAVA_HOME=/var/local/java
export MAVEN_HOME=/var/local/apache-maven-3.6.3

export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

运行source /etc/profile,刷新环境变量

查看maven版本,安装成功后,退出docker

mvn -v

java -version

exit

2.3.4安装NodeJs

下载 NodeJS

https://cdn.npm.taobao.org/dist/node/v12.18.3/node-v12.18.3-linux-x64.tar.gz

上传到路径 /usr/local/soft

cd /usr/local/soft
docker cp node-v12.18.3-linux-x64.tar.gz gitlab-runner:/root/
docker exec -u root -it gitlab-runner bash

在jenkins容器内执行以下步骤

cd /root/
tar -zxvf node-v12.18.3-linux-x64.tar.gz
mv node-v12.18.3-linux-x64 /usr/local/
cd /usr/local/node-v12.18.3-linux-x64/bin
 ./node  -v
ln -s /usr/local/node-v12.18.3-linux-x64/bin/node /usr/local/bin
ln -s /usr/local/node-v12.18.3-linux-x64/bin/npm /usr/local/bin

2.4注册 Runner

具体项目->设置->CI/CD->获取GitLab CI 地址与令牌参数 (每个需要持续集成的项目都需要设置一次)

Gitlab gitlab-ce-zh:11.1.4 持续集成_第5张图片
Gitlab gitlab-ce-zh:11.1.4 持续集成_第6张图片
Gitlab gitlab-ce-zh:11.1.4 持续集成_第7张图片

docker exec -it gitlab-runner gitlab-runner register

# 输入 GitLab 地址 (参照上图获取 URL)
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://39.100.100.120:12011/

# 输入 GitLab Token(参照上图GitLoabToken 获取)
Please enter the gitlab-ci token for this runner:
1Lxq_f1NRfCfeNbE5WRh 

# 输入 Runner 的说明
Please enter the gitlab-ci description for this runner:
可以为空

# 设置 Tag,可以用于指定在构建规定的 tag 时触发 ci
Please enter the gitlab-ci tags for this runner (comma separated):
设置具体tag, 空为都触发

# 选择 runner 执行器,这里我们选择的是 shell
Please enter the executor: virtualbox, docker+machine, parallels, shell, ssh, docker-ssh+machine, kubernetes, docker, docker-ssh:
shell

其中 runner 中的构建大概路径为

/home/gitlab-runner/builds/ba74daa3/0/spring-timeloit/portalSystem

2.5SCP免密传输文件及SSH免密执行命令

docker exec -u root -it gitlab-runner bash

su gitlab-runner
cd ~

然后从root用户切换到gitlab-runner用户,并且进入用户主目录。因为需要使用ssh scp发布网站,所以需要设置好ssh的证书。

ssh-keygen -t ed25519 -C "[email protected]"

完成了上一步之后用户主目录应该已经生成了.ssh文件夹,进入该文件夹。

cd .ssh
ssh-copy-id -i ./id_ed25519.pub [email protected]

使用此命令复制公钥到目标服务器之上,此操作过程之中需要输入目标服务器的用户登录密码。

示例命令一:

scp -r dist [email protected]:/root/temp

示例命令二:

ssh [email protected] "
cd /root/temp &&
sh deploy-xxx.sh"

2.5.gitlab-ci.yml

在项目工程下编写 .gitlab-ci.yml 配置文件:

stages:
  - install_deps
  - build
  - deploy_test

cache:
  key: ${CI_BUILD_REF_NAME}
  paths:
    - node_modules/
    - dist/

install_deps:
  stage: install_deps
  only:
    - master
  script:
    # - npm install node-sass -save
    - npm install node-sass -save --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
    - npm install --registry=https://registry.npm.taobao.org

# 编译
build:
  stage: build
  only:
    - master
  script:
    - npm run build:prod

# 部署测试服务器
deploy_test:
  stage: deploy_test
  only:
    - master
  script:
    - tar -zcvf dist.tar.gz dist
    - tar -zcvf static.tar.gz static
    - scp -r dist.tar.gz [email protected]:/root/temp
    - scp -r static.tar.gz [email protected]:/root/temp  
    - ssh [email protected] "
        cd /root/temp &&
        sh deploy-xxx.sh"
    - echo "部署完成"

上面的配置把一次 Pipeline 分成阶段:

  • 安装依赖(install_deps)
  • 运行测试(test) (暂缺)
  • 编译(build)
  • 部署测试服务器(deploy_test)(暂缺)
  • 部署生产服务器(deploy_production)(暂缺)

注意: 设置 Job.only 后,只有当master 分支有提交的时候才会触发相关的 Jobs。

节点说明:

  • stages:定义构建阶段,这里只有一个阶段 deploy
  • deploy:构建阶段 deploy 的详细配置也就是任务配置
  • script:需要执行的 shell 脚本
  • only:这里的 master 指在提交到 master 时执行
  • tags:与注册 runner 时的 tag 匹配

2.6测试验证效果

所有操作完成后 push 代码到服务器,查看是否成功:

Gitlab gitlab-ce-zh:11.1.4 持续集成_第8张图片

其它命令

  • 删除注册信息
gitlab-ci-multi-runner unregister --name "名称"
  • 查看注册列表
gitlab-ci-multi-runner list

2.8将docker 容器保存为新镜像

查看docker,显示正在运行的容器

docker ps

根据containerId,创建新镜像

docker commit db1634fc5235 gitlab/gitlab-runner:v11.4.2.1

2.9修改docker-compose

切换到/usr/local/loit/soft/docker/gitlab-runner路径下,修改docker-compose.yml

cd /usr/local/loit/soft/docker/gitlab-runner

vi docker-compose.yml
version: '3'
services:
    runner:
      image: 'gitlab/gitlab-runner:v11.4.2.1'
      container_name: gitlab-runner
      restart: always
      networks:
        - gitlab_default
      volumes:
        - ./config:/etc/gitlab-runner
        - /var/run/docker.sock:/var/run/docker.sock
networks:
  gitlab_default:
external: true

删除之前的容器

docker-compose down

重启

docker-compose up -d

你可能感兴趣的:(【项目相关】)