GitLab CI + Docker 持续集成操作手册

简介: GitLab CI + Docker 持续集成操作手册

概述

在传统软件的开发中,代码的集成工作通常是在所有人都将工作完成后在项目即将结束进行时,而这往往会花费大量的时间和精力。而持续集成是一种将集成阶段放在软件开发阶段的做法,以便更加有规律地构建,测试和集成代码。

“持续集成并不能消除 Bug,而是让它们非常容易发现和改正。”

持续集成可以在开发人员提交了新代码后,立刻进行构建、单元测试。从而我们可以根据测试结果以确定新的代码或者环境配置与原来的以及其他开发人员的代码或者环境配置能否正确地集成在一起。

GitLab CI 就已经集成在 GitLab 中,我们只需要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 Runner,即可进行持续集成。而且随着 GitLab 的升级,GitLab 也变得越来越强大。

CI 的准备工作

docs.gitlab.com/runner/inst…CI 操作需要安装 GitLab Runner, 以上链接包含了多种安装方式,本文介绍docker 安装方式

docker pull gitlab/gitlab-runner:latest
docker run -d --name gitlab-runner --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  gitlab/gitlab-runner:latest
复制代码
docker exec gitlab-runner -it bash

进入其中,安装 java 和maven

容器内安装 Java 和 Maven

wget https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -zxvf jdk-8u201-linux-x64.tar.gz mv jdk1.8.0_201
tar -xvf  apache-maven-3.6.3-bin.tar.gz
复制代码

配置环境变量

vim /etc/profile
export JAVA_HOME=/opt/jdk1.8.0_201
export MAVEN_HOME=/opt/apache-maven-3.6.3
export PATH=${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${PATH}
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
复制代码

重新加载系统配置文件:source /etc/profile

root@a9431b/e9ea2:/home/gitab-runner/bullds/1aAWVY02/0/11angpeng/gitlab-monitor# root@a9431b7e9ea2:/home/gitlab-runner/builds/iaAWVYo2/0/jiangpeng/gitlab-monitor#
ootea0431b7o0oa2:/home/gitlabrunner/builds/iaAwVYo2/0/jiangpeng/gitlab-monitor# mvn -v pache Maven 3.6.3(cecedd343002696d0abb50b32b541b8a6ba2883f) laven home:/opt/apache-maven-3.6.3
ava version: 1.8.0 201, vendor:Oracle Corporation, runtime: /opt/jdk1.8.0 201/jre efault locale: en us, platfonm encoding: ANSI X3.4-1968
S nama: "linly" version:"31AA-693.21.1.el7.x86 64", arch: "amd64", family: "unix" 
root@a9431b7e9ea2:/home/gitlab-runner/builds/iaAWVYo2/0/jiangpeng/gitlab-monitor# java -version ava version "1.8.0 201"
Java(TM) sE Runtime Environment (build 1.8.0 201-b09)
Java HotSpot(TM)64-Bit Server vM (build 25.201-b09, mixed mode)
root@a9431b7e9ea2:/home/gitlab-runner/builds/iaAWVYo2/0/jiangpeng/gitlab-monitor#

项目如何使用CI

.gtilab-ci.yml 文件存放与项目于仓库的根目录,用以来定义 GitLab CI/CD 中的 Pipeline。其实无非是一个配置文件,理解起来挺简单的,我们主要是需要了解 Pipeline 的概念以及如何配置一个 .gitlab-ci.yml

给项目创建.gitlab-ci.yml文件,内容如下

3d13d768317732df84ca4a436689153.png

build:
    script: "pwd && mvn install"
复制代码

如果运行提示permission denied,或者提示找不到mvn命令, 原因是自己maven安装在自己创建的目录下,安装路径有问题。 主要是因为gitlab-runner 配置文件.gitlab-ci.yml中的script脚本的执行用户是gitlab-runner该用户只能访问/home/gitlab-runner文件夹下的东西,如果在其他位置执行一些命令,可以通过修改docker里的/etc/gitlab-runner/config.toml解决

vi /etc/gitlab-runner/config.toml
## 追加内容
[runners.docker]
    tls_verify = false
    image = "latest"
    privileged = true
    disable_cache = false
    volumes = ["/cache"]
复制代码
root@a9431b7e9ea2:/home/gitlab-runner/builds/iaAWVYo2/0/jiangpeng/gitlab-monitor# /etc/gitlab-runner/config.toml  
concurrent =1
check interval =日
[session server]
session timeout =1800
[[runners]]
name = "docker p^H^H^H"
url ="http://git.scm.ppmoney.com/' token="iaAWVYo2-xZ62Lg66BFU' executor = "shell"
runners.custom build dir][runners.docker]
tls verify = false image = "latest" privileged = true
disable cache = false volumes = ["/cache".[runners.cache]
[runners.cache.s3][runners.cache.gcs]

GitLab 配置运行 CI 的runner

53beb1466e0aecc9a91b3fe8bd37780.png

从下图可以看到有4种方式,这里选择手动设置

fd642c0080801508dc0e8ee2663c0ac.png

因为选择了Docker方式安装,需要进入docker执行如下命名,设置图片中第2、3项的链接和token,

gitlab-ci-multi-runner register
复制代码

根据提示输入对应2 、3中的url和token

root@a9431b7e9ea2:/home/gitlab-runner/builds/iaAWVYo2/0/jiangpeng/gitlab-monitor#gitlab-cimulti-runner register
Runtime platform  arch=amd64 0s=linux p1d=344 revision=4c96e5ad version=12.9.0  
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):

设置成功可以看到

858021e2b5f4bd3b50c748c494a21f0.png

通过api触发 CI

6f38d35a7a816332c870953768c93a3.png

cad6b5572f94d927cb5adc8e30c508d.png

复制最后的crul 命令即可执行自动构建的操作。 当有新代码提交时同样会触发CI操作。

效果

f521d039d85dbfac4dadc093f991516.png

f16b53c08841166a3aa855dc40502dd.png

拓展阅读

maven 配置多个仓库

gitlab ci shell script permission denied

Triggering pipelines through the API

Install GitLab Runner

GitLab CI + Docker 实现持续集成

相关文章
|
29天前
|
JavaScript 前端开发 持续交付
Prettier 高级应用:集成 CI/CD 流水线与插件开发
【10月更文挑战第18天】Prettier 是一款流行的代码格式化工具,它能够自动将代码格式化成一致的风格,从而提高代码的可读性和维护性。对于希望进一步发挥 Prettier 潜力的高级用户而言,将 Prettier 集成到持续集成(CI)和持续部署(CD)流程中,确保每次提交的代码都符合团队标准,是非常重要的。此外,通过开发自定义插件来支持更多语言或扩展 Prettier 的功能也是值得探索的方向。本文将详细介绍这两方面的内容。
44 2
|
12天前
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
19天前
|
jenkins Java 持续交付
软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分
随着软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分。本文以电商公司为例,介绍如何使用 Jenkins 自动发布 Java 代码,包括安装配置、构建脚本编写及自动化部署等步骤,帮助团队实现高效稳定的软件交付。
29 3
|
30天前
|
jenkins 测试技术 持续交付
Docker最佳实践:构建高效的CI/CD流水线
【10月更文挑战第17天】在现代软件开发实践中,持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)已成为提高开发效率和软件质量的重要手段。Docker作为一种容器技术,为构建一致且隔离的开发环境提供了强有力的支撑。本文将探讨如何利用Docker来优化CI/CD流程,包括构建环境的标准化、镜像管理以及与CI/CD工具(如Jenkins、GitLab CI)的集成。
50 5
|
1月前
|
缓存 监控 数据可视化
利用GitLab CI/CD自动化您的软件开发流程
【10月更文挑战第10天】GitLab CI/CD 是 GitLab 内置的持续集成和持续部署工具,通过编写 .gitlab-ci.yml 文件,可以自动化构建、测试和部署应用程序的过程。本文介绍 GitLab CI/CD 的核心优势、实施步骤及在现代开发中的应用,帮助您提高开发效率和软件质量。
|
1月前
|
缓存 监控 测试技术
掌握容器化持续集成/持续部署(CI/CD)的最佳实践
【10月更文挑战第8天】本文介绍了容器化持续集成/持续部署(CI/CD)的最佳实践,涵盖容器化CI/CD的概念、优势和实施步骤。通过使用容器技术,可以实现环境一致性、快速迭代和易于扩展,提高软件开发的效率和可靠性。文章还详细讨论了编写高效的Dockerfile、自动化测试、安全性、监控和日志管理等方面的最佳实践。
|
25天前
|
运维 安全 Devops
DevOps实践:持续集成与持续部署(CI/CD)的自动化之路
【10月更文挑战第22天】在软件交付的快速迭代中,DevOps文化和实践成为企业加速产品上市、保证质量和提升客户满意度的关键。本文将通过一个实际案例,深入探讨如何利用持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)实现软件开发流程的高效自动化,包括工具选择、流程设计以及问题解决策略。我们将一起探索代码从编写到部署的全自动化旅程,揭示其对企业运维效率和产品质量所带来的深远影响。
|
1月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
69 0
|
1月前
|
JavaScript 测试技术 持续交付
使用 GitLab CI/CD 管道自动化部署 Web 应用
【10月更文挑战第2天】使用 GitLab CI/CD 管道自动化部署 Web 应用
41 0
|
1月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
150 0
下一篇
无影云桌面