Jenkins pipeline

配置连接gitlab凭据

在这里插入图片描述

pipeline

在这里插入图片描述

def git_address = "http://192.168.41.26/vcloud/vcloud-config.git"
def git_auth = "gitlab-auth"
node {  
    stage('拉取代码') { 
        git branch: "$Branch",credentialsId: "$git_auth", url: "$git_address"
    }
	
}

jenkins连接k8s

详细
https://blog.csdn.net/wuxingge/article/details/119514607

jenkins连接k8s凭据

在这里插入图片描述

配置
在这里插入图片描述

jenkins slave

开启代理程序的TCP端口

在这里插入图片描述

def git_address = "http://192.168.41.26/vcloud/vcloud-config.git"
def git_auth = "gitlab-auth"
def k8s_cloud_name = "kubernetes"
def label_name = "jenkins-slave-test"
def jenkins_slave_image = "harbor.pre.venusgroup.com.cn/library/jenkins-slave-maven-3.6.3-pip-centos7:v1"
podTemplate(label: "$label_name", cloud: "$k8s_cloud_name", containers: [
    containerTemplate(
        name: 'jnlp',
        image: "${jenkins_slave_image}",
		runAsGroup: '0', 
        runAsUser: '0', 
        privileged: true
    ),
  ],
  volumes: [
    hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
    hostPathVolume(mountPath: '/usr/bin/docker', hostPath: '/usr/bin/docker')
  ],
)
{
  node("$label_name"){  
      stage('拉取代码') { 
          git branch: "$Branch",credentialsId: "$git_auth", url: "$git_address"
      }
  	
  }
}

连接harbor凭据

在这里插入图片描述

def git_address = "http://192.168.41.26/root/Gomoku.git"
def git_auth = "gitlab-auth"
def k8s_cloud_name = "kubernetes"
def label_name = "jenkins-slave-test"
def docker_registry_auth = "e8bcef21-053a-418a-b23b-afb797d2631a"
def jenkins_slave_image = "harbor.pre.venusgroup.com.cn/library/jenkins-slave-maven-3.6.3-pip-centos7:v1"
def registry = "harbor.pre.venusgroup.com.cn"
def project = "sit"
def app_name = "gomoku"
def image_name = "${registry}/${project}/${app_name}:${BUILD_NUMBER}"
podTemplate(label: "$label_name", cloud: "$k8s_cloud_name", containers: [
    containerTemplate(
        name: 'jnlp',
        image: "${jenkins_slave_image}",
		runAsGroup: '0', 
        runAsUser: '0', 
        privileged: true
    ),
  ],
  volumes: [
    hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
    hostPathVolume(mountPath: '/usr/bin/docker', hostPath: '/usr/bin/docker'),
	hostPathVolume(mountPath: '/home/jenkins/dockerfile-yaml', hostPath: '/dockerfile_yaml')
  ],
)
{
  node("$label_name"){  
      stage('拉取代码') { 
          git branch: "$Branch",credentialsId: "$git_auth", url: "$git_address"
      }
	  stage('构建镜像'){
          //harbor登录
          withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
            sh """
              cp /home/jenkins/dockerfile-yaml/web/Dockerfile ./
              cp /home/jenkins/dockerfile-yaml/default.conf ./
              cp /home/jenkins/dockerfile-yaml/nginx.conf ./
              docker build -t ${image_name} ./
              docker login -u ${username} -p '${password}' '${registry}'
              docker push ${image_name}
            """
            }
      }
  }
}

Dockerfile

FROM nginx:alpine
COPY ./ /usr/share/nginx/html/
COPY default.conf /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80

nginx.conf

worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  102400;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

default.conf

    log_format  json  '{"@timestamp":"$time_iso8601",'
                      '"@version":"1",'
                      '"client":"$remote_addr",'
                      '"url":"$request_uri",'
                      '"status":"$status",'
                      '"domain":"$host",'
                      '"host":"$server_addr",'
                      '"size":$body_bytes_sent,'
                      '"responsetime":$request_time,'
                      '"referer": "$http_referer",'
                      '"ua": "$http_user_agent"'
                     '}';

