<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>dockerFile &#8211; Lhy&#039;s blog</title>
	<atom:link href="https://blog.lhyshome.com/tag/dockerfile/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.lhyshome.com</link>
	<description>welcome</description>
	<lastBuildDate>Tue, 21 May 2024 10:13:33 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
<site xmlns="com-wordpress:feed-additions:1">219834889</site>	<item>
		<title>将ruoyi前后端分离版本配置Jenkins流水线</title>
		<link>https://blog.lhyshome.com/2024/05/13/84/</link>
					<comments>https://blog.lhyshome.com/2024/05/13/84/#respond</comments>
		
		<dc:creator><![CDATA[lhy]]></dc:creator>
		<pubDate>Mon, 13 May 2024 08:19:54 +0000</pubDate>
				<category><![CDATA[java]]></category>
		<category><![CDATA[脚本]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[dockerFile]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[k8s]]></category>
		<category><![CDATA[nginx]]></category>
		<guid isPermaLink="false">https://blog.lhyshome.com/?p=84</guid>

					<description><![CDATA[所需中间件 Jenkins+harbor+nexus+docker+k8s Jenkins执行流水线脚本命令 … <span class="read-more"><a href="https://blog.lhyshome.com/2024/05/13/84/">Read More &#187;</a></span>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">所需中间件</h2>



<p>Jenkins+harbor+nexus+docker+k8s</p>



<p>Jenkins执行流水线脚本命令</p>



<p>harbor维护管理docker镜像</p>



<p>nexus维护私有maven依赖</p>



<p>docker创建服务各个版本的docker镜像</p>



<p>k8s部署服务镜像</p>



<h2 class="wp-block-heading">后端：</h2>



<h3 class="wp-block-heading">Jenkins流水线脚本</h3>



<pre class="wp-block-code"><code>pipeline {
    agent none
    environment {
        FLAG = 'ruoyigatewaydev'
    }
    options {
        timeout(time:25, unit: 'MINUTES')
    }
    stages {
        stage('Build Package') {
            agent {
                docker {
                    image 'maven:3.6.1-jdk-8'
                    args '-v /var/lib/jenkins/repository:/repository '
                }
            }
            steps {
                git branch: 'dev',
                        credentialsId: 'gitlab_local_pwd',
                        url: 'http://git_ip:git_port/lhy/ruoyi-gateway.git'
                sh '''
                mvn -s settings.xml -Dmaven.repo.local=/repository -B clean package -DskipTests=true
                '''
            }
        }
        stage('Build image and Push') {
            agent any
            environment {
                IMAGE_TAG = sh(returnStdout: true,script: 'echo $image_tag').trim()
            }
            steps {
                sh """	
					docker build -t harbor_ip:harbor_port/public/${FLAG}:${IMAGE_TAG} ./
					docker push harbor_ip:harbor_port/public/${FLAG}:${IMAGE_TAG}
					docker image rm harbor_ip:harbor_port/public/${FLAG}:${IMAGE_TAG}
                   """
            }
        }

        stage('Deploy') {
            agent any
            steps {
                script{
                    def remote = &#91;:]
                    remote.name = 'kube'
                    remote.host = 'k8s_ip'
                    remote.port = 22
                    remote.allowAnyHosts = true
                    //通过withCredentials调用Jenkins凭据中已保存的凭据，credentialsId需要填写，其他保持默认即可
                    withCredentials(&#91;usernamePassword(credentialsId: 'Vm_local_pwd', passwordVariable: 'password', usernameVariable: 'userName')]) {
                        remote.user = "${userName}"
                        remote.password = "${password}"
                    }
                    sshCommand remote: remote, command: """ 
                        if &#91; ! -d '/home/ruoyi/${FLAG}' ];then 
                        mkdir /home/ruoyi/${FLAG}
                        else
                        echo "文件夹已经存在"
                        fi
    				   """
                    sshPut remote: remote, from: 'k8s.yaml', into: "/home/ruoyi/${FLAG}"
                    sshCommand remote: remote, command: """ 
    					sed -i 's#${FLAG}:.*#${FLAG}:${IMAGE_TAG}#g' /home/ruoyi/${FLAG}/k8s.yaml
    					kubectl apply -f /home/ruoyi/${FLAG}/k8s.yaml
    					rm -rf /home/ruoyi/${FLAG}/k8s.yaml
    				   """
                }
            }
        }
    }
}</code></pre>



<h3 class="wp-block-heading">k8s.yml</h3>



<pre class="wp-block-code"><code>apiVersion: apps/v1
kind: Deployment
metadata:
  name: ruoyigateway
  namespace: ruoyi-dev
  labels:
    app: ruoyigateway
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ruoyigateway
  template:
    metadata:
      name: ruoyigateway
      labels:
        app: ruoyigateway
    spec:
      containers:
        - name: ruoyigateway
          image: harbor_ip:harbor_port/public/ruoyigatewaydev:7.0
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: containerPort
              protocol: TCP
      restartPolicy: Always
      imagePullSecrets:
        - name: harbor-lhy

---
apiVersion: v1
kind: Service
metadata:
  name: ruoyigateway
  namespace: ruoyi-dev
spec:
  selector:
    app: ruoyigateway
  ports:
    - protocol: TCP
      port: port
      targetPort: targetPort
      nodePort: nodePort
  type: NodePort
</code></pre>



<h3 class="wp-block-heading">DockerFile</h3>



<pre class="wp-block-code"><code>FROM openjdk:8-jre<br>LABEL authors="lhyshome_pc"<br>ADD target/ruoyi-gateway.jar app.jar<br>ENTRYPOINT &#91;"java","-jar","/app.jar"]</code></pre>



<h2 class="wp-block-heading">前端</h2>



<h3 class="wp-block-heading">Jenkins流水线脚本</h3>



<pre class="wp-block-code"><code>pipeline {
    agent none
    environment {
        FLAG = 'ruoyiuidev'
    }
    options {
        timeout(time:25, unit: 'MINUTES')
    }
    stages {
        stage('npm') {
            agent {
                docker {
                    image 'node:14'
                    args '-u root:root --network=host'
                }
            }
            steps {
                git branch: 'dev',
                credentialsId: 'gitlab_local_pwd',
                url: 'http://git_ip:git_port/lhy/ruoyi-ui.git'
                sh """
                    npm install &amp;&amp; npm run build:stage
                """
            }
        }
        stage('Build image and Push') {
            agent any
            environment {
                IMAGE_TAG = sh(returnStdout: true,script: 'echo $image_tag').trim()
            }
            steps {
                sh """	
					docker build -t harbor_ip:harbor_port/public/${FLAG}:${IMAGE_TAG} ./
					docker push harbor_ip:harbor_port/public/${FLAG}:${IMAGE_TAG}
					docker image rm harbor_ip:harbor_port/public/${FLAG}:${IMAGE_TAG}
                   """
            }
        }
        stage('Deploy') {
            agent any
            steps {
                script{
                    def remote = &#91;:]
                    remote.name = 'kube'
                    remote.host = 'k8s_ip'
                    remote.port = 22
                    remote.allowAnyHosts = true
                    //通过withCredentials调用Jenkins凭据中已保存的凭据，credentialsId需要填写，其他保持默认即可
                    withCredentials(&#91;usernamePassword(credentialsId: 'Vm_local_pwd', passwordVariable: 'password', usernameVariable: 'userName')]) {
                        remote.user = "${userName}"
                        remote.password = "${password}"
                    }
                    sshCommand remote: remote, command: """ 
                        if &#91; ! -d '/home/ruoyi/${FLAG}' ];then 
                        mkdir /home/ruoyi/${FLAG}
                        else
                        echo "文件夹已经存在"
                        fi
    				   """
                    sshPut remote: remote, from: 'k8s.yaml', into: "/home/ruoyi/${FLAG}"
                    sshCommand remote: remote, command: """ 
    					sed -i 's#${FLAG}:.*#${FLAG}:${IMAGE_TAG}#g' /home/ruoyi/${FLAG}/k8s.yaml
    					kubectl apply -f /home/ruoyi/${FLAG}/k8s.yaml
    					rm -rf /home/ruoyi/${FLAG}/k8s.yaml
    				   """
                }
            }
        }
    }
}</code></pre>



<h3 class="wp-block-heading">k8s.yml</h3>



<pre class="wp-block-preformatted">apiVersion: apps/v1<br>kind: Deployment<br>metadata:<br>  name: ruoyiui<br>  namespace: ruoyi-dev<br>spec:<br>  replicas: 1<br>  selector:<br>    matchLabels:<br>      app: ruoyiui<br>  template:<br>    metadata:<br>      labels:<br>        app: ruoyiui<br>    spec:<br>      containers:<br>        - name: ruoyiui<br>          image: harbor_ip:harbor_port/public/ruoyiuiprod:9.0<br>          ports:<br>            - containerPort: containerPort<br>---<em><br></em>apiVersion: v1<br>kind: Service<br>metadata:<br>  name: ruoyiui<br>  namespace: ruoyi-dev<br>spec:<br>  type: LoadBalancer<br>  selector:<br>    app: ruoyiui<br>  ports:<br>    - protocol: TCP<br>      port: port<br>      targetPort: targetPort<br>      nodePort: nodePort</pre>



<h3 class="wp-block-heading">DockerFile</h3>



<pre class="wp-block-code"><code>FROM nginx:1.14.1
ADD ./dist /home
ADD ./nginx.conf /etc/nginx
EXPOSE 80
CMD &#91;"nginx", "-g", "daemon off;"]</code></pre>



<h3 class="wp-block-heading">nginx.conf</h3>



<pre class="wp-block-code"><code>worker_processes  1;<br><br>events {<br>    worker_connections  1024;<br>}<br><br>http {<br>    include       mime.types;<br>    default_type  application/octet-stream;<br>    sendfile        on;<br>    keepalive_timeout  65;<br><br>    server {<br>        listen       80;<br>        server_name  localhost;<br><br>        location / {<br>            root   /home;<br>            try_files $uri $uri/ /index.html;<br>            index  index.html index.htm;<br>        }<br><br>        # 避免actuator暴露<br>        if ($request_uri ~ "/actuator") {<br>            return 403;<br>        }<br><br>        error_page   500 502 503 504  /50x.html;<br>        location = /50x.html {<br>            root   html;<br>        }<br>    }<br>}</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.lhyshome.com/2024/05/13/84/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">84</post-id>	</item>
	</channel>
</rss>
