CICD 持续集成与持续交付(2)

news2024/11/17 20:36:57

目录

gitlab

部署

jenkins

部署

配置

实时触发

自动化构建docker镜像

通过ssh插件交付任务

添加jenkins节点

RBAC

pipeline

jenkins结合ansible参数化构建

安装ansible

新建gitlab项目

jenkins新建项目playbook


gitlab

部署

虚拟机最小需求:4G内存 4核cpu

下载:Index of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

安装依赖性

[root@server1 ~]# yum install -y curl policycoreutils-python openssh-server perl
[root@server1 ~]# yum install -y gitlab-ce-15.9.3-ce.0.el7.x86_64.rpm
[root@server1 ~]# cd /etc/gitlab/
[root@server1 gitlab]# vim gitlab.rb
external_url 'http://192.168.81.11'	    #gitlab访问地址

自动化部署

[root@server1 gitlab]# gitlab-ctl reconfigure

 

登录 

用户:root

初始密码: cat /etc/gitlab/initial_root_password

 

 

修改密码,初始密码24小时后过期

新建项目

添加密钥

克隆项目

[root@server1 ~]# git clone git@192.168.81.11:root/demo.git
[root@server1 ~]# cd demo/
[root@server1 demo]# git remote -v
origin  git@192.168.81.11:root/demo.git (fetch)
origin  git@192.168.81.11:root/demo.git (push)

[root@server1 demo]# echo www.westos.org > index.html
[root@server1 demo]# git add  index.html
[root@server1 demo]# git commit -m "add index.html"
[root@server1 demo]# git push -u origin main

jenkins

部署

软件下载:Index of /jenkins/redhat/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

[root@server2 ~]# rpm -ivh jdk-11.0.15_linux-x64_bin.rpm
[root@server2 ~]# yum install -y fontconfig
[root@server2 ~]# rpm -ivh jenkins-2.432-1.1.noarch.rpm
[root@server2 ~]# systemctl enable --now jenkins.service
[root@server2 ~]# netstat -antlp|grep :8080

登录

http://192.168.81.12:8080/

 

安装推荐插件

无需新建用户,直接使用admin账户

配置

修改密码

新建项目

在jenkins主机上安装git工具

[root@server2 ~]# yum install -y git

创建密钥并上传gitlab

添加gitlab认证凭据

复制私钥

配置ssh

[root@server2~]# vim  /etc/ssh/ssh_config

构建触发器

构建任务

查看控制台输出

gitlab变动时进行轮询

实时触发

安装gitlab插件

配置项目触发器

生成secret token

配置gitlab

再回到demo项目下配置

测试推送

自动化构建docker镜像

在server6上安装docker-ce

[root@server2 docker]# cd /etc/yum.repos.d/
[root@server2 yum.repos.d]# cat docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0

[update]
name=centos
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/extras/x86_64/
gpgcheck=0

[root@server2 yum.repos.d]# yum install -y docker-ce

修改内核参数

[root@server2 ~]# vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1

[root@server2 ~]# sysctl --system

[root@server2 ~]# systemctl  enable --now docker

配置docker默认仓库

[root@server2 ~]# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://reg.westos.org"]
}

[root@server2 ~]# systemctl  restart docker

拷贝仓库证书

[root@k8s1 harbor]# cd /etc/docker/
[root@k8s1 docker]# scp -r certs.d/ 192.168.81.12:/etc/docker/

[root@server2 ~]# ls /etc/docker/certs.d/reg.westos.org/ca.crt
/etc/docker/certs.d/reg.westos.org/ca.crt

登录私有harbor仓库

[root@server2 test]# docker login reg.westos.org
[root@server2 test]# chmod /var/run/docker.sock
[root@server2 test]# cp -r /root/.docker/ /var/lib/jenkins/
[root@server2 test]# cd /var/lib/jenkins/
[root@server2 jenkins]# chown -R jenkins.jenkins .docker/

安装CloudBees Docker Build and Publish插件