server {
        listen       80;
        # 配置成实际的域名,每个虚拟主机的配置文件域名都相同
        #server_name  www.test.com;
	client_max_body_size 20m;

        access_log   /var/log/nginx/access.log json;
        error_log    /var/log/nginx/error.log;

        location / {
            root   /usr/share/nginx/html/;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }
    }

k8s认证凭据

cat /root/.kube/config

在这里插入图片描述

Jenkinsfile

def git_address = "http://192.168.41.26/root/Gomoku.git"
def git_auth = "gitlab-auth"
def k8s_cloud_name = "kubernetes"
def label_name = "jenkins-slave-test"
def docker_registry_auth = "e8bcef21-053a-418a-b23b-afb797d2631a"
def k8s_auth = "k8s-auth"
def jenkins_slave_image = "harbor.pre.venusgroup.com.cn/library/jenkins-slave-maven-3.6.3-pip-centos7:v1"
def registry = "harbor.pre.venusgroup.com.cn"
def project = "sit"
def app_name = "gomoku"
def image_name = "${registry}/${project}/${app_name}:${BUILD_NUMBER}"
def server_url = "gomoku.pre.venusgroup.com.cn"
podTemplate(label: "$label_name", cloud: "$k8s_cloud_name", containers: [
    containerTemplate(
        name: 'jnlp',
        image: "${jenkins_slave_image}",
		runAsGroup: '0', 
        runAsUser: '0', 
        privileged: true
    ),
  ],
  volumes: [
    hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
    hostPathVolume(mountPath: '/usr/bin/docker', hostPath: '/usr/bin/docker'),
	hostPathVolume(mountPath: '/home/jenkins/dockerfile-yaml', hostPath: '/dockerfile_yaml')
  ],
)
{
  node("$label_name"){  
      stage('拉取代码') { 
          git branch: "$Branch",credentialsId: "$git_auth", url: "$git_address"
      }
	  stage('构建镜像'){
          //harbor登录
          withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
            sh """
              cp /home/jenkins/dockerfile-yaml/web/Dockerfile ./
              cp /home/jenkins/dockerfile-yaml/default.conf ./
              cp /home/jenkins/dockerfile-yaml/nginx.conf ./
              docker build -t ${image_name} ./
              docker login -u ${username} -p '${password}' '${registry}'
              docker push ${image_name}
            """
            }
      }
	  stage('部署到K8S平台'){
        sh """
        cp /home/jenkins/dockerfile-yaml/web.yaml ./
        sed -i 's#\$IMAGE_NAME#${image_name}#' web.yaml
        sed -i 's#\$APP_NAME#${app_name}#' web.yaml
        sed -i 's#\$URL_NAME#${server_url}#' web.yaml
        """
        kubernetesDeploy configs: "web.yaml", kubeconfigId: "${k8s_auth}"
      }
  }
}

web.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: $APP_NAME
  namespace: sit
spec:
  replicas: 2
  selector:
    matchLabels:
      appname: $APP_NAME
  template:
    metadata:
      labels:
        appname: $APP_NAME
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: appname
                  operator: In
                  values:
                  - $APP_NAME
              topologyKey: "kubernetes.io/hostname"
            weight: 50
      containers:
      - name: $APP_NAME
        image: $IMAGE_NAME
        env:
        - name: aliyun_logs_sit-ui
          value: stdout
        - name: aliyun_logs_sit-ui_format
          value: json
        - name: aliyun_logs_sit-ui_tags
          value: app=$APP_NAME
---
apiVersion: v1
kind: Service
metadata:
  name: $APP_NAME
  namespace: sit
spec:
  selector:
    appname: $APP_NAME
  ports:
  - port: 80
    targetPort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: $APP_NAME
#  annotations:
#    kubernetes.io/ingress.class: "nginx"
  namespace: sit
spec:
  rules:
  - host: $URL_NAME
    http:
      paths:
      - path:
        backend:
          serviceName: $APP_NAME
          servicePort: 80

docker build错误

+ docker build -t harbor.pre.venusgroup.com.cn/sit/Gomoku:2 ./
invalid argument "harbor.pre.venusgroup.com.cn/sit/Gomoku:2" for "-t, --tag" flag: invalid reference format: repository name must be lowercase
repository 名称必须是小写
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuxingge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值