jenkins流水线代码
▶ 指定命名空间创建:
pipeline {
agent {
kubernetes {
yaml '''
apiVersion: v1
kind: Pod
metadata:
labels:
jenkins: agent
spec:
securityContext:
runAsUser: 0
runAsGroup: 0
serviceAccountName: jenkins-k8s-sa
containers:
- name: jnlp
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/jenkins/inbound-agent:latest-jdk21
resources:
requests:
cpu: "500m"
memory: "512Mi"
env:
- name: JENKINS_URL
value: "http://jenkins-service.devops.svc.cluster.local:8080"
- name: JENKINS_TUNNEL
value: "jenkins-service.devops.svc.cluster.local:50000"
args: ['\$(JENKINS_SECRET)', '\$(JENKINS_NAME)']
- name: docker
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/docker:24.0.7-cli
command: ["cat"]
tty: true
resources:
requests:
cpu: "200m"
memory: "256Mi"
volumeMounts:
- name: docker-sock
mountPath: /var/run/docker.sock
- name: kubectl
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/bitnami/kubectl:latest
command: ["cat"]
tty: true
resources:
requests:
cpu: "200m"
memory: "256Mi"
volumeMounts:
- name: kube-config
mountPath: /root/.kube
volumes:
- name: docker-sock
hostPath:
path: /var/run/docker.sock
- name: kube-config
hostPath:
path: /root/.kube # 或使用Secret挂载kubeconfig
'''
}
}
stages {
stage("拉取代码") {
steps {
container('jnlp') {
withCredentials([sshUserPrivateKey(credentialsId: 'gitlab-ssh-wz', keyFileVariable: 'GIT_SSH_KEY')]) {
sh '''
mkdir -p ~/.ssh
cp ${GIT_SSH_KEY} ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -p 30010 47.114.115.216 >> ~/.ssh/known_hosts
'''
git credentialsId: 'gitlab-ssh-wz',
url: 'ssh://git@47.114.115.216:30010/wz/devops_demo01.git',
branch: 'master'
}
}
}
}
stage("检查拉取是否成功") {
steps {
container('jnlp') {
echo "检查拉取的代码"
sh 'ls .'
sh 'pwd'
}
}
}
stage("代码打包") {
steps {
container('docker') {
sh "docker build -t devops_demo01:${BUILD_NUMBER} ."
}
}
}
stage("把镜像上传到ACR") {
steps {
container('docker') {
withCredentials([usernamePassword(credentialsId: 'aliyun-acr', passwordVariable: 'PASSWORD', usernameVariable: 'USER')]) {
sh """
docker login crpi-x18gygajobo49quk.cn-shanghai.personal.cr.aliyuncs.com -u ${USER} -p ${PASSWORD}
docker tag devops_demo01:${BUILD_NUMBER} crpi-x18gygajobo49quk.cn-shanghai.personal.cr.aliyuncs.com/wz_image/devops:devops_demo01-${BUILD_NUMBER}
docker push crpi-x18gygajobo49quk.cn-shanghai.personal.cr.aliyuncs.com/wz_image/devops:devops_demo01-${BUILD_NUMBER}
"""
}
}
}
}
stage('部署这个应用') {
steps {
script {
def approval = input(
message: '选择部署的空间?',
ok: '是的',
parameters: [
choice(choices: 'prod\ndev\ntest', description: '选择部署环境', name: 'ENV')
]
)
echo "用户同意部署到 ${approval}"
container('kubectl') {
sh """
sed -i "s@<CON_IMG>@crpi-x18gygajobo49quk.cn-shanghai.personal.cr.aliyuncs.com/wz_image/devops:devops_demo01-${BUILD_NUMBER}@g" k8s-devops-demo01.yml
sed -i "s@<NAMESPACE>@${approval}@g" k8s-devops-demo01.yml
kubectl get ns ${approval} > /dev/null 2>&1 || kubectl create ns ${approval}
kubectl apply -f k8s-devops-demo01.yml
sleep 10
kubectl -n ${approval} get pods
"""
}
}
}
}
}
}
许可协议:
CC BY 4.0