1. 准备
- jenkins版本 jenkins:2.361.3-lts
- 查找宿主机
libltdl.so.7
文件
jenkins容器内不存在 libltdl.so.7
文件,在容器内执行docker命令(如docker ps
)会报错libltdl.so.7:No such file or directory
,需要把宿主机的此文件映射至jenkins容器内,所以需要提前确定此文件的位置。
- 我是centos7,文件地址位置:
/usr/lib64/libltdl.so.7
,个别系统当前文件会在/usr/lib/x86_64-linux-gnu/libltdl.so.7
- 如果宿主机确实没有找到此文件,centos7可以通过命令
yum -y install libtool-ltdl-2.4.2-22.el7_3.x86_64
安装,安装以后位置在/usr/lib64/libltdl.so.7
2. 安装jenkins
- 编写docker-compose文件
cat <<EOF > ./docker-compose.yml
version: "3"
services:
jenkins:
image: jenkins/jenkins:2.361.3-lts
container_name: jenkins
user: root
restart: always
privileged: true
ports:
- 18080:8080
- 50000:50000
environment:
- TZ=Asia/Shanghai
volumes:
- ./data/:/var/jenkins_home/
- /usr/bin/docker:/usr/bin/docker
- /var/run/docker.sock:/var/run/docker.sock
- /etc/docker/daemon.json:/etc/docker/daemon.json
- /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
- /root/.ssh/:/root/.ssh/
EOF
./data/:/var/jenkins_home/
这是把容器内的目录映射到宿主机- 由于jenkins是使用docker容器安装的,后续我要通过jenkins进行docker镜像打包并推送到docker镜像仓库时,需要使用docker命令,所以需要把宿主机的docker环境映射到jenkins容器内,需要做如下配置
- /usr/bin/docker:/usr/bin/docker
- /var/run/docker.sock:/var/run/docker.sock
- /etc/docker/daemon.json:/etc/docker/daemon.json
- 把宿主机
/root/.ssh/
路径挂载到容器内,是为了后续使用宿主机的ssh key来访问gitlab。配置过程可以参考(https://blog.csdn.net/qq_31519989/article/details/108120947)
拉取镜像并启动容器
docker-compose up -d
3. 访问
访问地址: http://10.3.23.191:18080/

管理员密码保存在
/var/jenkins_home/secrets/initialAdminPassword
对应宿主机
./data/secrets/initialAdminPassword
[root@KSSYSDEV jenkins]# cat ./data/secrets/initialAdminPassword
105455469c9949a7******ac1884673a
输入token即可登录进去
- 插件安装
4. 新建任务测试(Pipeline)
我们新建一个pipeline任务,测试是否能正常执行
- 新建任务,选择
流水线
image.png


选择Pipeline script
,并输入以下脚本
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'echo Build stage ...'
}
}
stage('Test'){
steps {
sh 'echo Test stage ...'
}
}
stage('Deploy') {
steps {
sh 'echo Deploy stage ...'
}
}
}
}
保存后,点击立即构建按钮:

可以看到,test任务的三个stage均已经成功执行。
参考
pipeline语法参考:https://blog.csdn.net/penngo/article/details/126457364
docker in jenkins pipeline
正常情况下,jenkins中的job,都是在jenkins主机上进行的。
如果我们要编辑java项目,主机就需要安装maven、jdk等;如果要编译VUE项目,主机就要安装nodejs等。这就会导致jenkins主机需要安装太多的东西。
如果我们能编译不同项目时,使用不同的docker镜像,镜像内已经安装好对应的环境了,那这样jenkins主机上就什么都不需要安装了,非常清爽。
即:使用镜像的方式来执行jenkins job
要想在pipeline中使用docker(如下)
pipeline {
agent {
docker {
image '10.3.23.191:9902/devops/maven:3.8.2-openjdk-8'
args '-v $HOME/.m2:/root/.m2'
}
}
stages {
stage('Git pull') {
steps {
echo '开始拉取代码 ..'
checkout([$class: 'GitSCM', branches: [[name: '*/f-jenkins']], extensions: [], userRemoteConfigs: [[credentialsId: '67f1f5b0-d6fb-40fa-9799-4a6dbc85a328', url: 'https://gitlab.bidr.com.cn/operation-platform/operation-platform.git']]])
echo '代码拉取成功'
}
}
stage('Build') {
steps {
sh 'pwd'
echo '开始编译代码..'
sh "mvn --version"
sh "mvn clean package -D maven.test.skip=true"
echo '代码编译成功'
}
}
stage('Test') {
steps {
echo 'Testing..'
}
}
stage('Deploy') {
steps {
echo 'Deploying....'
}
}
}
}
注意:必须要为jenkins安装docker pipeline
插件:

参考
https://blog.51cto.com/u_14948012/5711163
https://cloud.tencent.com/developer/article/1454335
网友评论