配置项目构建

在server1上提交Dockerfile

[root@server1 demo]# vim Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html

[root@server1 demo]# git status -s
?? Dockerfile
[root@server1 demo]# git add  Dockerfile
[root@server1 demo]# git commit -m "add Dockerfile"
[root@server1 demo]# git push -u origin main

此时gitlab会主动触发jenkins构建任务,观察jenkins的任务输出

通过ssh插件交付任务

新建测试虚拟机server3

在server3上安装docker-ce、修改内核参数、拷贝仓库证书

jenkins安装ssh插件

进入系统配置,添加ssh主机

新建docker_test项目

当test项目成功运行后触发docker_test项目

构建后查看输出

添加jenkins节点

安装ssh agent插件

安装jdk和git

[root@server3 ~]# rpm -ivh jdk-11.0.15_linux-x64_bin.rpm
[root@server3 ~]# yum install -y git

配置解析

[root@server3 ~]# vim /etc/hosts

在节点管理中添加节点

配置从节点、 ssh认证

关闭Built-InNode节点的构建任务数

关闭git主机校验

最后测试构建,构建任务会在server3节点上运行

RBAC

安装插件

修改默认授权策略

新建测试用户

新建角色

用户授权

docker_dev可以构建、read

docker_test

pipeline

新建流水线项目 docker_image_build

server1对server3进行免密

pipeline {
    agent any

    stages {
        stage('check out') {
            steps {
                git credentialsId: 'b3c53a2f-3c0a-4f8b-95ac-6b215e11f71f', url: 'git@192.168.81.11:root/dockerfile.git', branch: 'main'
            }
        }
        stage('docker build') {
            steps {
                sh '''
                cd $WORKSPACE
                docker build -t reg.westos.org/library/webserver:${BUILD_NUMBER} .
                '''
            }
        }
        stage('docker push') {
            steps {
                sh '''
                REPOSITORY=reg.westos.org/library/webserver:${BUILD_NUMBER}
                docker tag $REPOSITORY reg.westos.org/library/webserver:latest
                docker login reg.westos.org -u admin -p shg12345
                docker push $REPOSITORY
                docker push reg.westos.org/library/webserver:latest
                '''
            }
        }
        stage('docker deploy') {
            steps {
		sshagent(credentials: ['279e420b-1d3c-4ac4-a25f-10b876f700f3']) {
                    sh '''
                    ssh -o StrictHostKeyChecking=no root@192.168.81.13 """
                    docker ps -a |grep myapp && docker rm -f myapp
                    docker rmi reg.westos.org/library/webserver:latest
                    docker run -d --name myapp -p 80:80 reg.westos.org/library/webserver:latest """
                    '''
                }
            }
        }
    }
}

注意:ssh需要使用ssh免密认证

jenkins结合ansible参数化构建

主机环境

主机

IP

角色

server1

192.168.81.12

jenkins、ansible

server2

192.168.81.11

测试机test、devops sudo

server3

192.168.81.13

测试机prod、devops sudo

安装ansible

[root@server2 ~]# vim /etc/yum.repos.d/ansible.repo
[ansible]
name=epel
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/
gpgcheck=0

[root@server2 ~]# yum install -y ansible

devops是测试机的ssh免密用户,并且配置sudo

[root@server1 ~]# useradd devops
[root@server1 ~]# echo westos | passwd --stdin devops
[root@server1 ~]# visudo

server3同上配置

在ansible主机上以jenkins身份配置ssh免密到所有测试机

[root@server2 ~]# usermod -s /bin/bash jenkins
[root@server2 ~]# su - jenkins
-bash-4.2$ ssh-keygen
-bash-4.2$ ssh-copy-id devops@192.168.81.11
-bash-4.2$ ssh-copy-id devops@192.168.81.13

新建gitlab项目

[root@server1 ~]# git clone git@192.168.81.11:root/playbook.git
[root@server1 ~]# cd playbook/
[root@server1 playbook]# vim ansible.cfg
[defaults]
command_warnings=False
remote_user=devops

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

