gitlab-runner 自动部署(java-maven)

96
廾白
0.2 2017.09.21 19:00* 字数 2028

小序

由于单位的大部分应用是有外包开发,而且不同的外包公司的开发水平良莠不齐,代码风格也是惨不忍睹,所以导致代码后期的维护,二次开发成本很高。所以我特意在今年的TP中加入了代码管理,得到前辈的支持,在此记录一下。不加特殊说明,所用的都是在GitLab9.5.2社区版(hostname:gitlab.mymay.com),Centos7(ip:148.40.190.220)。

如下图是gitlab-server激活gitlab-runner 的运行的流程图。


server-runenr
  1. 安装gitlab-runner
    For RHEL/CentOS

1.curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
2.sudo yum install gitlab-ci-multi-runner

由于curl不能设置系统变量,所以如果有代理的话你需要手动加上,用-x标签设置代理,格式为host[:port],你需要先把这个script.rpm.sh文件download下来,然后把里面的curl全部加上代理

  1. 注册gitlab-runner输入如下的命令:sudo gitlab-runner register
    然后根据提示输入
  1. Enter your GitLab instance RUL
    https://gitlab.mymay.com/ci
    这个url来自你的gitlab service,你可以通过如下路径来查找:
    在一个项目的界面:Settings->CI/CD Pipelines,找到Specific Runners
    下面有url和registration token
    url&token

    如果你在启动Gitlab server的时候指定了Url则要填写相应的url,特别是填写的是hostname而不是ip-address,例如我这里就不能填写ip地址148.40.190.220,gitlab-runner会报错。
  2. Enter the token you obtain to register the Runner
    例如输入上图的:X5aUK34wrP-oHyhgYDbD
  3. Enter a description for the Runner, you can change this later int GitLab's UI;
    例如输入:****(后期可以在gitlab-runenr配置页面修改)
  4. Enter the tags associated with the Runner, you can change this later in GitLab's UI
    例如输入: build, deploy, test
  5. Choose whether the Runner should pick up jobs that do not have tags, you can change this later in GitLab's UI;
    默认是false,可以直接回车
  6. Choose whether to lock the Runner to the current project, you can change this later in GitLab's UI. Useful when the Runner is specific;
    默认是false,这里也可以回车
  7. Enter the runner executor;
    If you chose Docker as your executor, you'll be asked for the default image to be used for project that do not define one in .gitlab-ci.yml;
    这里我们选的是:docker(还可以选:Shell,
    Doker-Machine,SSH,VirtualBox,Parallels,)


    runner-executor
  8. 如果上述选了docker,他会让你在选一个默认的image
    我选的是maven
TIPS.png

由于单位的需求,必须是https的,所以我在这里走了一点弯路,上图的这个是我报告的一部分,大致意思就是,如果你的gitllab-server只设置了https的话,你需要找到gitlab-server的认证文件***.crt,并且把他拷贝出来,放在gitlab-runner服务器中的gitlab-runner目录下,新建一个certs的文件夹,然后把拷贝出来的文件重名成gitlab-server的host.crt
文件。例如:我的gitlab-server的网址是gitlab.mymay.com(148.40.190.220),则文件名就是:gitlab.mymay.com.crt,还有一点就是如果你的gitlab-server设置了external_url,那么你不能使用host-ip地址

  1. 配置 gitlab-runner的配置文件cofig.toml
    当gitlab-runner成功注册完之后,gitlab-server页面会生成runner信息你可以去查看


    gtilab-runner

    并且可以修改部分配置


    ruuner-edi

    而且在gitlab-runner根目录下的cofig.toml会生成相应的配置信息,(/etc/gitlab-runner/cofig.toml),

