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.hqwc.cn/news/193993.html

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

相关文章

【HarmonyOS开发】配置开发工具DevEco Studio

1、下载 注意: 1、安装过程中,一定要自定义安装位置,包比较大,包比较大,包比较大!!! 2、可以将该工具添加到右键中,否则,如果你的项目不是HarmonyOS&#xff…

Java工具包Hutool框架

Hutool是一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML 等 JDK 方法进行封装,组成各种 Util 工具类。官网地址:https://www.hutool.cn/。 添加依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artif…

漂亮的pyqt6皮肤 PyOneDark_Qt_Widgets_Modern_GUIPublic

大家先看看界面图&#xff0c;真的很漂亮&#xff1a; github地址&#xff1a;GitHub - Wanderson-Magalhaes/PyOneDark_Qt_Widgets_Modern_GUI 作者还录了教程&#xff1a; TUTORIALS: Tutorial 01: https://youtu.be/QQGlTGYCMg0 Tutorial 02: https://youtu.be/LwKre2proDk…

遥感数据

在研究中&#xff0c;我们常需要遥感数据。在下面的网站中&#xff0c;可以得到遥感数据。 EarthExplorer (usgs.gov)https://earthexplorer.usgs.gov/登陆网站&#xff1a; 通常&#xff0c;在Additional Criteria中&#xff0c;可以下载遥感数据。 不过&#xff0c;这个选项…

SpringCloud微服务注册中心:Nacos介绍,微服务注册,Ribbon通信,Ribbon负载均衡,Nacos配置管理详细介绍

微服务注册中心 注册中心可以说是微服务架构中的”通讯录“&#xff0c;它记录了服务和服务地址的映射关系。在分布式架构中&#xff0c;服务会注册到这里&#xff0c;当服务需要调用其它服务时&#xff0c;就这里找到服务的地址&#xff0c;进行调用。 微服务注册中心 服务注…

Argo Rollouts结合Service进行Blue-Green部署

删除03 部署04 rootk8s-master01:~/learning-jenkins-cicd/09-argocd-and-rollout/rollout-demos# kubectl delete -f 03-rollouts-with-prometheus-analysis.yaml rootk8s-master01:~/learning-jenkins-cicd/09-argocd-and-rollout/rollout-demos# kubectl apply -f 04-rol…

【具身智能评估2】具身视觉语言规划(EVLP)数据集基准汇总

参考论文&#xff1a;Core Challenges in Embodied Vision-Language Planning 论文作者&#xff1a;Jonathan Francis, Nariaki Kitamura, Felix Labelle, Xiaopeng Lu, Ingrid Navarro, Jean Oh 论文原文&#xff1a;https://arxiv.org/abs/2106.13948 论文出处&#xff1a;Jo…

Hive语法,函数--学习笔记

1&#xff0c;排序处理 1.1cluster by排序 &#xff0c;在Hive中使用order by排序时是全表扫描&#xff0c;且仅使用一个Reduce完成。 在海量数据待排序查询处理时&#xff0c;可以采用【先分桶再排序】的策略提升效率。此时&#xff0c; 就可以使用cluster by语法。 cluster…

Java调用com组件之jacob

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

大模型的视觉能力

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

集合框架面试题

一、集合容器的概述 1. 什么是集合 集合框架&#xff1a;用于存储数据的容器。 集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。 任何集合框架都包含三大块内容&#xff1a; 对外的接口、接口的实现和对集合运算的算 法。 接口&#xff1a;表示集合的抽象数据…

[ 一刷完结撒花!! ] Day50 力扣单调栈 : 503.下一个更大元素II |42. 接雨水 | 84.柱状图中最大的矩形

Day50 力扣单调栈 : 503.下一个更大元素II &#xff5c;42. 接雨水 | 84.柱状图中最大的矩形 503.下一个更大元素II第一印象看完题解的思路实现中的困难感悟代码 42. 接雨水第一印象看完题解的思路暴力解法单调栈解法 实现中的困难感悟代码 84.柱状图中最大的矩形第一印象看完…