目前经常使用的持续集成工具主要是jenkins与gitlab-ci ,我已在另外一博文中详细记录了jenkins部署过程(其中包括gitlab的搭建),此篇介绍gitlab-ci的使用。nginx
GitLab-Runner是配合GitLab-CI进行使用的。通常地,GitLab里面的每个工程都会定义一个属于这个工程的软件集成脚本,用来自动化地完成一些软件集成工做。当这个工程的仓库代码发生变更时,好比有人push了代码,GitLab就会将这个变更通知GitLab-CI。这时GitLab-CI会找出与这个工程相关联的Runner,并通知这些Runner把代码更新到本地并执行预约义好的执行脚本。 已在线下机房安装好gitlab,以前jenkins项目博文有介绍详细安装方法,gitlab-runner端安装在阿里云ECS上,且还需安装maven在 runner所在服务器上,maven安装博客有教程,注册时经过gitlab的公网或域名方式的url注册。
我司防火墙的80端口被封了,须要将gitlab的默认80端口修改成8088:git
vim /etc/gitlab/gitlab.rb external_url 'http://gitlab.home.com:8088' #添加上端口 nginx['listen_port'] = 8088 #添加 vim /var/opt/gitlab/nginx/conf/gitlab-http.conf 、 server { listen *:8088; #改其内置nginx监听端口 gitlab-ctl reconfigure #重置配置文件 gitlab-ctl restart #重启服务
本地gitlab 版本查看 cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
版本选择
本文gitlab为10.5.2,runner为gitlab-ci-multi-runner-9.5.1-1.x86_64.rpmweb
[root@localhost ~]# curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
[root@localhost ~]# yum -y install gitlab-ci-multi-runner-10.0.0-1-x86_64
[root@localhost ~]# gitlab-ci-multi-runner register Running in system-mode. Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): http://172.19.0.101:8088/ Please enter the gitlab-ci token for this runner: hy-zVkJBwTyG3WyvS3Sr Please enter the gitlab-ci description for this runner: [localhost.localdomain]: test_nothing Please enter the gitlab-ci tags for this runner (comma separated): nothing_runner Whether to run untagged builds [true/false]: [false]: false Whether to lock Runner to current project [true/false]: [false]: false Registering runner... succeeded runner=hy-zVkJB Please enter the executor: docker+machine, docker-ssh+machine, docker-ssh, shell, ssh, virtualbox, kubernetes, docker, parallels: shell Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
[root@localhost ~]# gitlab-ci-multi-runner run [root@localhost ~]# ps -ef|grep runner root 9294 1 0 04:13 ? 00:00:00 /usr/bin/gitlab-ci-multi-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user gitlab-runner 此时在gitlab的web界面能够看到本runner
runner会执行添加的命令,要注意pom.xml的路径,默认在项目根目录中,若不在,须要以项目根目录为相对路径加上该文件所在路径,如:mvn clean package -f libra/ ,如下脚本能够去掉before_script,打包命令改成 mvn clean package。在注册runner时,要根据提示,是否要执行不带tag的项目。 before_script: - mvn clean stages: - deploy deploy_job: stage: deploy only: - master script: - mvn package - sh /test_project/test-backend/runner_tomcat.sh tags: - test-tag
以上runner_tomcat.sh脚本定义了打包后的与应用相关的镜像处理与到阿里云的镜像推送。docker
vim /test_project/test-backend/runner_tomcat.sh #!/bin/bash namespace=testimage project_name=aaa-a war_name=aaa.war image_name=registry-vpc.cn-shanghai.aliyuncs.com/$namespace/$project_name old_version=`sudo docker images|grep $image_name|awk '{print $2}'|sort -r|awk 'NR==1{print}'` new_version=$(expr $old_version + 1) newimage=$image_name:$new_version Dockerfile_path=/test_project/$project_name/ war_path=`find / -cmin -20 -name $war_name 2>/dev/null | grep -v "/var/lib/docker" | grep -v "/test_project/$project_name/"` source /etc/profile rm -rf /test_project/$project_name/$war_name && mv $war_path /test_project/$project_name/ && sudo docker login --username=ur_name --password=test1245\& registry-vpc.cn-shanghai.aliyuncs.com sudo docker build -t $newimage $Dockerfile_path && sudo docker push $newimage
随意修改有 .gitlab-ci.yaml文件的项目的代码,提交。查看流水线,也能够看镜像仓库是否推送了该版本镜像
初次运行应该会报错,如下是我屡次报错总结shell
缘由:能够 ps -ef|grep runner 查看,有多个runner进程,分别属于gitlab-runner与root
解决方法:kill掉全部runner进程,以root身份执行 gitlab-ci-multi-runner start ,查看进程数,只有一个
vim
解决方法:tomcat
vim /etc/sudoers gitlab-runner ALL=(root) /bin/docker,NOPASSWD: ALL #加上NOPASSWD: ALL,执行命令时不用再输入passwd for gitlab-runner
解决方法:对该群组没操做权限,将你登录gitlab的此用户加到该群组成员中,访客身份无效。bash