-
Jenkins镜像内的用户uid是1000,为了方便后续关于公钥密钥的配置,先检查宿主机是否存在uid是1000的用户
使用docker部署jenkins,需要注意
容器内的jenkins的uid是1000,如果要配置ssh的方式,且为了避免重新构建镜像公钥密钥得重弄,
所以先查看本机1000的用户是啥,能不能复用
可以查看哪个用户是1000,能复用最好,不能复用就比较麻烦了,需要在容器里添加你想要的uid
getent passwd 1000
-
创建用户&授权挂载目录权限
如过没有对应的用户,那就可以新建
sudo adduser jenkins
sudo mkdir jenkins-data也查询当前用户的值,这里有可能不是1000,我后来直接用1000的用户了,否则需要重新构建镜像,没太大必要
id -u jenkins
id -g jenkins创建docker的宿主机挂载文件夹并,授权
mkdir jenkins-data
sudo chown -R 1000:1000 jenkins-data -
创建公钥私钥,公钥配到git和远程的ssh主机,私钥配到jenkins凭证里
使用1000用户在jenkins-data/ssh文件夹下创建公钥私钥
ssh-keygen -t rsa -b 4096 -f ./id_rsa
#=======其他=========
查看容器里用户id
docker exec -u 0 -it jenkins id jenkins
提前把git的主机信息在宿主机里加到known_hosts里,并修改权限
ssh-keyscan -p 22 xx.xx.xx.xx >> ./jenkins-data/ssh/known_hosts
chmod 644 ./jenkins-data/ssh/known_hosts
chown 1000:1000 ./jenkins-data/ssh/known_hosts生成的公钥加到authorized_keys里,免登录(放到git里的也是这个密钥)
cat id_rsa.pub >> /home/chenph/.ssh/authorized_keys
-
docker-compose.yml 中配置,这里需要注意user配置为1000,上边的所有操作就是为了这个(宿主和容器,都是1000用户,这就避免容器重建的时候,重新生成密钥)
jenkins: image: jenkins/jenkins:lts container_name: jenkins user: "1000:1000" expose: - '8080' volumes: - /var/run/docker.sock:/var/run/docker.sock - ./jenkins-data:/var/jenkins_home - ./jenkins-data/ssh:/var/jenkins_home/.ssh networks: - app-network
-
可以进入到容器里,测试一下能否连git,直接显示"Hi there, Jenkins!...." 就是都ok了
ssh -T [email protected] -p 22
-
在jenkins里任务配置的git地址,如果是要用ssh模式,要以ssh开头
-
搭配nginx同样很麻烦,还是直接配到根路径,给个二级域名吧
-
配置hook的时候,如果联动的gitea,只能配http的git地址,这个我调了好久,可以增加以下日志记录器排查
hudson.plugins.git.GitStatus - All
com.cloudbees.jenkins.GitHubWebHook - All
org.jenkinsci.plugins.github - All
