发布时间:2025-06-24 19:06:58  作者:北方职教升学中心  阅读量:763


建个流水线的项目:

1.Jenkins中:

配置scm

这里的Jenkinsfile是放在项目中的,Jenkins构建时就会去找该脚本
脚本示范:

// 需要在jenkins的Credentials设置中配置jenkins-harbor-creds、部署Jenkins(建议使用安装版jenkins,docker版的容器里套容器会有问题,且不合理)">一、配置git调用Jenkins打包:">三、jenkins-k8s-config参数pipeline {    agent any    environment {        HARBOR_CREDS = credentials('jenkins-harbor-creds')        K8S_CONFIG = credentials('jenkins-k8s-config')        GIT_TAG = sh(returnStdout: true,script: 'git describe --tags --always').trim()    }    parameters {        string(name: 'HARBOR_HOST', defaultValue: '仓库ip', description: 'harbor仓库地址')        string(name: 'DOCKER_IMAGE', defaultValue: 'tssp/pipeline-demo', description: 'docker镜像名')        string(name: 'APP_NAME', defaultValue: 'pipeline-demo', description: 'k8s中标签名')        string(name: 'K8S_NAMESPACE', defaultValue: 'demo', description: 'k8s的namespace名称')    }    stages {        stage('Maven Build') {            when { expression { env.GIT_TAG != null } }            agent {                docker {                    image 'maven:3-jdk-8-alpine'                    args '-v $HOME/.m2:/root/.m2'                }            }            steps {                sh 'mvn clean package -Dfile.encoding=UTF-8 -DskipTests=true'                stash includes: 'target/*.jar', name: 'app'            }        }        stage('Docker Build') {            when {                 allOf {                    expression { env.GIT_TAG != null }                }            }            agent any            steps {                unstash 'app'                sh "docker login -u ${HARBOR_CREDS_USR} -p ${HARBOR_CREDS_PSW} ${params.HARBOR_HOST}"                sh "docker build --build-arg JAR_FILE=`ls target/*.jar |cut -d '/' -f2` -t ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${GIT_TAG} ."                sh "docker push ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${GIT_TAG}"                sh "docker rmi ${params.HARBOR_HOST}/${params.DOCKER_IMAGE}:${GIT_TAG}"            }                    }        stage('Deploy') {            when {                 allOf {                    expression { env.GIT_TAG != null }                }            }            agent {                docker {                    image 'lwolf/helm-kubectl-docker'                }            }            steps {                sh "mkdir -p ~/.kube"                sh "echo ${K8S_CONFIG} | base64 -d > ~/.kube/config"                sh "sed -e 's#{IMAGE_URL}#${params.HARBOR_HOST}/${params.DOCKER_IMAGE}#g;s#{IMAGE_TAG}#${GIT_TAG}#g;s#{APP_NAME}#${params.APP_NAME}#g;s#{SPRING_PROFILE}#k8s-test#g' k8s-deployment.tpl > k8s-deployment.yml"                sh "kubectl apply -f k8s-deployment.yml --namespace=${params.K8S_NAMESPACE}"            }                    }            }}

6.安装插件 所有关于pipleline的插件都需要安装,如果安装有问题的,可以直接跳过,

此时会提醒更新最新版本Jenkins,点更新就好,

此时在这里更新刚刚没有下好的插件

(此时可以试一下该机器是否可以clone代码)

五、配置git调用Jenkins打包:

1.在Jenkins中配置令牌:

如果没有此功能,这是由于权限问题导致的

注释:跨站请求伪造保护最新Jenkins页面无法开启,在安装目录设置:
vim /etc/sysconfig/jenkins

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"
配置后需要重启jenkins:
service jenkins restart
生效后就如前图所示


2.复制链接到刚刚gitab打开的触发器页面:

此时如果gitlab设置Webhooks报错Urlis blocked: Requests to localhost are not allowed。上一步中有登录harbor,此处需要配置密码:

还需要配置k8s的kube.config,示范配置:

apiVersion: v1kind: Configclusters:- name: "test" cluster: server: "https://ip" api-version: v1 certificate-authority-data: "xxxxxx"users:- name: "root" user: token: "你的token"contexts:- name: "test" context: user: "user1" cluster: "test"current-context: "test

然后编码:

base64 kube-config.yml > kube-config.txt
然后类似上一步,在jenkins凭据中增加配置文件内容。脚本说明:">四、对刚刚列出的脚本说明:

最好是用安装办maven,案例中使用的maven是docker镜像,想修改setting文件的话有点麻烦

如果使用当机器的maven,此时需要下载Jenkins的maven插件:

全局配置中要配置一下

还有环境变量也要配置一下:

这时才可以在Jenkinsfile中使用mvn命令

3.dockerbuild:

这里步骤中的五句话:

第一句,使用的哪个app包

第二句,登录Harbor

第三句,制作临时镜像 ,此时会使用到dockerfile,可以参考docker的搭建,写一个dockerfile,示范:

FROM openjdk:8-jdk-alpine#构建参数ARG JAR_FILEARG WORK_PATH="/opt/demo"# 环境变量ENV JAVA_OPTS="" \    JAR_FILE=${JAR_FILE}# 切换源RUN sed -i 's/http\:\/\/dl-cdn.alpinelinux.org/https\:\/\/mirrors.ustc.edu.cn/g' /etc/apk/repositories#设置时区RUN apk update && apk add ca-certificates && \    apk add tzdata && \    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \    echo "Asia/Shanghai" > /etc/timezoneCOPY target/$JAR_FILE $WORK_PATH/WORKDIR $WORK_PATHENTRYPOINT exec java $JAVA_OPTS -jar $JAR_FILE

示范中的命令:

这个有可能因为网络原因下载失败,此时在他的上一步添加一行切换源就可以了:

RUN sed -i 's/http\:\/\/dl-cdn.alpinelinux.org/https\:\/\/mirrors.ustc.edu.cn/g' /etc/apk/repositories

注意:哪个项目需要发布的,dockerfile就在哪个项目下

第四句,推送镜像

第五句,删除本地临时镜像

4.发布:

这里使用的kubectl镜像命令发布

四句话:

第一句,创建文件夹

第二句 ,寻找下一步使用的config,来验证k8s

第三句,这个项目中有个发布模板,参考k8s搭建中发布模板,这个命令是讲参数写入模板.tpl,生成发布文件yml ,附上tpl示范:

apiVersion: apps/v1kind: Deploymentmetadata:  name: {APP_NAME}-deployment  labels:    app: {APP_NAME}spec:  replicas: 1  selector:    matchLabels:      app: {APP_NAME}  template:    metadata:      labels:        app: {APP_NAME}    spec:      containers:      - name: {APP_NAME}        image: {IMAGE_URL}:{IMAGE_TAG}        ports:        - containerPort: 40080        env:          - name: SPRING_PROFILES_ACTIVE            value: {SPRING_PROFILE}

第四句,发布

六、建个流水线的项目:">git init git remote add origin ssh://git@gitlab.idig8.com:2222/liming/microservice.git git add . git commit -m "Initial commit" git push -u origin master
二、admin 登录设置

然后再添加完毕:

然后可以测试一下:

返回201,说明成功(注意 JENKINS_URL/job/jobname/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME)

此时Jenkins的构建任务也在运行了

成功后可以在镜像仓库中查看到镜像:

可以在k8s面板中看到运行的服务: