[From] http://blog.51cto.com/flyfish225/2156602

gitlab 的 CI/CD 配置管理 (二)

标签(空格分隔):运维系列


  • 一:gitlab CI/CD 介绍
  • 二:配置gitlab的CI/CD 的runner
  • 三:代码的MAVEN打包环境
  • 四:配置gitlab的CI 文件
  • 五:发布项目

一: gitlab CI/CD介绍

1.1 gitlab CI/CD概述

Gitlab是常用的开源git代码管理工具之一,随着发展也推出了ci/cd解决方案.
顾名思义具体来说ci/cd主要完成以下两个工作.
ci(持续构建)
代码提交后触发自动化的单元测试,代码预编译,构建镜像,上传镜像等.
cd(持续发布)
持续发布则指将构建好的程序发布到各种环境,如预发布环境,正式环境. 官网: https://docs.gitlab.com/ee/ci/README.html

1.2 特性

gitlab ci/cd是由独立的runner程序完成,runner采用go语言编写,因此可以很好的进行跨平台,通常可以将runner部署到任何gitlab server之外的服务器,从而避免对gitlab server的影响.

官网:https://docs.gitlab.com/runner/

二:配置gitlab的CI/CD 的runner

2.1 安装gitlab-runner

参考:
https://docs.gitlab.com/runner/install/linux-repository.html 在 CentOS 7 上面的安装
Add GitLab's official repository:

# For RHEL/CentOS/Fedora

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

安装runner

# For RHEL/CentOS/Fedora
sudo yum install gitlab-runner


2.2 项目注册到到runner

参考官网:

https://docs.gitlab.com/runner/register/index.html

找到要发布项目的注册信息

Setup a specific Runner manually
安装一个与 GitLab CI 兼容的 Runner (如需了解更多的安装信息,请查看 GitLab Runner)
在 Runner 设置时指定以下 URL: http://172.17.100.11/
在安装过程中使用以下注册令牌: kA5JA5myz4aZR6MRgEBm
启动 Runner!
gitlab-runner register


service gitlab-runner start
chkconfig gitlab-runner on 在gitlab 上面找到runner 将项目添加到runner里面去

这边如果有多个项目都可以添加到这个runner 里面去

##三:代码的MAVEN打包环境

配置 maven

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

mv apache-maven-3.5.3 /usr/local/maven

vim /etc/profile

---
在Java环境变量下面加上 maven的环境变量 ## maven export MAVEN_HOME=/usr/local/maven
PATH=$PATH:$HOME/bin:$MAVEN_HOME/bin ---

source /etc/profile
mvn -version

mkdir -p /deploy/solo # 创建 打出solo.war 的目录

cd /root/project/

rm -rf solo 

git clone http://172.17.100.11/TL-flyfish/solo.git

尝试使用 命令行的方式编译项目:
首次编译会下载包会很慢 cd solo mvn clean package
mvn install
mvn install package -Dmaven.test.skip=true 最后会打出solo.war包 表示命令行打包完成 maven 到默认下载的依赖包在/root/.m2/repository

四:配置gitlab的CI 文件

4.1 配置CI 的 运行文件gitlab-ci.yml 打出war包测试

stages:
- build
- run
- deploy variables:
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository" cache:
paths:
- .m2/repository/ .solo-build-job: &solo-build-job
script:
- mvn clean package
- mvn install
- mvn install package -Dmaven.test.skip=true
- ls -ld * solo-build:
when: manual
stage: build
script:
- mvn clean package
- mvn install
- mvn install package -Dmaven.test.skip=true
- cd $CI_PROJECT_DIR/target/
- ls -ld *

执行构建

最后打出solo.war的包


五: 发布项目

5.1: 部署一台tomcat 中间件的服务器

tomcat 服务器 IP: 172.17.100.12 

打通172.17.100.11 和172.17.100.12 的无密码登录认证。

下载:tomcat
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz tar -zxvf apache-tomcat-8.5.32.tar.gz mv apache-tomcat-8.5.32 /usr/local/tomcat

启动tomcat:

cd /usr/local/tomcat/bin

./startup.sh

访问: 172.17.100.12:8080

5.2 在gitlab-ci.yml 增加发布步骤

stages:
- build
- run
- deploy variables:
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository" cache:
paths:
- .m2/repository/ .solo-build-job: &solo-build-job
script:
- mvn clean package
- mvn install
- mvn install package -Dmaven.test.skip=true
- ls -ld * solo-build:
when: manual
stage: build
script:
- sudo rm -rf /deploy/solo/solo.war
- mvn clean package
- mvn install
- mvn install package -Dmaven.test.skip=true
- cd $CI_PROJECT_DIR/target/
- ls -ld *
- cp -ap solo.war /deploy/solo/ solo-run:
when: manual
stage: run
script:
- cd /deploy/solo
- md5sum solo.war solo-deploy:
when: manual
stage: deploy
script:
- cd /deploy/solo/
- scp solo.war root@172.17.100.12:/root
- cd /deploy/script
- sh -x deploy-solo.sh


发布需要配置 一个发布脚本:

在 172.17.100.11 上面写编写脚本:

mkdir /deploy/script -p

---

#!/bin/bash
DATE=`date +%Y-%m-%d-%H-%M` ssh root@172.17.100.12 << eof cd /usr/local/tomcat/bin/ sh -x shutdown.sh cd /usr/local/tomcat/webapps/ mv solo.war /data/backup/solo.war$DATE cp /root/solo.war /usr/local/tomcat/webapps/ cd /usr/local/tomcat/bin/ sh -x startup.sh ps -ef |grep tomcat eof
---

在 tomcat 服务器上面新建一个solo.war 包的备份目录
172.17.100.12 mkdir -p /data/backup


客户端从git服务器(172.17.100.11) 下载代码

cd /soft
rm -rf * git clone git@172.17.100.11:TL-flyfish/solo-project.git cd solo-project
cd src/main/resources/ vim latke.properties ---
修改 这个 serverHost 改为 172.17.100.12 serverHost=172.17.100.12
---

提交项目: 

cd /soft/solo-project
git add *
git commit -m "add solo"
git push -u origin master

发布项目:

点击执行

开始build

此处报一个 权限不够
是因为默认构建的时候是gitlab-runner 这个用户 去执行这个命令的
所以要为gitlab-runner 用户提权 chmod +x /etc/sudoers vim /etc/sudoers gitlab-runner ALL=(ALL) NOPASSWD:ALL 并要 做gitlab-runner 用户与 172.17.100.12 的root的用户的无密钥登录

gitlab-cli.yaml 构建 脚本应该为sudo 

stages:
- build
- run
- deploy variables:
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository" cache:
paths:
- .m2/repository/ .solo-build-job: &solo-build-job
script:
- mvn clean package
- mvn install
- mvn install package -Dmaven.test.skip=true
- ls -ld * solo-build:
when: manual
stage: build
script:
- sudo rm -rf /deploy/solo/solo.war
- mvn clean package
- mvn install
- mvn install package -Dmaven.test.skip=true
- cd $CI_PROJECT_DIR/target/
- ls -ld *
- sudo cp -ap solo.war /deploy/solo/ solo-run:
when: manual
stage: run
script:
- cd /deploy/solo
- md5sum solo.war solo-deploy:
when: manual
stage: deploy
script:
- cd /deploy/solo/
- sudo scp solo.war root@172.17.100.12:/root
- cd /deploy/script
- sudo sh -x deploy-solo.sh

从新执行build的构建

执行 步骤 run:

执行步骤:deploy

访问测试:

©著作权归作者所有:来自51CTO博客作者flyfish225的原创作品,谢绝转载,否则将追究法律责任
 

