hello云胜

技术与生活

0%

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

初始化的密码

image-20211028103544552

手册登录需要密码。密码在/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

安装插件并设置用户

image-20211028103644003

安装推荐的插件

image-20211028103828206

image-20211028103907058

本地构建

Jenkins是可以构建本地任务的。

只要将git仓库下载到jenkin本地的路径下。jenkins可以识别这是一个git仓库进而构建它。

注意:使用docker部署的,所以填写的路径是jenkins容器里的路径。

我之前用-v $HOME/jenkins_home:/var/jenkins_home将/var/jenkins_home目录挂载出来了。

image-20220706143552593

不用尝试了,会报错

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处进行配置

img

然后新建项目 >> 源码管理 >> 添加凭据 >> 构建触发器 >> 创建webhook;

img

img

img

jenkins配置构建器

img

****上面图中的这两个东西非常重要,等下都要用到。记得保存应用!!!****

http://1x.xxx.151.216:9999/project/gitlabTest

d77fce444619dfe1e0bdeb5d93c2a330 高级-generator

gitlab配置webhook

image-20220708163330324

image-20220708165117545

把上一步的信息填过来

使用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 pluginDocker 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"