[[runners]]
name = "atpsystem"
url = "https://gitlab.mymay.com/ci"
token = "315af18957b84548e281c8bedd24cc"
executor = "docker"
 [runners.docker]
  tls_verify = false
  image = "maven"
  dns = ["148.40.190.1"]
  dns_search = ["mymay.com"]
  privileged = false
  disable_cache =true
  volumes = ["/opt/maven/conf:/usr/share/maven/conf"]
  pull_policy = "if-not-present"

"executor":你选择的执行器,这路就是注册让输入的docker
"token":不是注册项目的token,是自己生成的,是唯一编码。
"url":注册时候填写的
"tls_verify":是否需要tls认证。如果你使用了https,却没有遵循我的第二部的tips,那么你应该是没机会到我这一步的。。。那么,你在这里需要配置true,还要配置认证文件地址。
(不是自动生成,需要手动添加)"dns"和"dns_serach":就是dns地址,服务器后缀,没有的话可以不配置
(不是自动生成,需要手动添加)"disable_cache":是否使用cache,我选的是否,因为会有maven没有下载完全的遗留文件,导致maven启动报错,还有一些未知的错误。
"volumes":就是gitlab-runner启动docker时候的附加命令,指的是文件映射,默认是/cache,我这里是禁止使用了cache,所以把配置也改了
(不是自动生成,需要手动添加)"pull_policy":我选的是只有没有image的时候采取pull image

  1. 安装dokcer(centos 版) 按照如下步骤

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum install docker-ce

如上就是安装的过程,如果没有什么错误就可以尝试启动docker

sudo systemctl start docker
sudo docker run hello-world

当看到hello from docker的时候就说明docker已经安装成功了

docker-run
  1. 安装docke maven,由于我们在配置的时候禁止了gitlab-runner pull image所以我们自己要安装

1,docker pull maven
不指定版本的话默认去找latest,latest不一定是最新的maven版本,latest标签是由maven发布者自定义的,可以去dockerHub去查看相应的标签含义
2,docker images
这个时候可以看到安装的maven image,这个时候mavendocker就已经安装成功。

  1. 配置 .gitlab-runner.yml
    来看一个配置文件的片段

develop-build:
  stage: build
  tags: ["***"]
  only: ["develop"]
  except: ["master"]
  script: mvn clean compile

"develop-build":这个是job name必须唯一,重名了不会报错,但是只会运行第一个job
"stage:build":表示这个job运行的stage,常用的是build,test,deploy,如果不写,默认build和test。
"tags: ["spphins"]":指定了gitlab-runner,gitlab-runner在注册时会让你填写tag,在这里只要有相同的tag就会激活相应的gitlab-runner
"only"和"except":看文档好像是非常灵活,但是我配置了几次都没有成功,开始的时候我只配置了only,但是没有用,所以不知道是不是必须要两个一起配置?
"script":执行的脚本,在gitlab-runner clone code之后就会执行,默认目录是配置文件的目录

再看一个高级一点的

variables:
  GIT_SSL_NO_VERIFY: "true"
master-deployc:
  stage: deploy
  tags: ["***"]
  script:
  - mvn deploy
  - mvn tomcat7:deploy -PTom1
  - mvn tomcat7:deploy -PTom2
  only: ["master"]
  except: ["develop"]

"variables":设置在所有的job前,指定gitlab-runner在clone code前先执行的环境变量设置,由于我们必须使用https,这个环境变量是不可缺少的。
这里的script内容比较丰富:表示的是将代码打包部署到两台服务器上这里主要是使用的maven命令,要配合pom文件一起使用。

  1. Pom配置信息,利用pom的prifiles标签可以灵活设置打包环境(随便找了一个图,不要介意)


    pom

    script 中利用maven的-P标签可以指定pofile,例如上一步骤script中的 - mvn tomcat7:deploy -PTom1这里可以改为- mvn tomcat7:deploy -Ppc1

  2. Push代码之后,会自动调用gitlab-runner进行相应的job,可以在项目页面:Piplines->Pipelines查看运行情况
piplines
World Maker
Web note ad 1