题外知识点:
创建用户:
安装用户管理插件:
在 管理中的Configure Global Security 中选择授权策略:
此时再登陆cjz,就默认没有任何权限了:
我们添加用户模板user全部可读:
给cjz分配user模板:
再进来我们就有读的权限了:
根据项目添加管理角色,添加以mytest开头的项目,即精准匹配test:
,给他读的权限:
分配角色中:
此时再登进cjz用户,就可以看到mytest项目的相关内容了。这就是基于RBAC用户管理策略。
书接上文:我们在之前将拉取镜像和运行的任务分离了出来,部署在了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主机上的构建任务再分出来:
首先在server6上安装jdk:
接下来把 built-in-Node 即本机master的号改为0:
然后空闲进程就只有server6了。
现在server6做构建主机需要安装docker-ce:
安装完成之后别忘了 docker.conf 中的系统网桥设置。
连接私有仓库(server6的DNS解析):
安装git:
接下来我们先暂时禁用交付项目docker_project :
因为我们现在只要看jenkins构建的工作是否是在agent上构建的。
接下来测试构建任务是否是在agent server6上完成的。
mytest项目构建成功,这次构建完全是在server6上完成的。
我们先将之前的两个项目都禁掉:
接下来我们要做的是:不用之前的触发式的一个项目接一个项目构建,而是直接在流水线任务中完成构建镜像、上传、拉取、运行,并部署在不同的主机上。
可以看到运行后的结果是按照流水线式的方式:
我们可以点击 流水线语法 ,它会帮你生成声明式的脚本片段:
然后将生成的流水线语句放到我们的脚本中:
可以看到在/tmp/workspace/devops中初始化了git,我们设置了执行主机只有server6:
由于我们要在在远端主机上server5上运行镜像部署容器,我们要先做免密:
server6和server5的免密就已经做好了。server6通过本机的私钥访问server5 即可:
我们自己写一个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
"""
'''
}
}
}
}
手动触发项目进行构建:
构建完成。我们从web上访问刚刚建立的容器:
没有问题。说明我们整个流水线步骤是没有问题的。
我们也可以设置自动触发来触发这个pipline项目,接下来我们将设置,当我们的gitlab项目变动时,触发我们的流水线项目:
在高级中生成令牌:
复制此webhook的url和token,去gitlab 上设置webhooks:
添加成功:
可以看到第10次触发已经完成。接着在web端看运行的容器的发布页面有没有更改: