CICD 持续集成与持续交付——jenkins

部署

软件下载:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

[root@cicd2 ~]# rpm -ivh jdk-11.0.15_linux-x64_bin.rpm

[root@cicd2 ~]# yum install -y fontconfig

[root@cicd2 ~]# rpm -ivh jenkins-2.432-1.1.noarch.rpm

启动服务

[root@cicd2 ~]# systemctl enable --now jenkins.service
[root@cicd2 ~]# netstat -antlp|grep :8080

登录

192.168.92.22:8080

初始密码

[root@cicd2 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword

安装推荐插件

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

配置

修改密码

新建项目

在jenkins主机上安装git工具

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

创建密钥并上传gitlab

[root@cicd2 ~]# ssh-keygen

[root@cicd2 ~]# cat .ssh/id_rsa.pub

添加gitlab认证凭据

复制私钥

配置ssh

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

StrictHostKeyChecking no

构建触发器

构建任务

查看控制台输出

实时触发

安装gitlab插件

配置项目触发器

配置gitlab

再回到demo项目下配置

测试推送

添加jenkins节点

新建虚拟机cicd3

安装jdk和git

[root@cicd3 ~]# rpm -ivh jdk-11.0.15_linux-x64_bin.rpm

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

配置解析

[root@cicd3 ~]# cat /etc/hosts

在节点管理中添加节点

配置从节点

cicd3 ssh认证

关闭master节点的构建任务数

关闭git主机校验

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

自动化构建docker镜像

在cicd3上安装docker-ce

[root@cicd3 ~]# cd /etc/yum.repos.d/

[root@cicd3 yum.repos.d]# cat docker.repo

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

修改内核参数

[root@cicd3 ~]# 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@cicd3 ~]# sysctl --system

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

配置docker默认仓库

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

[root@cicd3 ~]# systemctl  restart docker

拷贝仓库证书

[root@k8s1 ~]# cd /etc/docker/

[root@k8s1 docker]# scp -r certs.d/ 192.168.92.23:/etc/docker/
[root@cicd3 ~]# ls /etc/docker/certs.d/reg.westos.org/ca.crt

测试

[root@cicd3 ~]# docker pull nginx

登录私有harbor仓库

[root@cicd3 ~]# docker login reg.westos.org

安装CloudBees Docker Build and Publish插件

配置项目构建

在server1上提交Dockerfile

[root@cicd1 dockerfile]# cat Dockerfile

[root@cicd1 demo]# git status -s

[root@cicd1 demo]# git add  Dockerfile

[root@cicd1 demo]# git commit -m "add Dockerfile"

[root@cicd1 demo]# git push -u origin main

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

通过ssh插件交付任务

jenkins安装ssh插件

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

新建ssh项目

当docker项目成功运行后触发ssh项目

构建后查看输出

RBAC

安装插件

修改默认授权策略

新建测试用户

新建角色

用户授权

使用不同的用户登录,测试权限是否正确

pipeline

安装ssh agent 插件

新建流水线项目 docker_image_build

复制一下脚本并做相应修改

pipeline {
    agent any

    stages {
        stage('check out') {
            steps {
                git credentialsId: 'e44734dd-bdce-4a18-9722-bc51ca25ddd6', url: 'git@192.168.92.21: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 westos
                docker push $REPOSITORY
                docker push reg.westos.org/library/webserver:latest
                '''
            }
        }
        stage('docker deploy') {
            steps {
		sshagent(credentials: ['044d5700-a59d-4f63-a241-7530117879c3']) {
                    sh '''
                    ssh -o StrictHostKeyChecking=no root@192.168.92.23 """
                    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

角色

cicd2

192.168.92.22

jenkins、ansible

cicd1

192.168.92.21

测试机test、devops sudo

cicd3

192.168.92.23

测试机prod、devops sudo

安装ansible

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

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

[root@cicd1 ~]# useradd devops

[root@cicd1 ~]# echo westos | passwd --stdin devops

[root@cicd1 ~]# visudo

​cicd3同上配置

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

[root@cicd2 ~]# usermod -s /bin/bash jenkins

[root@cicd2 ~]# su - jenkins

-bash-4.2$ ssh-keygen

-bash-4.2$ ssh-copy-id devops@192.168.92.21

-bash-4.2$ ssh-copy-id devops@192.168.92.23

新建gitlab项目

克隆项目

[root@cicd1 ~]# git clone git@192.168.92.21:root/playbook.git

[root@cicd1 ~]# cd playbook/

[root@cicd1 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@cicd1 playbook]# mkdir inventory

[root@cicd1 playbook]# cd inventory/
[root@cicd1 inventory]# vim test

[test]
192.168.92.21 http_port=8000
[root@cicd1 inventory]# vim prod

[prod]
192.168.92.23 http_port=8080
[root@cicd1 inventory]# cd ..

[root@cicd1 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@cicd1 playbook]# yum install -y httpd

[root@cicd1 playbook]# cp /etc/httpd/conf/httpd.conf .

[root@cicd1 playbook]# mv httpd.conf httpd.conf.j2

[root@cicd1 playbook]# vim httpd.conf.j2

推送项目

[root@cicd1 playbook]# git add .

[root@cicd1 playbook]# git status -s

[root@cicd1 playbook]# git commit -m "add playbook.yaml"

[root@cicd1 playbook]# git push -u origin main

jenkins新建项目playbook

选择参数构建

控制台输出

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(二)

文章目录 第三章 识别CAN中的隐藏带宽信道3.1 隐蔽带宽vs.隐藏带宽3.1.1 隐蔽通道3.1.2 隐藏带宽通道 3.2 通道属性3.3 CAN隐藏带宽信道3.3.1 CAN帧ID字段3.3.2 CAN帧数据字段3.3.3 帧错误检测领域3.3.4 时间通道3.3.5 混合通道 3.4 构建信道带宽公式3.5通道矩阵3.6 结论 第四章…

Python 自动化(十八)admin后台管理

admin后台管理 什么是admin后台管理 django提供了比较完善的后台数据库的接口,可供开发过程中调用和测试使用 django会搜集所有已注册的模型类,为这些模型类提供数据管理界面,供开发使用 admin配置步骤 创建后台管理账号 该账号为管理后…

深入理解注意力机制(上)-起源

一、介绍 近几年自然语言处理有很大的进展,从 2018 年 Google 推出的 BERT,到后来的 GPT、ChatGPT 等,这些模型当时能取得这样的成果,除了庞大的数据量及损害资源外,最重要的是的就是背后的Transformer模型&#xff0c…

C语言——操作符详解

前言:这篇文章主要讲解一下C语言中常见的操作符的使用,做一下整理,便于日后回顾,同时也希望能帮助到大家。 🎬个人简介:努力学习ing 📝CSDN主页 愚润求学 🌄每日鸡汤:念…

黑马程序员 计算机网络(笔记)

参考文章:【黑马程序员】计算机网络概述~ 程序员必须掌握的入门基础知识! 参考文章:黑马程序员Linux运维工作场景解决方案零基础到就业 参考文章:网络安全运维进阶教程,运维工程师深度学习教程 文章目录 linux入门到…

2023.11.17使用flask将多个图片文件上传至服务器

2023.11.17使用flask将多个图片文件上传至服务器 实现功能: 1、同时上传多个图片文件 2、验证文件扩展名 3、显示上传文件的文件名 4、显示文件上传结果 程序结构 main.py from flask import Flask, request, jsonify, render_template import osapp Flask(__n…

Android 10.0 系统修改usb连接电脑mtp和PTP的显示名称

1.前言 在10.0的产品定制化开发中,在usb模块otg连接电脑,调整为mtp文件传输模式的时候,这时可以在电脑看到手机的内部存储 显示在电脑的盘符中,会有一个mtp名称做盘符,所以为了统一这个名称,就需要修改这个名称,接下来分析下处理的 方法来解决这个问题 2.系统修改usb连…

[AutoSar]工程中的cpuload陷阱(三)测试

目录 关键词平台说明背景一、 测试结果对比1.1 不带cache1.2 带cache 二、小结 关键词 嵌入式、C语言、autosar 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C,C编译器HighTec (GCC) 背景 接着工程中的cpuload陷阱(二)中的描述…

装饰模式 rust和java的实现

装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。 装饰器模式通过将对象包装在装饰器类中,以便动态地修改其行为。 这种模式创建了一个装饰类,用来包装原有的类&am…

(数据库管理系统)DBMS与(数据库系统)DBS的区别

数据库管理系统(DBMS,Database Management System)和数据库系统(DBS,Database System)是两个相关但不同的概念。 DBS是一个更广泛的概念,指的是计算机系统引入数据库后的系统,包括数…

翻译软件Mate Translate mac中文版介绍说明

Mate Translate mac可以帮你翻译超过100种语言的单词和短语,使用文本到语音转换,并浏览历史上已经完成的翻译。你还可以使用Control S在弹出窗口中快速交换语言。 Mate Translate Mac版软件介绍 Mate Translate 可以在你的所有设备之间轻松同步&#x…

微机原理练习题_13

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案。) 1、十六进制数5BF.C8转换成二进制数是() A. 11011100111111101B B. 010111011011.01101B C. 010110111111.11001B D. 010111011011.11001B 2,最适合…

Ps:变换

可以向选区、整个图层、多个图层或图层蒙版应用变换 Transform,还可以向路径、矢量形状、矢量蒙版、选区边界或 Alpha 通道应用变换。 若要变换栅格(像素)图像,建议先将其转换为智能对象,以便进行非破坏性的变换。 Ps菜…

Python编程技巧 – 使用字符串(Strings)

Python编程技巧 – 使用字符串(Strings) Python Programming Essentials – Using Strings 本文简要介绍如何使用字符串,来进行Python编程。字符串有很多用途,包括输出结果、反馈状态、数据处理以及切片和文本筛选等 1. 字符串 字符串(St…

NSS [鹤城杯 2021]Middle magic

NSS [鹤城杯 2021]Middle magic 源码直接给了。 粗略一看&#xff0c;一共三个关卡 先看第一关&#xff1a; if(isset($_GET[aaa]) && strlen($_GET[aaa]) < 20){$aaa preg_replace(/^(.*)level(.*)$/, ${1}<!-- filtered -->${2}, $_GET[aaa]);if(preg_m…

nodejs微信小程序-实验室上机管理系统的设计与实现-安卓-python-PHP-计算机毕业设计

用户&#xff1a;管理员、教师、学生 基础功能&#xff1a;管理课表、管理机房情况、预约机房预约&#xff1b;权限不同&#xff0c;预约类型不同&#xff0c;教师可选课堂预约和个人&#xff1b;课堂预约。 目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 …

深入理解注意力机制(下)——缩放点积注意力及示例

一、介绍 在这篇文章中&#xff0c;我们将重点介绍 Transformer 背后的 Scaled Dot-Product Attention&#xff0c;并详细解释其计算逻辑和设计原理。 在文章的最后&#xff0c;我们还会提供一个Attention的使用示例&#xff0c;希望读者看完后能够对Attention有更全面的了解。…

ICASSP2023年SPGC多语言AD检测的论文总结

文章目录 引言正文AbstractRelated ArticleNo.1: CONSEN: COMPLEMENTARY AND SIMULTANEOUS ENSEMBLE FOR ALZHEIMERSDISEASE DETECTION AND MMSE SCORE PREDICTION特征相关模型结构数据处理结果分析 No.2: CROSS-LINGUAL TRANSFER LEARNING FOR ALZHEIMERS DETECTION FROM SPON…

【Flink】窗口(Window)

窗口理解 窗口&#xff08;Window&#xff09;是处理无界流的关键所在。窗口可以将数据流装入大小有限的“桶”中&#xff0c;再对每个“桶”加以处理。 本文的重心将放在 Flink 如何进行窗口操作以及开发者如何尽可能地利用 Flink 所提供的功能。 对窗口的正确理解&#xff…

函数式编程框架 functionaljava 简介

文章目录 一、函数式编程起源二、functionaljava 框架简介 一、函数式编程起源 ​ 函数式编程起源于数理逻辑&#xff08;范畴论&#xff0c;Category Theory&#xff09;&#xff0c;起源于λ演算&#xff0c;这是一种演算法&#xff0c;它定义一些基础的数据结构&#xff0c…