配置连接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 名称必须是小写