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

目录

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 anystages {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 $WORKSPACEdocker 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:latestdocker login reg.westos.org -u admin -p shg12345docker push $REPOSITORYdocker 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 myappdocker rmi reg.westos.org/library/webserver:latestdocker 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: alltasks:- name: install the latest version of Apacheyum:name: httpdstate: latest- name: configure apachetemplate:src: httpd.conf.j2dest: /etc/httpd/conf/httpd.confnotify: restart apache- name: Start service httpd, if not startedservice:name: httpdstate: startedenabled: yeshandlers:- name: restart apacheservice:name: httpdstate: 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.j2Listen {{ http_port }}

推送项目

jenkins新建项目playbook

选择参数构建

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

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

相关文章

shell: 遍历目录下的文件并查看

CRTDIR$(pwd) S"/" ls .| grep ifc | while read file doif test -f $filethenecho "#cat "$CRTDIR$S$filecat $CRTDIR$S$filefi done

【智能优化算法】从蚁群到动物园

目录 引言蚁群优化算法(ACO)ACO 机理ACO 模型描述ACO 移动策略 粒子群优化算法(PSO)PSO 机理PSO 模型描述 萤火虫群优化算法(GSO)GSO 机理GSO 模型描述 群智能优化算法 引言 21世纪,人类社会已经…

ElementUI用el-table实现表格内嵌套表格

文章目录 一、效果图二、使用场景三、所用组件元素(Elementui)四、代码部分 一、效果图 二、使用场景 🛀el-form 表单内嵌套el-table表格 🛀el-table 表格内又嵌套el-table表格 三、所用组件元素(Elementui&#xff…

Kubeadm部署Kubernetes Containerd集群

文章目录 概述一、硬件系统二、基础配置设置主机名配置主机名与IP地址解析关闭防火墙与selinux时间同步(ntp)升级系统内核配置内核转发及网桥过滤*安装ipset及ipvsadm关闭SWAP分区 三、Containerd准备Containerd获取下载解压Containerd配置文件生成并修改Containerd启动及开机自…

5年经验之谈 —— 性能测试如何定位分析性能瓶颈?

你好,我是小牛,目前在一家准一线互联网大厂做测试开发工程师。 对于一般公司普通测试工程师来说,可能性能测试做的并不是很复杂,可能只是编写下脚本,做个压测,然后输出报告结果,瓶颈分析和调优…

【Hello Go】Go语言复合类型

复合类型 分类指针基本操作new函数指针作为函数的参数 数组概述操作数据数组初始化数组比较在函数之间传递数组 slice概述切片的创建和初始化切片操作切片和底层数组关系内建函数appendcopy 切片作为函数传参 map概述创建和初始化常用操作赋值遍历 删除map作函数参数 结构体结构…

近期问题笔记20231116

DMA的洛伦兹约束的来源 多拉格朗日乘子的拉格朗日对偶问题的次梯度搜索 鲁棒优化,only statistical CSI of the users-to-RIS channels H 2 , k \mathbf{H}_{2,k} H2,k​ is available 期望符号的去除, 阅读这篇论文 C.-K. Wen, S. Jin, and K.-K. …

导数...

导数定义: f ′ ( x 0 ) lim ⁡ x → x 0 f ( x ) − f ( x 0 ) x − x 0 f(x_0)\lim\limits_{x\rightarrow{x_0}}\frac{f(x)-f(x_0)}{x-x_0} f′(x0​)x→x0​lim​x−x0​f(x)−f(x0​)​ 罗尔定理:如果函数在[a,b]可导,并且f(a)f(b),那么[a,b]区间内一定有个导数是0 中值…

Python (十三) 输出

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

基于Python+TensorFlow+Django的交通标志识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 随着交通网络的不断扩展和智能交通系统的发展,交通标志的自动识别变得愈发重要。本项目旨在利用Python编…

Redis--list列表

基础概念 元素必须是字符串类型列表头尾增删快,中间增删慢,增删元素是常态元素可以重复最多可以包含2^32 - 1个元素索引和python的列表一样 常用命令 - 增加数据 1.LPUSH key value1 value2 说明:从列表头部压入元素 返回:l…

矩阵转置

描述 输入N&#xff0c;和M&#xff0c;构建两个矩阵:A[N][M]&#xff0c;B[M][N]&#xff0c;M, N <50; 步骤1:输入M, N ; M, N <50; 步骤2:输入A[M][N]; 步骤3:计算:B[N][M]A[M][N]; 步骤4:输出:B [M] [N];这有几个测试组 输入 每个数字都是整数; 输入M, N; M, N <5…

利用SVD对图像进行压缩

利用SVD对图像进行压缩 使用SVD能够对数据进行降维&#xff0c;对图像进行SVD&#xff0c;降维之后然后重构数据&#xff0c;还原后的图像就是压缩后的图像。 SVD SVD进行图像压缩所依据的数学原理就是矩阵的近似表示&#xff1a; A m n ≈ U m k ∑ k k V k n T A_{m\…

基于晶体结构算法优化概率神经网络PNN的分类预测 - 附代码

基于晶体结构算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于晶体结构算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于晶体结构优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

Vue原型对象

原型对象 prototype 称为&#xff1a;显示的原型属性&#xff0c;用法&#xff1a;函数.prototype&#xff0c;例如&#xff1a;Vue.prototype __proto__称为&#xff1a;隐式的原型属性&#xff0c;用户&#xff1a;实例.proto&#xff0c;例如&#xff1a;vm.proto 不管如何 …

[Docker]八.Docker 容器跨主机通讯

一.跨主机通讯原理 在主机192.168.31.140上的docker0(172.17.0.0/16)中有一个容器mycentos( 172.17.0.2/16), 在主机192.168.31.81上的docker0(172.17.0.0/16)中有一个容器mycentos( 172.17.0.2/16),然后在主机192.168.31.140上ping主机192.168.31.81,发现ping不通要实现两个主…

vite构建项目不能使用require解决方案

在utils文件夹下创建一个getImgUrl.ts文件 /** vite的特殊性, 需要处理图片 */ export const require (imgPath: string) > {try {const handlePath imgPath.replace(, ..)console.log(handlePath::, imgPath)return new URL(handlePath, import.meta.url).href} catch (…

如何入驻抖音本地生活服务商,附上便捷流程!

抖音作为一款短视频社交媒体应用&#xff0c;已经成为全球范围内数以亿计的用户的首选。而在普及的同时&#xff0c;短视频领域也在不断拓展自身的业务领域&#xff0c;其中之一就是本地生活服务。继抖音本地生活服务之后支付宝、视频号也相继开展了本地生活服务&#xff0c;用…

Linux(5):Linux 磁盘与文件管理系统

认识 Linux 文件系统 磁盘的物理组成&#xff1a; 1.圆形的磁盘盘(主要记录数据的部分); 2.机械手臂&#xff0c;与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据)&#xff1b; 3.主轴马达&#xff0c;可以转动磁盘盘&#xff0c;让机械手臂的读取头在磁盘盘上读写数据。 4…

05_面对对象高级_抽象类

抽象类 1. 认识抽象类 在 Java 中有一个关键字叫&#xff1a;abstract &#xff0c;它的中文含义是"抽象"&#xff0c;可以用它来修饰类、成员方法。 abstract 修饰类&#xff0c;这个类就是抽象类。 abstract 修饰方法&#xff0c;这个方法就是抽象方法。 2. 注…