[转] gitlab 的 CI/CD 配置管理的更多相关文章

  1. 使用Gitlab的CI/CD功能自动化推送docker镜像到Nexus仓库出现的问题

    在服务器中可以直接使用命令行登录,推送docker镜像等 但是在使用Gitlab的CI/CD功能中,gitlab-ci.yml文件执行过程中出现如下错误: 原因分析: 服务器上之前使用命令行登陆过Ne ...

  2. 持续集成指南:GitLab 的 CI/CD 工具配置与使用

    前言 写代码这项工作,本质就是将工作自动化,减少手工操作提供效率,因为人的本质都是懒狗,程序员也不能例外,为了各种意义的效率提升(懒),我们需要持续集成工具,将代码测试.编译.发布这些重复性很高的工作 ...

  3. Kubernetes+Jenkins+Nexus+Gitlab进行CI/CD集成

    前面已经完成了 二进制部署Kubernetes集群,下面进行CI/CD集成. 一.流程说明 应用构建和发布流程说明: 1.用户向Gitlab提交代码,代码中必须包含Dockerfile: 2.将代码提 ...

  4. Gitlab的CI/CD初尝试

    初衷:今天公司的前端和测试人员吵起来了.原因是测试埋怨前端人员把Bug的状态更改为已解决,结果代码根本没提交,而前端人员埋怨测试测的太频繁了,需要打几个环境的包不方便.又要改东西又要频繁打包费时间.凡 ...

  5. 一种使用gitlab的CI/CD功能实现Nginx配置更新的方法

    至于nginx的docker制作,前面已介绍过. 现在使用gitlab在线编辑的方式,可实现Nginx的自定义配置并更新. .gitlab-ci.yml内容如下: variables: project ...

  6. Docker 集成 Jenkins Gitlab 实现 CI/CD

    首先介绍下环境部分,文章中共涉及到三台服务器,分别用 Gitlab,Jenkins,Deploy 三个名称代替,部署在内网环境,同时因为政策原因,服务器无法直接连通外网.下载 Jenkins 插件时需 ...

  7. gitlab的CI/CD实现

    环境准备: gitlab账号公网账号:代码仓库和编译器 目标机:装有docker和gitlab-runner环境的服务器(Linux或类unix机器,我使用的时centos 项目代码:testgola ...

  8. jenkins、gitlab配置CI/CD

    1. 在gitlab中创建好项目(gitlab的安装和基本使用这里不在说明) 2. 创建jenkins任务 jenkins 需要几个插件请先安装好 - Git plugin - GitLab Plug ...

  9. GItlab作CI/CD时,想快点,有啥招?

    如果希望.m2文件有存缓,或是不要每次从dockerhub上找镜像(有的是本地镜像,远程没有的) 那么,gitlab-runner的config.toml初步优化文件如下: concurrent = ...

随机推荐

  1. GO语言使用gopsutil包进行机器信息采集

    GO语言本身拥有极强的性能,非常适合做一些后端的数据采集管理以及运维系统. 其中会面临对当前系统信息的采集,我在这里使用的是GO的工具包 gopsutil 贴出一套测试代码,抛砖引玉: import ...

  2. idea注释字体倾斜的解决办法

    File-->Settings-->Editor--> Color Scheme-->Language Defaults-->Comments-->Line con ...

  3. Redis-3.2.0集群配置(redis cluster)

    版本:redis-3.0.5 redis-3.2.0  redis-3.2.9  redis-4.0.11 参考:http://redis.io/topics/cluster-tutorial. 目录 ...

  4. (二分搜索 )Strange fuction -- HDU -- 2899

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2899 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  5. VS中的Debug 和 Release 编译方式的本质区别

    VS中的Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使 ...

  6. linux 用户/用户组添加修改删除(ubuntu/centos)

    一.LINUX(UBUNTU/CENTOS)用户添加删除修改 1.建用户: adduser web                             //新建web用户 useradd web  ...

  7. Android-Sqlite-SQL操作增删改查

    一想到Android到数据库,只需要想到一个类 SQLiteOpenHelper,然后写一个类继承 SQLiteOpenHelper,重写构造方法,对数据库进行配置 public class MySQ ...

  8. CentOS6.4 X86_64 kvm+PXE备忘

    Install 安装 1 2 3 4 5 # yum install qemu-kvm qemu-img # 使用kvm至少要安装的包,一个提供用户级别kvm模拟器,一个提供磁盘镜像的管理 # 安装虚 ...

  9. 深度学习之TensorFlow的介绍与安装

    TensorFlow是一个采用数据流图(data flow graphs)用于数值计算的开源软件库.它最初是由Google大脑小组的研发人员设计开发的,用于机器学习和神经网络方面的研究.但是这个系统的 ...

  10. Tomcat启动报错Invalid character found in method name. HTTP method names must be tokens

    1.tomcat服务器需配置三个端口才能启动,安装时默认启用了这三个端口,当要运行多个tomcat服务时需要修改这三个端口,不能相同. 端口一: 修改http访问端口(默认为8080端口),配置文件为 ...