Jenkins 安装 docker安装 1 2 3 4 5 6 7 8 9 10 11 docker run \ -u root \ -d \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins-data:/var/jenkins_home \ -v /etc/localtime:/etc/localtime:ro \ -v /var/run/docker.sock:/var/run/docker.sock \ --name jenkins-blueocean \ --restart=always \ jenkinsci/blueocean
-v /etc/localtime:/etc/localtime:ro 作用是同步主机时区
-v /var/run/docker.sock:/var/run/docker.sock
表示Docker守护程序通过其监听的基于Unix的套接字。 该映射允许 jenkinsci/blueocean 容器与Docker守护进程通信, 如果 jenkinsci/blueocean 容器需要实例化 其他Docker容器,则该守护进程是必需的。
1 2 或者不是通过volume,也可以直接挂载到服务器的目录上,这样查看文件比较方便 -v $HOME/jenkins_home:/var/jenkins_home
初始化的密码
手册登录需要密码。密码在/var/jenkins_home/secrets/initialAdminPassword
这个/var/jenkins_home是挂载的volume
1 2 3 4 5 6 7 8 # docker volume ls DRIVER VOLUME NAME local jenkins-data # docker volume inspect jenkins-data 找到路径 # cd /var/lib/docker/volumes/jenkins-data/_data # cat secrets/initialAdminPassword 24125b86278b4300b257b374f8f51385
安装插件并设置用户
安装推荐的插件
本地构建 Jenkins是可以构建本地任务的。
只要将git仓库下载到jenkin本地的路径下。jenkins可以识别这是一个git仓库进而构建它。
注意:使用docker部署的,所以填写的路径是jenkins容器里的路径。
我之前用-v $HOME/jenkins_home:/var/jenkins_home将/var/jenkins_home目录挂载出来了。
不用尝试了,会报错
1 Checkout of Git remote '/var/jenkins_home/GitHub/simple-java-maven-app' aborted because it references a local directory, which may be insecure. You can allow local checkouts anyway by setting the system property 'hudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT' to true.
不想解决了,没什么意义
远程构建 gitlab凭证 到gitlab系统船舰一个access_token:地址是/profile/personal_access_tokens
创建一个token,注意保存好。公司的: ssjxhFrm8rkNU5yePYho
在jenkins全局模式里面配置gitlab的用户令牌验证;**jenkins >> 系统设置 >> Gitlab;在Gitlab处进行配置
然后新建项目 >> 源码管理 >> 添加凭据 >> 构建触发器 >> 创建webhook;
jenkins配置构建器
****上面图中的这两个东西非常重要,等下都要用到。记得保存应用!!!** * *
http://1x.xxx.151.216:9999/project/gitlabTest
d77fce444619dfe1e0bdeb5d93c2a330 高级-generator
gitlab配置webhook
把上一步的信息填过来
使用pipline远程构建 上面是使用的freestyle,一般我们使用pipline比较多
配置构建器和自由模式一样
只是下面流水线选上仓库地址即可
maven打包 创建外部挂载的settings.xml
1 2 3 4 5 6 [root@paas-m-k8s-node-6 maven]# ll 总用量 4 -rw-r--r-- 1 root ftpuser 681 10月 29 10:06 settings.xml [root@paas-m-k8s-node-6 maven]# pwd /var/lib/docker/volumes/jenkins-data/_data/maven
一个完整Jenkinsfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 pipeline { agent any environment { // 每个阶段都会有自己的WORKSPACE,mvn打包时要指定是/var/jenkins_home/workspace/java-devops-demo,而不是/var/jenkins_home/workspace/java-devops-demo@2一个临时目录 WS = "${WORKSPACE}" J_HOME = "${JENKINS_HOME}" APPNAME = "demo" VERSION = "test" } // 定义流水线的阶段 stages { // 每一个阶段 stage('环境检查') { steps { sh 'printenv' sh 'pwd && ls -alh' sh 'java -version' sh 'git --version' sh 'docker version' } } stage('代码编译') { // 每个阶段可以使用自己的agent,这样java可以用maven的镜像。前端就用node的镜像 agent { docker { image 'maven:3-alpine' // 将依赖包挂载出去,下次可用 args '-v maven-repo:/root/repository' } } // 具体操作 steps { // 发现是在/var/jenkins_home/workspace/java-devops-demo@2一个临时目录 sh 'pwd && ls -alh' sh 'mvn -v' // 在容器的 agent里是取不到env的,需要在前面自定义一下 sh 'echo ${JENKINS_HOME}' // 要去workspace打包 // -s指定我们自己的settings.xml // settings里指定本地库地址就是/root/repository,这个地址挂载出去了 sh 'cd ${WS} && mvn clean package -s "${J_HOME}/maven/settings.xml" -Dmaven.test.skip=true' sh 'pwd && ls -alh' } } stage('测试') { steps { sh 'pwd && ls -alh' } } stage('打镜像') { steps { sh 'docker version' sh 'pwd && ls -alh' sh 'docker build -t ${APPNAME}:${VERSION} .' } } stage('部署') { steps { echo '部署' sh 'pwd && ls -alh' sh 'docker run -d -p 8888:8080 --name ${APPNAME} ${APPNAME}:${VERSION}' } } } }
交互式确认 groovy脚本进行判断
并行任务 报错解决 1. Invalid agent type “docker” specified 1 2 3 4 5 org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: WorkflowScript: 3: Invalid agent type "docker" specified. Must be one of [any, label, none] @ line 3, column 9. docker {
原因:
必须安装 2 个插件:Docker plugin和 Docker Pipeline
开始部署时有一些插件安装失败
2.执行sh 文件无权限问题
1 2 3 4 5 6 [root@paas-m-k8s-node-6 jenkins_home]# docker ps | grep jenkins 916dc1efbcf7 jenkinsci/blueocean "/sbin/tini -- /usr/…" 5 hours ago Up 5 hours 0.0.0.0:50000->50000/tcp, 0.0.0.0:9999->8080/tcp jenkins-blueocean [root@paas-m-k8s-node-6 jenkins_home]# vim /var/lib/docker/containers/916dc1efbcf7781cf59ee1e97ac873a931ad1a87213a8582b6c5462cea54ea26/config.v2.json 修改$JENKINS_USER JENKINS_USER="root"