jenkins官方2.150.1镜像搭建问题总结

jenkins官方2.150.1镜像搭建问题总结

前言:jenkins官方镜像是ubuntu系统的,对于我们这些常用centos的总会有点区别,并且官方镜像非常简洁,缺少很多命令,对于没接触过Ubuntu的人来说需要花时间去了解。

1、jenkins没有root权限
    jenkins官方镜像启动后用户是jenkins,而我们很多管道命令需要sudo权限去执行,就需要获取root权限,在不知道密码的情况下,我重新打了镜像。
  Dockerfile内容:FROM 10.19.248.12:30100/staging/tool-jenkins:2.150.1
          USER root
  在Dockerfile文件所在目录下执行docker build -t 10.19.248.12:30100/staging/tool-jenkins:2.150.2 ./

2、jenkins官方镜像没有docker命令
配置安装源(区别于centos):
     备份原配置文件: cd /etc/apt
              cp sources.list sources.list.backup
     新建soures.list:内容替换为
           deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
           deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
           deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
           deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
     更新:
       apt-get update
       apt-get install apt-transport-https ca-certificates
     安装:
       apt-get install docker.io
     重启服务:
       service docker start

3、docker login登录不了镜像库
    在”/etc/docker/“目录下,创建”daemon.json“文件,在文件中写入{ “insecure-registries”:[“10.19.248.12:30100”] } 然后重启docker服务。
4、jenkins的pod时区设置:
    官方镜像起pod之后,pod时间会与宿主机时间差8小时,需要我们修改pod的时区,
    在yaml文件添加时区配置
     env:
      - name: TZ
      value: Asia/Shanghai

5、个人使用的管道语法:

node('master') {
def PVERSION = "${version_profile}.test.${env.BUILD_NUMBER}"
def PODNAME = "web-data-security"
def NAMESPACE = "nanjing-jc-web"
def env = "test"
//def artiServer = Artifactory.server "Artifactory"

stage('git-clone'){
    git credentialsId: "credential-gitlab", 
    url: 'http://10.39.39.18/DATAGOVERNANCE_APP/DATA_SECURITY.git',
    branch: 'dev' 
}
stage('build'){
    withEnv(["PATH+JAVAHOME=${tool 'jdk8'}/bin","PATH+MAVEN=${tool 'maven'}/bin"]) {
        sh "mvn -B -Dmaven.test.skip=true clean package"
    }
    //sh "curl -d description=${PVERSION} ${BUILD_URL}submitDescription"
}

stage("deploy"){		
	sh """
              #echo "{\\"insecure-registries\\":[\\"10.19.248.12:30100\\"]}"> /etc/docker/daemon.json
              #sudo service docker restart
              docker build . -t  10.19.248.12:30100/library/gongan-${env}-${PODNAME}:latest 
              docker login -u admin -p PASSWD 10.19.248.12:30100
              docker push 10.19.248.12:30100/library/gongan-${env}-${PODNAME}:latest
              rm -rf target
              cd CD
              sshpass -p PASSWD ssh [email protected] mkdir -p /data/JenkinsCD/${PODNAME}
              sshpass -p PASSWD scp -r ${env} [email protected]:/data/JenkinsCD/${PODNAME}
	"""
	def servicexxlname = sh script: "sshpass -p PASSWD ssh [email protected] sudo ennctl -n ${NAMESPACE} get svc|grep ${PODNAME}-xxl[^-][^f][^r][^o][^n][^t][^-]|cut -d ' ' -f1", returnStdout: true
	if (""!=servicexxlname){	
	    sh "sshpass -p PASSWD ssh [email protected] sudo ennctl delete -f /data/JenkinsCD/${PODNAME}/${env}/service-xxl.yml -n ${NAMESPACE}"
	}
	def servicename = sh script: "sshpass -p PASSWD ssh [email protected] sudo ennctl -n ${NAMESPACE} get svc|grep ${PODNAME}[^-][^f][^r][^o][^n][^t][^-]|cut -d ' ' -f1", returnStdout: true
	if (""!=servicename){	
	    sh "sshpass -p PASSWD ssh [email protected] sudo ennctl delete -f /data/JenkinsCD/${PODNAME}/${env}/service.yml -n ${NAMESPACE}"
	}
	def deploymentname = sh script: "sshpass -p PASSWD ssh [email protected] sudo ennctl -n ${NAMESPACE} get deployment|grep ${PODNAME}[^-][^f][^r][^o][^n][^t][^-]|cut -d ' ' -f1", returnStdout: true
	if (""!=deploymentname){	
	    sh "sshpass -p PASSWD ssh [email protected] sudo ennctl delete -f /data/JenkinsCD/${PODNAME}/${env}/deployment.yml -n ${NAMESPACE}"
	}
	def appname = sh script: "sshpass -p PASSWD ssh [email protected] sudo ennctl -n ${NAMESPACE} get app|grep ${PODNAME}[^-][^f][^r][^o][^n][^t][^-]|cut -d ' ' -f1", returnStdout: true
	if (""!=appname){
	    sh "sshpass -p PASSWD ssh [email protected] sudo ennctl delete app ${PODNAME} -n ${NAMESPACE}"
	}	
	sleep(20)		
	sh """
              sshpass -p PASSWD ssh [email protected] sudo ennctl create app ${PODNAME} -n ${NAMESPACE}
              sshpass -p PASSWD ssh [email protected] sudo ennctl create -f /data/JenkinsCD/${PODNAME}/${env}/deployment.yml -a ${PODNAME} -n ${NAMESPACE}  
              sshpass -p PASSWD ssh [email protected] sudo ennctl create -f /data/JenkinsCD/${PODNAME}/${env}/service-xxl.yml -a ${PODNAME} -n ${NAMESPACE} 
              sshpass -p PASSWD ssh [email protected] sudo ennctl create -f /data/JenkinsCD/${PODNAME}/${env}/service.yml -a ${PODNAME} -n ${NAMESPACE} 
	"""
	
    //sh "curl -d description=${PVERSION} ${BUILD_URL}submitDescription"
}

}

6、jenkins首次启动执行管道语法执行sshpass -p boCom@2017 ssh -o [email protected]失败
  给ssh命令加个参数就可以免交互登录了,sshpass -p boCom@2017 ssh -o StrictHostKeyChecking=no [email protected]

猜你喜欢

转载自blog.csdn.net/weixin_43968572/article/details/85061639