[root@server1 playbook]# mkdir inventory
[root@server1 playbook]# cd inventory/
[root@server1 inventory]# vim test
[test]
192.168.81.11 http_port=8000

[root@server1 inventory]# vim prod
[prod]
192.168.81.13 http_port=8080

[root@server1 inventory]# cd ..
[root@server1 playbook]# vim playbook.yaml
---
- hosts: all
  tasks:
  - name: install the latest version of Apache
    yum:
      name: httpd
      state: latest

  - name: configure apache
    template:
      src: httpd.conf.j2
      dest: /etc/httpd/conf/httpd.conf
    notify: restart apache

  - name: Start service httpd, if not started
    service:
      name: httpd
      state: started
      enabled: yes

  handlers:
  - name: restart apache
    service:
      name: httpd
      state: restarted

[root@server1 playbook]# yum install -y httpd
[root@server1 playbook]# cp /etc/httpd/conf/httpd.conf .
[root@server1 playbook]# mv httpd.conf httpd.conf.j2
[root@server1 playbook]# vim httpd.conf.j2

Listen {{ http_port }}

推送项目

jenkins新建项目playbook

选择参数构建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1226613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

年货FPS大作,艾尔莎EA B450M-E和你玩转《使命召唤20》

说到动视旗下的《使命召唤》系列,相信大家都不陌生,它以出色爽快的游戏体验以及精良的画面著称,而且每年一部的更新节奏也是如今为数不多的“年货”游戏之一了。时至今日,该系列已经来到了第20部作品,也就是《使命召唤…

第20章 数据库编程

通过本章需要理解JDBC的核心设计思想以及4种数据库访问机制,理解数据库连接处理流程,并且可以使用JDBC进行Oracle数据库的连接,理解工厂设计模式在JDBC中的应用,清楚地理解DriverManager类的作用,掌握Connection、Prep…

简历技术栈redis点

熟悉Redis常见的数据类型以及缓存问题,如缓存穿透、雪崩 、击穿等 Redis五种数据类型 Redis常用命令 查看所有 keys * 字符串类型string 常用命令 举例: 放置一个字符串数据到redis中,先为数据定义一个名称,比如name,age等&am…

⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ MySQL存储过程 1. 介绍2. 使用3. 变量①系统变…

OceanBase:Zone管理

