一、基于jenkins和gitlab的ci cd

1)基于docker安装gitlab

1.1)pull镜像

docker pull gitlab/gitlab-ce:latest  官方镜像
docker pull registry.cn-hangzhou.aliyuncs.com/imooc/gitlab-ce:latest  阿里云镜像

1.2)在固定位置。建立启动脚本

#!/bin/bash
HOST_NAME=gitlab.mooc.com
#GITLAB_DIR=`pwd`
GITLAB_DIR=/data/gitlab
docker stop gitlab
docker rm gitlab
docker run -d \
    --hostname ${HOST_NAME} \
    -p 9443:443 -p 9080:80 -p 2222:22 \
    --name gitlab \
    -v ${GITLAB_DIR}/config:/etc/gitlab \
    -v ${GITLAB_DIR}/logs:/var/log/gitlab \
    -v ${GITLAB_DIR}/data:/var/opt/gitlab \
        registry.cn-hangzhou.aliyuncs.com/imooc/gitlab-ce:latest
start.sh

执行sh start.sh 。生成持久化的存储的目录

[root@node01 ~]# ll /data/gitlab/
total 8
drwxrwxr-x  3 root root  239 Jun 28 18:01 config
drwxr-xr-x 18 root root 4096 Jun 28 17:56 data
drwxr-xr-x 19  998 root  314 Jun 28 17:56 logs
-rw-r--r--  1 root root  399 Jun 28 17:54 start.sh

1.2)访问gitlab

 

 第一次登陆,创建root账号的登陆密码

注册一个普通账户进行持久化的测试

1.3)普通用户创建一个私有仓库

1.4)创建好项目后,需要添加ssh-key。在需要使用git的服务器上面把id_rsa.pub添加进来

 

二、安装jenins

需要提前配置 java环境 mvn环境

1.1) 安装jenkins

https://jenkins.io/zh/doc/pipeline/tour/getting-started/

下载war包: http://mirrors.jenkins.io/war-stable/latest/jenkins.war

 

 java -jar jenkins.war --httpPort=8080 运行过程中会生成一个密码

 

1.2) 配置插件。选择插件安装

需要把 pipelines的都添加进来

 1.3)安装好插件后,创建账号

 2) 测试流水线

 

里面暂时什么也不做配置,直接构建任务,查看流水线 是否正常执行

 三、gitlab与jenkins

1)在jenkins中配置 job

钩子为JENKINS_URL/job/test/build?token=TOKEN_NAME ==》  http://192.168.1.5:8080/job/test/build?token=123456

1.1) 在全局设置中

去掉跨站点伪造保护

2)在gitlab中,选择 Intergrations,配置钩子,触发的条件。push代码就触发一些动作

 2.1)配置钩子地址(为jenins的地址令牌)

 2.2)此时配置该项,无法生效。无法向本地网络发送请求。请修改下面配置

 2.3)钩子配置了测试。模拟发送push请求

在jenins中可看到最新构建的任务

 四、编辑流水线语法

1)可查看流水线语法

2)流水线拉取代码编写

#!groovy
pipeline {
    agent any
    
    environment {
        REPOSITORY="git@192.168.1.6:root/myapp.git"
    }
    
    stages {
        stage('获取代码') {
            steps {
                echo "start fetch code from git:${REPOSITORY}"
                deleteDir()
                git "${REPOSITORY}"
            }
        }
    }
}

直接在jenkins上面构建查看是否能执行成功

 构建成功后会在Jenkins的服务器上生成一个文件

 五、流水线到k8s的镜像更新

#!groovy
pipeline {
    agent any
    
    environment {
        REPOSITORY="git@192.168.1.6:root/myapp.git"
        MODULE="user-edge-service"
        SCRIPT_PATH="/opt/scripts"
    }
    
    stages {
        stage('获取代码') {
            steps {
                echo "start fetch code from git:${REPOSITORY}"
                deleteDir()
                git "${REPOSITORY}"
            }
        }
        
        stage('代码静态检查') {
            steps {
                echo "start code check"
            }
        }    
    
        stage('编译') {
            steps {
                echo "start compile"
                sh "mvn -U -pl ${MODULE} -am clean package"
            }
        }
        
        stage('构建镜像') {
            steps {
                echo "start build image"
                sh "${SCRIPT_PATH}/build-images.sh ${MODULE}"
            }
        }
        
        stage('发布系统') {
            steps {
                echo "start deploy"
                sh "${SCRIPT_PATH}/deploy.sh user-service-deployment ${MODULE}"
            }
        }
    }
}
View Code

在构建镜像需要执行脚本

#!/bin/bash

MODULE=$1
TIME=`data "+%Y%m%d%H%M"`
GIT_REVISION=`git log -1 --pretty=format:"%h"`
IMAGE_NAME=harbor.com:8080/test/${MODULE}:${TIME}_${GIT_REVISION}

cd ${MODULE}

docker build -t ${IMAGE_NAME} .

cd -

docker push ${IMAGE_NAME}
echo "${IMAGE_NAME}" > IMAGE_NAME
build-images.sh

chmod 755 build-images.sh 

在服务进行镜像更新时

#!/bin/bash

IMAGE=`cat IMAGE_NAME`
DEPLOYMENT=$1
MODULE=$2
echo "updata image to:${IMAGE}"
kubect set image deployments/${DEPLOYMENT} ${MODULE}=${IMAGE}
deploy.sh

chmod 755 deploy.sh

 六、纯粹调用shell脚本

1)创建自由风格

 

 2)构建触发器,直接调用shell脚本进行部署代码

 

 

 

 

 

 

 

 

 

 

 

gitlab的ci工具

stages:
  - build
  - test
  - deploy
  
job1:
  stage: test
  tags:
    - demo
  script:
    - echo "I am job1"
    - echo "I am in test stage"
    
job2:
  stage: build
  tags:
    - demo
  script:
    - echo "I am job2"
    - echo "I am build stage"
    
job3:
  stage: deploy
  tags:
    - demo
  script:
    - echo "I am job3"
    - echo "I am deploy stage"

 

posted on 2022-09-23 18:22  可口_可乐  阅读(635)  评论(0编辑  收藏  举报