云计算赛项第二场-容器云-江苏卷-任务3
【任务3】基于Kubernetes 构建持续集成
【题目1】安装Jenkins 环境[2 分]
在master 节点上使用镜像jenkins/Jenkins:2.262-centos部署Jenkins 服务,具体要求如下:
(1)容器名称:jenkins;
(2)端口映射:8080:8080;
(3)使用root 身份生成容器;
(4)离线安装Jenkins 插件;
(5)设置Jenkins 用户:chinaskill;密码:000000;
(6)在授权策略中配置“任何用户可以做任何事(没有任何限制)”。
使用chinaskill 用户登录Jenkins,完成后提交master 节点的用户名、密码和IP 到答题框。
创建挂载目录
mkdir -p /home/jenkins_home
1 2 3 4 5 6 7
| docker run -d --name jenkins -p 8080:8080 -u root \ -v /home/jenkins_home/:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker \ -v /usr/bin/kubectl:/usr/local/bin/kubectl \ -v /root/.kube/:/root/.kube/ \ --restart always jenkins/jenkins:2.262-centos
|
离线安装插件
cp -rf /opt/plugins/* /home/jenkins_home/plugins/
重启容器
docker restart jenkins
进入容器
docker exec -it jenkins bash
查看密码
cat /var/jenkins_home/secrets/initialAdminPassword
浏览器输入192.168.20.132:8080
输入密码>选择插件来安装>取消所有选择>安装
【题目2】安装Gitlab 环境[1 分]
在master 节点上使用镜像gitlab/gitlab-ce:12.9.2-ce.0部署Gitlab 服务,具体要求如下:
(1)容器名称:gitlab;
(2)端口映射:1022:22、81:80、443:443;
(3)容器重启策略:always;
(4)设置root 用户及密码;
(5)使用root 用户登录Gitlab,密码:00000000;
(6)新建项目Springcloud,将/opt/ChinaskillProject 中的代码上传到ChinaskillProject 项目中。
完成后提交master 节点的用户名、密码和IP 到答题框。
创建挂载目录
mkdir -k /home/gitlab{config,logs,data}
1 2 3 4 5 6
| docker run -d -h gitlab -p 1022:22 -p 81:80 -p 443:443 \ -v /home/gitlab/config/:/etc/gitlab \ -v /home/gitlab/logs/:/var/log/gitlab \ -v /home/gitlab/data/:/var/opt/gitlab \ --restart always --privileged=true \ --name mygitlab gitlab/gitlab-ce:12.9.2-ce.0
|
确实密码为00000000
用户名为root,密码为00000000
新建项目
项目名为ChinaskillProject
安装git
yum install -y git
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
git clone http://192.168.20.132:443/root/chinaskillproject.git
查看是否克隆到本地
将/opt/ChinaskillProject 中的代码上传到ChinaskillProject 项目中。
cd chinaskillproject
cp -rf /opt/ChinaskillProject/* /root/chinaskillproject/
git add .
git commit -m "add README"
git push -u origin master
【题目3】配置Jenkins 连接Gitlab[1 分]
配置Jenkins 连接Gitlab,具体要求如下:
(1)设置Outbound requests;
(2)生成“Access Tokens”并命名为jenkins;
(3)设置Jenkins 取消对’/project’ end-point 进行身份验证;
(4)测试Jenkins 与Gitlab 的连通性。
完成后提交master 节点的用户名、密码和IP 到答题框。
设置Outbound requests
【题目3】配置Jenkins 连接Gitlab[1 分]
配置Jenkins 连接Gitlab,具体要求如下:
(1)设置Outbound requests;
(2)生成“Access Tokens”并命名为jenkins;
(3)设置Jenkins 取消对’/project’ end-point 进行身份验证;
(4)测试Jenkins 与Gitlab 的连通性。
完成后提交master 节点的用户名、密码和IP 到答题框。
设置Outbound requests
复制访问令牌
测试Jenkins 与Gitlab 的连通性
访问令牌复制到API token
点击Test Connection
4.配置Jenkins连接maven
采用docker in docker的方式在Jenkins内安装maven
1 2 3 4 5 6 7 8 9 10 11 12 13
| [root@master ~]# cp /opt/ChinaskillMall/apache-maven-3.6.3-bin.tar.gz /root/jenkins/ [root@master ~]# docker exec -it jenkins bash [root@b957b62337cc]# tar -zxvf /var/jenkins_home/apache-maven-3.6.3-bin.tar.gz -C . [root@2927036f2450]# mv apache-maven-3.6.3 /usr/local/maven //配置maven环境变量 [root@b957b62337cc]# vi /etc/profile export M2_HOME=/usr/local/maven export PATH=$PATH:$M2_HOME/bin [root@2927036f2450 /]# vim /root/.bashrc if [ -f /etc/bashrc ]; then . /etc/bashrc source /etc/profile fi
|
在Jenkins中配置maven信息
Dashboard-全局工具配置
5.配置CI/CD
新建流水线任务
勾选Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.20.102:8080/project/ChinaskillProject
复制 secret token
生成ssh密钥
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| [root@master ~]# cd ChinaskillProject/ [root@master ChinaskillProject]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa already exists. Overwrite (y/n)? [root@master ChinaskillProject]# cd .. [root@master ~]# cat /root/.ssh/id_rsa -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAz5EcPpwUTM4IPR1wpi2u7l3nelQi29eXjLXhQI9swCgHxu+M tAl0kQJvFOPAg7DUxTjForAVAMkzZljDd4uTV+VCairuFeXApyM+LokxZkvJsvsH upXwVqvGEifGP+tQbC9tPhIQ2a1aRZBiSYetuDjZdjwQcxgARfgJjqeH7Rw5red8 V4e7VgF8e6RBVJycSVqfuysxyFVBsUCS1vHAK7GvjmfoUJ/t8mv4s/ClL+PzzZe4 dUO3OftAKU6qIFrpf6kC57/LsZmNWWBy9suYXpK+92Yo8cOwtBkdBtGJSo5EblzA hUQjSftoC9SuTw3wN6DwwV5RcqUe99vDYVSVowIDAQABAoIBACB4Rr7Uk6hgIpHM 5S5Zvx+yuN8+AiX5188/NHlw9kYo/O510sDnKcD1bIMMDbWMF/yyINiOSvrQfqXo BMvSnb4GMxmAlbX/Nt/ud2+4Lm4eNPM2qcLaabplLJrydeTR3sbNtH0dPl2O7Kwt JfLyso469mm0g649du17G6OhOXYxyATNMX7AnNFRpH5zKft+FhSpVNxdAoOEYMKt 1ucUf5GoWCnbrl0caaXyLqlRGAuTa3+EqlaQXhOv7cq5L13v6xbSDpCHh0krnKk6 G/4Ui+styCVM7Dm0imMztRGULE6pIwnV/MLeDYBfhSjWckXm1ofgt3TPDQ+vQqqW yqrtz+ECgYEA6DRDdirL+pA2jf0yZR2v60L3+AIUoVyn3EkqTVmiEqEDGj1drK8t U9/f/QiTPVIlq17GN6iErvMCM9E11/d0EKTiTDe2T4dmu7fEL5KUpndMCJeHZzL1 Ythq5AVfnfxShJx+RI5VY/p+VLNWSCcIIFenK4BBC7O12o74ENOHeS8CgYEA5NaA aI+QnUQVTJTTvBX2JB8SNh0fyArRi/wmA3Gj0CWz1OMSnhhwVeS0a6aTm7BPVgsh kBnjX6xnYccXq4bo0bHLrFXKXRVzTCquNjPCCC8mRG5TlO6hdFHKLuKmaRZc3jW5 9kzC/Ub5F4gl0zhGoBAjVqVVj0qQHrUp4kFHZc0CgYA5nF3wf4XEUOt4Jw3N0KPI 9wCW481Ci76KBQ0dy9NOU+x1IiyPn5bbbHwiR3JgkHUQI5+CR6lDzr8JJCr7vkVp q78Jsfjlmm5+vIVMWE3RT1/p8c6CaD5Bm/hJQpwKkoPWqw0Y7Ud6WrflQ+lwVV7K x3SOcm+w+5Fu/HHHmvPNuQKBgHYpDETxXIrYDOduMaZ88IvWP2ERyMdSTsEpgbdl hmCEF0dluMdJdzfi0AaGDNHnSA/1z27I708HhppGY0J+dtlQJQrngYZu/QnnP+1c 7GOtdOUA0sekMFoPoYZ0IdlBYtKai1tSZ5zAeP5dnqph9JXRv22OEY/bwG8avHXH n0ZBAoGBAJc5nHZXXFCLiBw6af+3yOJXWzH6D8XqHbedoCEg9gKIld9mL5XKvX7S 5ul60aLUrOS/CTrPNVaeD9RI+mLFevZ72cGfB/+MYaeT7+IjtzxjbZixyCl8K1An F15HoJX0BWon5FTqp06Fdy3Y4fPgqwwO2/IdAkOGi8AxKftwWLfC -----END RSA PRIVATE KEY-----
|
复制密钥
写流水线脚本
构建微服务项目中的gateway和config服务,
将构建后的镜像自动上传到Harbor仓库,
并自动发布gateway和config服务到Kubernetes集群的springcloud命名空间下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| node{ stage('git clone'){ //check CODE 从代码仓库克隆 git credentialsId: '7fc32029-1f4f-4b77-a161-47dc4dae39ef', url: 'http://192.168.20.102:81/root/ChinaskillProject.git' }
stage('maven build'){
//maven编译 sh '''/usr/local/maven/bin/mvn package -DskipTests -f /var/jenkins_home/workspace/ChinaskillProject''' }
stage('image build'){
//构建镜像,并将镜像ID变量作为tag sh ''' echo $BUILD_ID docker build -t 192.168.20.102/chinaskillproject/gateway:$BUILD_ID -f /var/jenkins_home/workspace/ChinaskillProject/gateway/Dockerfile /var/jenkins_home/workspace/ChinaskillProject/gateway docker build -t 192.168.20.102/chinaskillproject/config:$BUILD_ID -f /var/jenkins_home/workspace/ChinaskillProject/config/Dockerfile /var/jenkins_home/workspace/ChinaskillProject/config''' }
stage('upload registry'){
//上传构建完成的镜像到harbor镜像仓库 sh '''docker login 192.168.20.102 -u=admin -p=Harbor12345 docker push 192.168.20.102/chinaskillproject/gateway:$BUILD_ID docker push 192.168.20.102/chinaskillproject/config:$BUILD_ID''' }
stage('deploy k8s'){ //创建命名空间,部署yaml脚本到k8s集群 sh 'sed -i "s/sqshq\\/piggymetrics-gateway/192.168.20.102\\/chinaskillproject\\/gateway:$BUILD_ID/g" /var/jenkins_home/workspace/ChinaskillProject/yaml/deployment/gateway-deployment.yaml' sh 'sed -i "s/sqshq\\/piggymetrics-config/192.168.20.102\\/chinaskillproject\\/config:$BUILD_ID/g" /var/jenkins_home/workspace/ChinaskillProject/yaml/deployment/config-deployment.yaml' sh 'kubectl create ns springcloud' sh 'kubectl apply -f /var/jenkins_home/workspace/ChinaskillProject/yaml/deployment/gateway-deployment.yaml --kubeconfig=/root/.kube/config' sh 'kubectl apply -f /var/jenkins_home/workspace/ChinaskillProject/yaml/deployment/config-deployment.yaml --kubeconfig=/root/.kube/config' sh 'kubectl apply -f /var/jenkins_home/workspace/ChinaskillProject/yaml/svc/gateway-svc.yaml --kubeconfig=/root/.kube/config' sh 'kubectl apply -f /var/jenkins_home/workspace/ChinaskillProject/yaml/svc/config-svc.yaml --kubeconfig=/root/.kube/config' }
}
|