OceanBase 集群由若干个 Zone 组成。从物理层面来讲,一个 Zone 通常是一个独立的物理部署单元,可以是一个数据中心(IDC)或者云上的一个 Zone(可用区),也可以是一个单独的机架(Rack&a…

大模型的视觉能力

摘要: 计算机视觉引领了人工智能中深度学习的采用,这表明在大型注释数据集上预训练的模型可以转移到许多下游设置。现在,在网络规模的原始数据而不是策划的数据集上进行预训练,基础大模型在计算机视觉中正在崛起。这些模型…

时间序列与 statsmodels:预测所需的基本概念(2)

时间序列与 statsmodels:预测所需的基本概念(2) 维托米尔约万诺维奇 跟随 出版于 走向发展 4 分钟阅读 2022 年 1 月 31 日 8 一、说明 在使时间序列平稳后,在本博客中我们应用 SARIMAX 预测并进行深入解释。 二、关于平稳性 …

C++多线程编程(2):四种线程管理方法

文章首发于我的个人博客:欢迎大佬们来逛逛 文章目录 线程管理get_idsleep_forsleep_untilyield 线程管理 有一个this_thread的名称空间中定义了许多的线程管理方法: get_id:获取当前线程idsleep_for:当前线程休眠一段时间sleep_…

计算机组成原理-双端口RAM和多模块存储器

文章目录 存取周期总览双端口RAM多体并行存储器低地址交叉编址有多少个存储体合适(体号)多模块存储器(多体存储器)总结实际场景 存取周期 总览 双端口RAM RAM:用于主存或高速缓存,断电数据丢失 多体并行…

实验五:Java多线程程序设计

一、线程接力 编写一个应用程序,除了主线程外,还有三个线程:first、second和third。first负责模拟一个红色的按钮从坐标(10,60)运动到(100,60);second负责模…

自动 ARIMA 超参数搜索

一、介绍 这种用于自动超参数搜索进行预测的开发方法可能会花费大量时间,但它可以带来回报,因为当您找到预测模型的最佳参数时,它将节省时间并提高预测的精度。此外,手动尝试可能会花费您最多的时间,但这种方法在某些情…

不知道如何制作产品图册的,赶紧收藏住!

产品图册是展示产品外观、功能和特点的重要工具,对于销售和推广产品至关重要。然而,制作一本高质量的产品图册并不是一件容易的事情。如果你没有经验或者不确定如何着手,那么这篇文章将为你提供一些实用的建议和技巧,帮助你轻松制…

Java调用com组件之jacob

一、背景介绍 现有标准的 win32 com组件,有如下的参数: 属性 值 说明Program IDyinhai.yh_hb_sctrCOM ClassIDCOM ClassName COClass_yh_hb_sctr Interface TypeDual InterfaceInterface NameIyh_hb_sctr 具有一个方法: yh_hb_call( string…

三、LED闪烁

通过LED的闪烁实验,详解Keil MDK中创建mm32单片机的工程的步骤。 1、开发环境 (1)Keil MDK: V5.38.0.0 (2)MCU: mm320163D7P。 2、Keil工程的创建 (1)打开Keil MDK。 (2)点击“Project”→“New μVision Project...”。 (3)选择工程保存地址及工程文件名&…

基于Springboot的地方美食分享网站(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的地方美食分享网站(有报告)。Javaee项目,springboot项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项目介绍: 采用…

数据挖掘复盘——apriori

read_csv函数返回的数据类型是Dataframe类型 对于Dataframe类型使用条件表达式 dfdf.loc[df.loc[:,0]2]df: 这是一个DataFrame对象的变量名,表示一个二维的表格型数据结构,类似于电子表格或SQL表。 df.loc[:, 0]: 这是使用DataFrame的.loc属性来进行…

devops底层是怎么实现的

DevOps的3大核心基础架构 简而言之,实现DevOps工具链,基本需要3个核心基础架构: SCM配置管理系统 Automation自动化系统 Cloud云(或者说可伸缩的、自服务的、虚拟化系统) SCM配置管理系统 SCM中所放置的内容又可以再…

系列十、你说你做过JVM调优和参数配置,请问如何盘点JVM系统的默认值?

一、JVM的参数类型 1.1、标配参数 java -versionjava -help 1.2、XX参数 1.2.1、Boolean类型 公式:-XX:或者- 某个属性值 表示开启、-表示关闭 # 是否打印GC收集细节 -XX:PrintGCDetails -XX:-PrintGCDetails# 是否使用串行垃圾收集器 -XX:UseSerialGC -XX:-UseS…

矩阵的QR分解

矩阵的QR分解 GramSchmidt 设存在 B { x 1 , x 2 , … , x n } \mathcal{B}\left\{\mathbf{x}_{1},\mathbf{x}_{2},\ldots,\mathbf{x}_{n}\right\} B{x1​,x2​,…,xn​}在施密特正交化过程中 q 1 x 1 ∣ ∣ x 1 ∣ ∣ q_1\frac{x_1}{||x_1||} q1​∣∣x1​∣∣x1​​ q k …

网页视频下载工具 iTubeGo mac中文版软件特色

iTubeGo YouTube Downloader mac是一款功能强大的YouTube视频下载工具。 iTubeGo YouTube Downloader mac软件特色 多种格式支持:iTubeGo YouTube Downloader可以将YouTube视频下载为多种常见的视频和音频格式,包括MP4、MP3、AVI、FLV、MOV、WMV等&…