持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务

 一、jenkins使用之用户管理

题外知识点:

创建用户:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第1张图片

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第2张图片

安装用户管理插件:

 持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第3张图片

在 管理中的Configure Global Security 中选择授权策略:

 持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第4张图片

此时再登陆cjz,就默认没有任何权限了:

 持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第5张图片

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第6张图片

 我们添加用户模板user全部可读:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第7张图片

 给cjz分配user模板:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第8张图片

再进来我们就有读的权限了:

 持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第9张图片

根据项目添加管理角色,添加以mytest开头的项目,即精准匹配test:

,给他读的权限: 

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第10张图片

分配角色中:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第11张图片

 此时再登进cjz用户,就可以看到mytest项目的相关内容了。这就是基于RBAC用户管理策略。

二、分布式构建CI/CD系统----分离构建镜像任务 

书接上文:我们在之前将拉取镜像和运行的任务分离了出来,部署在了server5上,接下来我们再把构建镜像的任务分离出来部署在server6上,让jenkins主机主机只负责触发并分发任务。

主机名称 IP地址 功能
server3 172.25.254.3 作为gitlab服务器
server4 172.25.254.4 作为jenkins服务器
server1 172.25.254.1 harbor仓库
server5 172.25.254.5 完成拉取镜像并运行
server6 172.25.254.6 构建镜像

我们再启一个虚拟机server6,将jenkins主机上的构建任务再分出来:

安装openjdk

首先在server6上安装jdk:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第12张图片

在jenkins上新建节点

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第13张图片持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第14张图片 

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第15张图片持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第16张图片 保存。

使jenkins主机没有从节点

接下来把 built-in-Node 即本机master的号改为0:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第17张图片

然后空闲进程就只有server6了。

 持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第18张图片

server6环境配置

现在server6做构建主机需要安装docker-ce:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第19张图片

安装完成之后别忘了 docker.conf 中的系统网桥设置。

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第20张图片

连接私有仓库(server6的DNS解析):

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第21张图片

安装git:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第22张图片

接下来我们先暂时禁用交付项目docker_project :

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第23张图片

因为我们现在只要看jenkins构建的工作是否是在agent上构建的。

测试

接下来测试构建任务是否是在agent server6上完成的。

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第24张图片

mytest项目构建成功,这次构建完全是在server6上完成的。

三、jenkins 创建流水线任务

我们先将之前的两个项目都禁掉:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第25张图片

接下来我们要做的是:不用之前的触发式的一个项目接一个项目构建,而是直接在流水线任务中完成构建镜像、上传、拉取、运行,并部署在不同的主机上。

新建流水线任务

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第26张图片

测试用例

我们先使用最简单的脚本式的例子来做:
 持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第27张图片

可以看到运行后的结果是按照流水线式的方式:

 持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第28张图片

自动生成流水线脚本

我们可以点击 流水线语法 ,它会帮你生成声明式的脚本片段:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第29张图片

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第30张图片

我们通过命令行输入来生成命令行脚本:
 持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第31张图片

然后将生成的流水线语句放到我们的脚本中:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第32张图片 然后保存进行构建,成功后可以查看第一阶段的logs:持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第33张图片

可以看到在/tmp/workspace/devops中初始化了git,我们设置了执行主机只有server6:

server5和server6做免密

由于我们要在在远端主机上server5上运行镜像部署容器,我们要先做免密:
持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第34张图片

server6和server5的免密就已经做好了。server6通过本机的私钥访问server5 即可:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第35张图片

编写pipline脚本

我们自己写一个pipline脚本来完成从gitlab上拉取项目,构建镜像并推送私有仓库,然后将其在远端主机上部署: 

pipeline {
    agent any

    stages {
        stage('check out') {
            steps {
                git branch: 'main', credentialsId: 'b028ecf3-f9fa-4ff0-b882-67e0af906c85', url: '[email protected]:root/project1.git'
            }
        }
        stage('build image and push') {
            steps {
                sh '''
                    cd $WORKSPACE
                    docker build -t reg.westos.org/library/demo:${BUILD_NUMBER} .
                    docker login reg.westos.org -u admin -p westos
                    docker push reg.westos.org/library/demo:${BUILD_NUMBER}
                    docker tag reg.westos.org/library/demo:${BUILD_NUMBER} reg.westos.org/library/demo:latest
                    docker push reg.westos.org/library/demo:latest
                '''
            }
        }
        stage('docker deploy') {
            steps {
                sh '''
                    ssh -i /root/.ssh/id_rsa [email protected] """
                    docker ps -a | grep devops_test && docker rm -f devops_test
                    docker rmi demo:latest
                    docker run -d --name devops_test -p 80:80 demo:latest
                    """
                '''
            }
        }
    }
}

 手动触发项目进行构建:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第36张图片

 构建完成。我们从web上访问刚刚建立的容器:

 没有问题。说明我们整个流水线步骤是没有问题的。

四、gitlab文件更改触发流水线任务

我们也可以设置自动触发来触发这个pipline项目,接下来我们将设置,当我们的gitlab项目变动时,触发我们的流水线项目:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第37张图片

 在高级中生成令牌:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第38张图片

复制此webhook的url和token,去gitlab 上设置webhooks:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第39张图片

添加成功:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第40张图片 接下来我们更改gitlab的project中的文件:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第41张图片

我们直接看jenkins中有没有被触发:
持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第42张图片

可以看到第10次触发已经完成。接着在web端看运行的容器的发布页面有没有更改:

持续集成与持续交付(CI/CD)(四)用户管理、分布式构建、创建流水线任务_第43张图片 可以看到已经更改了,说明整套触发构建的逻辑没有问题。

你可能感兴趣的:(git,gitlab,分布式,jenkins)