云计算-容器云笔记二(CICD集成)

5月 12, 2021

【题目 1】安装Jenkins 环境

在master 节点上使用镜像jenkins/jenkins:2.262-centos 部署
Jenkins 服务,具体要求如下:
(1)容器名称:jenkins;
(2)端口映射:8080:80; [题目错误 改为8080:8080]
(3)使用root 身份生成容器;
(4)离线安装Jenkins 插件;
(5)设置Jenkins 用户:chinaskill;密码:000000;
(6)配置权限“任何用户可以做任何事(没有任何限制)”。
使用chinaskill 用户登录Jenkins

1-3

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

4.离线安装Jenkins 插件

cp -rfv /opt/plugins/* /home/jenkins_home/plugins/
docker restart jenkins

5.设置Jenkins 用户:chinaskill;密码:000000

系统设置 --> 用户管理 --> 新建用户 --> 用户:chinaskill,密码:000000,邮箱随意 -->新建用户

6.配置权限“任何用户可以做任何事(没有任何限制)”

系统设置 --> 全局安全配置 --> 授权策略 选择 任何用户可以做任何事(没有任何限制) --> 保存

7.使用chinaskill 用户登录Jenkins

注销 --> 登录 --> 用户名:chinaskill  密码:000000 --> 登录

【题目2】安装Gitlab 环境

在master 节点上使用镜像gitlab/gitlab-ce:12.9.2-ce.0 部署
Gitlab 服务,具体要求如下:
(1)容器名称:mygitlab;
(2)端口映射:1022:22、81:80、443:443;
(3)重启策略:always;
(4)设置Gitlab 用户:root;密码:00000000;
(5)新建项目:ChinaskillProject;
(6)将/opt/ChinaskillProject 中的代码上传到ChinaskillProject 项目中。

1-3

docker run -d --name mygitlab  -p 1022:22 -p 81:80 -p 443:443  -v /etc/gitlab/config:/etc/gitlab  -v /etc/gitlab/logs:/var/log/gitlab  -v /etc/gitlab/data:/var/opt/gitlab  -restart always gitlab/gitlab-ce:12.9.2-ce.0

4.设置Gitlab 用户:root;密码:00000000;

访问ip:81 --> 设置密码为00000000

5.新建项目:ChinaskillProject;

New project --> Project name : ChinaskillProject,Visibility Level : Public,勾选Initialize repository with a README --> Create project

6.将/opt/ChinaskillProject 中的代码上传到ChinaskillProject 项目中。

yum install git -y
cd /root
git clone git@192.168.200.53:gitlab/ChinaskillProject.git
cp -f /opt/ChinaskillProject/* /root/ChinaskillProject/
git add .
git commit -a -m "ChinaskillProject"  #-a 参数设置修改文件后不需要执行 git add 命令,直接来提交
git push

【题目3】配置Jenkins 连接Gitlab

配置Jenkins 连接Gitlab,具体要求如下:
(1)设置Outbound requests;
(2)生成“Access Tokens”;
(3)设置Jenkins 取消对’/project’ end-point 进行身份验证;
(4)测试Jenkins 与Gitlab 的连通性。

1.设置Outbound requests [gitlab操作]

管理中心(顶部扳手图表) --> 设置  --> 网络 --> 外发请求 : 勾选允许Webhook和服务对本地网络的请求 --> save changes

2.获取gitlab token [gitlab操作]

头像 --> Settings --> Access Tokens --> Name : 命名为jenkins,勾选api --> Create personal access token

3. 设置Jenkins取消对’/project’ end-point进行身份验证 [Jenkins操作]

Manage Jenkins --> Configure System --> Gitlab : 取消勾选Enable authentication for '/project' end-point

4. 测试Jenkins 与Gitlab 的连通性 [Jenkins操作]

Manage Jenkins --> Configure System --> Gitlab --> Connection name随意 , Gitlab host URL : gitlab地址 --> Credentials --> 添加:Jenkins --> 类型选择 : GitLab API token , API token : 输入上一步获取 --> 添加 --> Test Connection 显示Success则为成功

【题目4】配置Jenkins 连接maven

配置Jenkins 连接maven,具体要求如下:
(1)采用docker in docker 的方式在Jenkins 内安装maven;
(2)在Jenkins 中配置maven 信息。

1.采用docker in docker 的方式在Jenkins 内安装maven

cp -rf /opt/apache-maven-3.6.3-bin.tar.gz /home/jenkins_home/
docker exec -it jenkins bash
tar -zxvf /var/jenkins_home/apache-maven-3.6.3-bin.tar.gz -C .
mv apache-maven-3.6.3/ /usr/local/maven
vi /etc/profile
export M2_HOME=/usr/local/maven 
export PATH=$PATH:$M2_HOME/bin

source /etc/profile
mvn -v

【题目5】配置CI/CD

配置CI/CD,具体要求如下:
(1)新建一个流水线任务ChinaskillProject;
(2)编写流水线脚本;
(3)配置Webhook;
(4)在Harbor 中新建公开项目chinaskillproject。

1.新建一个流水线任务ChinaskillProject [Jenkins操作]

创建任务 --> 任务名称:ChinaskillProject,选择流水线 --> 构建触发器:Build when a change is pushed to GitLab. http://192.168.34.77:8080/project/ChinaskillProject,   勾选流水线:Pipeline script

2.编写流水线脚本 [Jenkins操作]

node{
    stage('git clone'){
        git branch: 'master', credentialsId: 'c8a2e34e-1a8a-4407-9706-fd697d4e6110', url: 'http://192.168.34.77:81/root/ChinaskillProject.git'
    }
    stage('maven build'){
        sh '''/usr/local/maven/bin/mvn package -DskipTests -f /var/jenkins_home/workspace/ChinaskillProject'''
    }
    stage('image build'){
        sh '''
              echo $BUILD_ID
              docker build -t 192.168.34.77/chinaskillproject/gateway:$BUILD_ID -f /var/jenkins_home/workspace/ChinaskillProject/gateway/Dockerfile  /var/jenkins_home/workspace/ChinaskillProject/gateway
              docker build -t 192.168.34.77/chinaskillproject/config:$BUILD_ID -f /var/jenkins_home/workspace/ChinaskillProject/config/Dockerfile  /var/jenkins_home/workspace/ChinaskillProject/config
           '''
    }
    stage('upload registry'){
        sh '''
              docker login 192.168.34.77 -u=admin -p=Harbor12345
              docker push 192.168.34.77/chinaskillproject/gateway:$BUILD_ID
              docker push 192.168.34.77/chinaskillproject/config:$BUILD_ID
           '''
    }
    stage('deploy Rancher'){
       sh 'sed -i "s/sqshq\\/piggymetrics-gateway/192.168.34.77\\/ChinaskillProject\\/gateway:$BUILD_ID/g" /var/jenkins_home/workspace/ChinaskillProject/yaml/deployment/gateway-deployment.yaml'
       sh 'sed -i "s/sqshq\\/piggymetrics-config/192.168.34.77\\/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'
    }
}

3.配置Webhook [Gitlab操作]

ChinaskillProject --> Settings --> Webhooks : URL即上面url,Push events : master --> Add webhook --> Test --> Push events --> 显示Hook executed successfully: HTTP 200 即成功

4.在Harbor 中新建公开项目chinaskillproject [Harbor操作]

项目 --> +新建项目 --> 项目名称: chinaskillproject,勾选公开