CI/CD - jenkins

目录

一、部署

1、简介

2、部署

二、配置

三、实时触发

四、自动化构建docker镜像

五、通过ssh插件交付任务

六、添加jenkins节点

七、RBAC

八、pipeline

九、jenkins结合ansible参数化构建

1、安装ansible

2、新建gitlab项目

3、jenkins新建项目playbook


一、部署

1、简介

  • Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
  • Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
  • CI(Continuous integration持续集成持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试

CI/CD - jenkins_第1张图片

  • CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中CI/CD - jenkins_第2张图片

2、部署

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

rpm -ivh jdk-11.0.15_linux-x64_bin.rpm
yum install -y fontconfig
rpm -ivh jenkins-2.395-1.1.noarch.rpm

CI/CD - jenkins_第3张图片

启动服务:

systemctl enable --now jenkins.service
netstat -antlp|grep :8080

登录:

http://192.168.67.22:8080/

初始密码:

cat /var/lib/ienkins/secrets/initialAdminPassword

CI/CD - jenkins_第4张图片

安装推荐插件

CI/CD - jenkins_第5张图片

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

CI/CD - jenkins_第6张图片CI/CD - jenkins_第7张图片

二、配置

修改密码:

CI/CD - jenkins_第8张图片

新建项目:

CI/CD - jenkins_第9张图片CI/CD - jenkins_第10张图片当是这个错误时:

CI/CD - jenkins_第11张图片在jenkins主机上安装git工具:

yum install -y git

CI/CD - jenkins_第12张图片当是这个错误时:

CI/CD - jenkins_第13张图片

 创建密钥并上传gitlab:

ssh-keygen

CI/CD - jenkins_第14张图片CI/CD - jenkins_第15张图片添加gitlab认证凭据:

CI/CD - jenkins_第16张图片复制私钥:

CI/CD - jenkins_第17张图片CI/CD - jenkins_第18张图片

当是这个错误时:

CI/CD - jenkins_第19张图片

配置ssh

CI/CD - jenkins_第20张图片构建触发器

CI/CD - jenkins_第21张图片构建任务

CI/CD - jenkins_第22张图片指定分支

CI/CD - jenkins_第23张图片查看控制台输出

CI/CD - jenkins_第24张图片

测试:

上传

CI/CD - jenkins_第25张图片CI/CD - jenkins_第26张图片CI/CD - jenkins_第27张图片

三、实时触发

安装gitlab插件

CI/CD - jenkins_第28张图片

配置项目触发器:

CI/CD - jenkins_第29张图片CI/CD - jenkins_第30张图片配置gitlab:

CI/CD - jenkins_第31张图片CI/CD - jenkins_第32张图片再回到demo项目下配置

CI/CD - jenkins_第33张图片

将前面生成的token输入

CI/CD - jenkins_第34张图片CI/CD - jenkins_第35张图片测试推送:

CI/CD - jenkins_第36张图片CI/CD - jenkins_第37张图片

四、自动化构建docker镜像

安装docker-ce

cd /etc/yum.repos.d/
vim 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

yum install -y docker-ce

CI/CD - jenkins_第38张图片

 修改内核参数

CI/CD - jenkins_第39张图片CI/CD - jenkins_第40张图片配置docker默认仓库

CI/CD - jenkins_第41张图片

拷贝仓库证书

添加解析

CI/CD - jenkins_第42张图片

测试拉取

CI/CD - jenkins_第43张图片

安装CloudBees Docker Build and Publish插件

CI/CD - jenkins_第44张图片

配置项目构建

CI/CD - jenkins_第45张图片高级里边

CI/CD - jenkins_第46张图片

修改docker.sock权限,不然jenkins无法直接执行docker命令

把主机上的docker login信息拷贝到Jenkins上

docker login reg.westos.org

cp -r /root/.docker/ /var/lib/jenkins/
cd /var/lib/jenkins/
chown -R jenkins.jenkins .docker/

CI/CD - jenkins_第47张图片

在cicd1上提交Dockerfile

vim Dockerfile

FROM nginx
COPY index.html /usr/share/nginx/html

echo www.yyl.org >> index.html


git add .
git commit -m "add Dockerfile"
git push -u origin main

CI/CD - jenkins_第48张图片CI/CD - jenkins_第49张图片CI/CD - jenkins_第50张图片

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

CI/CD - jenkins_第51张图片

CI/CD - jenkins_第52张图片

五、通过ssh插件交付任务

新建测试虚拟机cicd3 上安装docker-ce

同上

安装

修改内核参数CI/CD - jenkins_第53张图片

拷贝仓库证书

jenkins安装ssh插件

CI/CD - jenkins_第54张图片

进入系统配置,添加ssh主机  添加新的凭据

CI/CD - jenkins_第55张图片CI/CD - jenkins_第56张图片CI/CD - jenkins_第57张图片

新建docker_test项目

CI/CD - jenkins_第58张图片

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

CI/CD - jenkins_第59张图片CI/CD - jenkins_第60张图片

构建后查看输出

测试

CI/CD - jenkins_第61张图片

触发

CI/CD - jenkins_第62张图片

六、添加jenkins节点

安装jdk和git

rpm -ivh jdk-11.0.15_linux-x64_bin.rpm
yum install -y git
配置解析
安装ssh agent
CI/CD - jenkins_第63张图片
在节点管理中添加节点
CI/CD - jenkins_第64张图片 CI/CD - jenkins_第65张图片 CI/CD - jenkins_第66张图片 CI/CD - jenkins_第67张图片
关闭master节点的构建任务数
CI/CD - jenkins_第68张图片
CI/CD - jenkins_第69张图片
关闭git主机校验
CI/CD - jenkins_第70张图片 CI/CD - jenkins_第71张图片
登录
CI/CD - jenkins_第72张图片
最后测试构建,构建任务会在cicd3节点上运行
CI/CD - jenkins_第73张图片 CI/CD - jenkins_第74张图片
在cicd3节点上
CI/CD - jenkins_第75张图片

七、RBAC

安装插件

CI/CD - jenkins_第76张图片

修改默认授权策略

CI/CD - jenkins_第77张图片

新建测试用户

CI/CD - jenkins_第78张图片

 新建角色

CI/CD - jenkins_第79张图片CI/CD - jenkins_第80张图片CI/CD - jenkins_第81张图片

用户授权

CI/CD - jenkins_第82张图片CI/CD - jenkins_第83张图片

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

CI/CD - jenkins_第84张图片CI/CD - jenkins_第85张图片CI/CD - jenkins_第86张图片CI/CD - jenkins_第87张图片

八、pipeline

添加ssh

CI/CD - jenkins_第88张图片CI/CD - jenkins_第89张图片

新建流水线项目 docker_image_build

CI/CD - jenkins_第90张图片

配置

pipeline {
    agent any

    stages {
        stage('check out') {
            steps {
                git credentialsId: 'f3a3dc6f-e7d6-45ae-9336-43dca000fcee', url: '[email protected]:gitlab-instance-ae16f24d/demo.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 123456
                docker push $REPOSITORY
                docker push reg.westos.org/library/webserver:latest
                '''
            }
        }
        stage('docker deploy') {
            steps {
		sshagent(credentials: ['74dcb735-12f0-419f-aa0c-880ce3a763e9']) {
                    sh '''
                    ssh -o StrictHostKeyChecking=no [email protected] """
                    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 """
                    '''
                }
            }
        }
    }
}

CI/CD - jenkins_第91张图片CI/CD - jenkins_第92张图片

九、jenkins结合ansible参数化构建

主机环境

主机

IP

角色

cicd1

192.168.67.21

测试机test、devops sudo

cicd2 192.168.67.22

jenkins、ansible

cicd3

192.168.67.23

测试机prod、devops sudo

1、安装ansible

vim /etc/yum.repos.d/ansible.repo


[ansible]
name=epel
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/
gpgcheck=0
 
yum install -y ansible

CI/CD - jenkins_第93张图片

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

useradd devops
echo westos | passwd --stdin devops
visudo

devops  ALL=(ALL)       NOPASSWD: ALL

CI/CD - jenkins_第94张图片

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

usermod -s /bin/bash jenkins
su - jenkins

ssh-copy-id [email protected]
ssh-copy-id [email protected]

CI/CD - jenkins_第95张图片

2、新建gitlab项目

CI/CD - jenkins_第96张图片

克隆项目

git clone [email protected]:root/playbook.git
cd 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

mkdir inventory
cd inventory/

vim test

[test]
192.168.67.21 http_port=8000

vim prod

[prod]
192.168.67.23 http_port=8080

cd ..

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

yum install -y httpd
cp /etc/httpd/conf/httpd.conf .
mv httpd.conf httpd.conf.j2
vim httpd.conf.j2

修改端口
Listen {{ http_port }}


CI/CD - jenkins_第97张图片

推送项目

git add .
git commit -m "add playbook"
git push -u origin main

CI/CD - jenkins_第98张图片CI/CD - jenkins_第99张图片

3、jenkins新建项目playbook

新建:

CI/CD - jenkins_第100张图片CI/CD - jenkins_第101张图片CI/CD - jenkins_第102张图片CI/CD - jenkins_第103张图片

选择参数构建:

CI/CD - jenkins_第104张图片CI/CD - jenkins_第105张图片CI/CD - jenkins_第106张图片

CI/CD - jenkins_第107张图片 

CI/CD - jenkins_第108张图片 

添加首页:

echo cicd1 > /var/www/html/index.html
echo cicd3 > /var/www/html/index.html

 

测试:

你可能感兴趣的:(ci/cd,ci/cd,jenkins,运维)