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]