目录
1、jenkins启动方式
docker run -d --name jenkins -p 80:8080 -p 50000:50000 -u root --restart always -e MAVEN_HOME=/usr/local/maven -e JAVA_HOME=/usr/local/jdk -e NODE_HOME=/usr/local/nodejs -e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/jdk/bin:/usr/local/maven/bin:/usr/local/nodejs/bin -v /data/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /usr/bin/kubectl:/usr/bin/kubectl -v /root/.kube:/root/.kube -v /usr/local/maven:/usr/local/maven -v /usr/local/nodejs:/usr/local/nodejs -v /usr/local/jdk:/usr/local/jdk -v /etc/localtime:/etc/localtime jenkins/jenkins:lts
2、配置部署应用样例
2.1、k8s部署应用样例
2.1.1、配置连接k8s的配置文件
2.1.2、脚本样例
pipeline{
agent any
environment {
APP_ENV = "test"
SERVICE = "gateway-encryption"
GIT_BRANCH = "test"
GIT_URL = "https://gitlab.51idc.com/smartops/education/${SERVICE}.git"
GIT_CREDENTIALS_ID = "zhangjinhai-gitlab"
DOCKERHUB_BASE = "reg.anchnet.com"
DOCKERHUB_CREDENTIALS_ID = "nwy_harbor"
DOCKER_IMAGE = "${DOCKERHUB_BASE}/smartops_nw/${SERVICE}:${APP_ENV}-1.0.$BUILD_NUMBER"
KUBECONFIG_CREDENTIALS_ID = "k8s_config"
}
stages{
stage('git clone') {
steps {
git branch: GIT_BRANCH, credentialsId: GIT_CREDENTIALS_ID, url: GIT_URL
}
}
stage('gradlew') {
steps {
sh './gradlew clean build -x test'
}
}
stage("docker build"){
steps{
sh "docker build -t ${DOCKER_IMAGE} ."
}
}
stage("docker push"){
steps{
withCredentials([usernamePassword(credentialsId: "${DOCKERHUB_CREDENTIALS_ID}", usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PASS')]) {
sh "echo ${REGISTRY_PASS} | docker login -u ${REGISTRY_USER} --password-stdin ${DOCKERHUB_BASE}"
sh "docker push ${DOCKER_IMAGE}"
sh "docker rmi ${DOCKER_IMAGE}"
}
}
}
stage("kubectl deploy"){
steps{
withCredentials([file(credentialsId: KUBECONFIG_CREDENTIALS_ID, variable: 'KUBECONFIG')]) {
sh "kubectl --kubeconfig=${KUBECONFIG} get deploy/smartops-${SERVICE} -o custom-columns=NAME:.spec.template.spec.containers[0].image"
sh "kubectl --kubeconfig=${KUBECONFIG} set image deploy/smartops-${SERVICE} ${SERVICE}=${DOCKER_IMAGE}"
}
}
}
}
}
2.2、ssh部署应用样例
pipeline{
agent any
environment {
SERVICE = "cms"
GIT_BRANCH = "test"
GIT_URL = "http://e.devops.anchnet.com/cloud/nwyyy/nwy-${SERVICE}.git"
GIT_CREDENTIALS_ID = "4238bcb4-690e-4963-80ef-b1ab7e7798f5"
SSH_HOST = "192.168.66.8"
SSH_CREDENTIALS_ID = "192.168.66.8_ssh"
BUILD_FILE = "${WORKSPACE}/${SERVICE}/target/${SERVICE}-1.0.1.jar"
REMOTE_DIR = "/root"
REMOTE_EXEC = "sh /root/startNwy.sh ${SERVICE} restart"
}
stages{
stage('git clone') {
steps {
git branch: GIT_BRANCH, credentialsId: GIT_CREDENTIALS_ID, url: GIT_URL
}
}
stage('maven') {
steps {
sh 'mvn clean install -U package -Dmaven.test.skip=true -B -U -e --s settings.xml'
}
}
stage("remote deploy"){
steps{
script{
//调用上面定义好的方法
rserver = GetRemoteServer(SSH_HOST, SSH_CREDENTIALS_ID)
sshPut remote: rserver, from: BUILD_FILE, into: REMOTE_DIR
sshCommand remote: rserver, command: REMOTE_EXEC
}
}
}
}
}
def GetRemoteServer(ip, cid){
def remote = [:]
remote.name = ip
remote.host = ip
remote.port = 22
remote.allowAnyHosts = true
//通过withCredentials调用Jenkins凭据中已保存的凭据,credentialsId需要填写,其他保持默认即可
withCredentials([usernamePassword(credentialsId: cid, passwordVariable: 'password', usernameVariable: 'userName')]) {
remote.user = "${userName}"
remote.password = "${password}"
}
return remote
}