Jenkinsfile
在gitlab所要发布的项目根目录中添加如下文件,当然也可以放到gitlab的其它位置(需在Pipeline script from SCM更改git拉取的位置):
jenkinsfile内容
pipeline {
agent {
node {
label 'Jenkins_slave'
}
}
environment {
HARBOR_CREDS = credentials('b6f01792-9a2e-4eea-b91a-cb8f75fb59b1')
K8S_CONFIG = credentials('d6be60b7-9b6a-462c-99bc-65a67a6b04a6')
GIT_TAG = sh(returnStdout: true,script: 'git describe --tags --abbrev=0').trim()
}
parameters {
gitParameter(name: 'BRANCH_TAG',type: 'PT_BRANCH_TAG',branchFilter: 'origin/(.*)', defaultValue: 'master', description: 'Select your branch')
string(name: 'HARBOR_HOST', defaultValue: 'harbor.dev.uboxol.com', description: 'harbor仓库地址')
string(name: 'DOCKER_IMAGE', defaultValue: 'dev/contract', description: 'docker镜像名')
string(name: 'APP_NAME', defaultValue: 'contract', description: 'k8s中标签名')
string(name: 'K8S_NAMESPACE', defaultValue: 'devops', description: 'k8s的namespace名称')
}
stages {
stage('Git Source') {
steps{
script{
dir("${env.WORKSPACE}"){
git branch: "${params.BRANCH_TAG}", credentialsId: 'ec3ecaa3-3cdf-4add-b6f5-9d672ba78263',url: 'ssh://git@git.uboxol.com:8855/service/contract.git'
sh "cp app/Config/app_local.php app/Config/app.php"
sh "cp app/Config/Cons_dev.php app/Config/Cons.php"
sh "cp app/Config/database_dev.php app/Config/database.php"
sh "cp app/Controller/Resource_dev.php app/Controller/Resource.php"
}
}
}
}
stage('Docker Build') {
steps {
script {
container('docker') {
sh "docker login -u ${HARBOR_CREDS_USR} -p ${HARBOR_CREDS_PSW} ${params.HARBOR_HOST}"
sh "sed -i 's#{APP_NAME}#${params.APP_NAME}#g' Dockerfile"
sh "docker build -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('K8s Deploy') {
steps {
script {
container('kubectl') {
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}#master#g' ubox-ht-deployment.tpl > ubox-ht-deployment.yml"
sh "sed -e 's#{APP_NAME}#${params.APP_NAME}#g' ubox-ht-svc.tpl > ubox-ht-svc.yml"
try{
sh "kubectl delete rs -l app=${params.APP_NAME} --namespace=${params.K8S_NAMESPACE}"
}catch (Exception e) {
println e
}
try{
sh "kubectl delete svc -l name=${params.APP_NAME} --namespace=${params.K8S_NAMESPACE}"
}catch (Exception e) {
println e
}
sh "kubectl apply -f ubox-ht-deployment.yml --namespace=" + K8S_NAMESPACE
sh "kubectl apply -f ubox-ht-svc.yml --namespace=" + K8S_NAMESPACE
}
}
}
}
}
}
创建Pipeline,并使用SCM
点击New Item
输入item name,并点击流水线,最后点OK
在Pipeline里面选择Pipeline script from SCM,并选择自己存放jenkinsfile的git位置,并点击保存
当然,你也可以直接选择pipeline script:
运行Pipeline
点击自己创建的项目,选择Buiild with Parameters:
输入内容(jenkinsfile中已有默认值),点击build
如果Pipeline使用的g不是scm,而是pipeline script,有一些差别,脚本如下:
pipeline {
agent {
node {
label 'Jenkins_slave'
}
}
environment {
HARBOR_CREDS = credentials('b6f01792-9a2e-4eea-b91a-cb8f75fb59b1')
K8S_CONFIG = credentials('d6be60b7-9b6a-462c-99bc-65a67a6b04a6')
}
parameters {
gitParameter(name: 'BRANCH_TAG',type: 'PT_BRANCH_TAG',branchFilter: 'origin/(.*)', defaultValue: 'master', description: 'Select your branch')
string(name: 'HARBOR_HOST', defaultValue: 'harbor.dev.uboxol.com', description: 'harbor仓库地址')
string(name: 'DOCKER_IMAGE', defaultValue: 'dev/contract', description: 'docker镜像名')
string(name: 'APP_NAME', defaultValue: 'contract', description: 'k8s中标签名')
string(name: 'K8S_NAMESPACE', defaultValue: 'devops', description: 'k8s的namespace名称')
}
stages {
stage('Git Source') {
steps{
script{
dir("${env.WORKSPACE}"){
git branch: "${params.BRANCH_TAG}", credentialsId: 'ec3ecaa3-3cdf-4add-b6f5-9d672ba78263',url: 'ssh://git@git.uboxol.com:8855/service/contract.git'
sh "cp app/Config/app_local.php app/Config/app.php"
sh "cp app/Config/Cons_dev.php app/Config/Cons.php"
sh "cp app/Config/database_dev.php app/Config/database.php"
sh "cp app/Controller/Resource_dev.php app/Controller/Resource.php"
}
}
}
}
stage('Docker Build') {
environment {
GIT_TAG = sh(returnStdout: true,script: 'git describe --tags --abbrev=0').trim()
}
steps {
script {
container('docker') {
sh "docker login -u ${HARBOR_CREDS_USR} -p ${HARBOR_CREDS_PSW} ${params.HARBOR_HOST}"
sh "sed -i 's#{APP_NAME}#${params.APP_NAME}#g' Dockerfile"
sh "docker build -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('K8s Deploy') {
environment {
GIT_TAG = sh(returnStdout: true,script: 'git describe --tags --abbrev=0').trim()
}
steps {
script {
container('kubectl') {
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}#master#g' ubox-ht-deployment.tpl > ubox-ht-deployment.yml"
sh "sed -e 's#{APP_NAME}#${params.APP_NAME}#g' ubox-ht-svc.tpl > ubox-ht-svc.yml"
try{
sh "kubectl delete rs -l app=${params.APP_NAME} --namespace=${params.K8S_NAMESPACE}"
}catch (Exception e) {
println e
}
try{
sh "kubectl delete svc -l name=${params.APP_NAME} --namespace=${params.K8S_NAMESPACE}"
}catch (Exception e) {
println e
}
sh "kubectl apply -f ubox-ht-deployment.yml --namespace=" + K8S_NAMESPACE
sh "kubectl apply -f ubox-ht-svc.yml --namespace=" + K8S_NAMESPACE
}
}
}
}
}
}
文档更新时间: 2020-07-24 17:10 作者:子木