首先安装docker没什么说的
直接执行jenkins
docker run -d --name jenkins -p 80:8080 -v /home/jenkins_home1:/home/jenkins_home1
启动后会让你寻找初始密码,这是取/var/jenkins_home/secrets/中寻找一个叫initialAdminPassword的文件。打开后有你的初始密码输入。正常创建
然后创建流水线
写入流水线shell
#!groovy
pipeline {
agent any
stages {
stage('测试') {
steps {
echo "docker images"
sh "docker images"
}
}
}
}
然后保存执行。发现报错!
经调查发现这个写法是错误的。具体调查过程有点忘了
这个是因为没有挂载docker.sork到jenkins中
于是有了再一次的调查
docker run -d -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v $PWD:/var/jenkins_home -p 8080:8080 jenkins/jenkins:lts
jenkins/jenkins是我的镜像名称,lts是我的tag名称
启动后国际惯例写入初始密码
这时发现我的虚拟机中没有这个查看密码的文件了。卧槽?慌了
经一番调查发现。这个文件竟然在docker容器中的这个路径下,进入docker容器拿到这个文件的密码
配置流水线然后执行发现报错
+ docker images
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.37/images/json: dial unix /var/run/docker.sock: connect: permission denied
我日?竟然告诉我没有权限
那我日常想到直接sudo执行
进入docker容器中
docker exec -it containerID /bin/bash 进入容器交互 containerID:镜像ID
执行sudo docker images
什么?为什么告诉我sudo不可用?这里没有详细调查
然后我就想,直接root进容器看看好使不
docker exec -it -u root containerID /bin/bash 进入容器交互 containerID:镜像ID
我的天,好使了
那我就想如何能让jenkins执行的时候拥有root权限呢?
网上查到把jenkins这个用户加入到docker用户组中。然后重启(我没有尝试)
我使用的是直接用root方法启动镜像
docker run -d -u root -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v $PWD:/var/jenkins_home -p 8080:8080 jenkins/jenkins:lts
-u root
#以root的身份去运行镜像(避免在容器中调用Docker命令没有权限)
#最好使用docker用户去运行
-v /usr/bin/docker:/usr/bin/docker
#将宿主机的docker命令挂载到容器中
#可以使用which docker命令查看具体位置
#或者把挂载的参数改为: -v $(which docker):/usr/bin/docker
-v /var/run/docker.sock:/var/run/docker.sock
#容器中的进程可以通过它与Docker守护进程进行通信
-v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
上面这句话是centos中安装jenkins时需要挂载的
这种方法是可以的。执行后结果截图如下
很开心。那么接下来试试登陆阿里云docker拉取一个镜像下来看看
创建流水线工作
#!groovy
pipeline {
agent any
stages {
stage('登陆阿里云') {
steps {
echo "docker login --username=rexstyle --password=1qazXSW@ registry.cn-qingdao.aliyuncs.com"
sh "docker login --username=rexstyle --password=1qazXSW@ registry.cn-qingdao.aliyuncs.com"
}
}
stage('拉取镜像') {
steps {
echo "docker pull 你的阿里云镜像"
sh "docker pull 你的阿里云镜像"
}
}
}
}
成功。
远程调用需要配置
如果没有这个token进添加一个
结束!
#!groovy
pipeline {
agent any
environment {
BUILD_NAME = "tigzx.yuantongstorage.efs"
PROJECT_FILE = "/mnt/hgfs/svn/QingHaiYuanTong/trunk/Tigzx/srcV1.0/Tigzx.Services/Tigzx.Services.Server.EFS/bin/Release/netcoreapp2.2/publish"
USER_PWD = "rex:11e64ae4edf86fb9744ceecb7ba112f2bb"
JENKINS_JOBNAME = "yuantongstorageefs"
JENKINS_JOBTOKEN = "rex"
SERVICE_JENKINSIP = "192.168.60.10:8080"
ALIYUN_DOCKER = "registry.cn-hangzhou.aliyuncs.com/platform_service"
}
stages{
stage('打包项目') {
steps {
echo 'docker build -t ${BUILD_NAME} ${PROJECT_FILE}'
sh 'docker build -t ${BUILD_NAME} ${PROJECT_FILE}'
}
}
stage('打TAG') {
steps {
echo 'docker tag ${BUILD_NAME} ${ALIYUN_DOCKER}/${BUILD_NAME}'
sh 'docker tag ${BUILD_NAME} ${ALIYUN_DOCKER}/${BUILD_NAME}'
}
}
stage('上传项目') {
steps {
echo 'docker push ${ALIYUN_DOCKER}/${BUILD_NAME}'
sh 'docker push ${ALIYUN_DOCKER}/${BUILD_NAME}'
}
}
stage('执行远程发布') {
steps {
echo 'curl -X POST http://${USER_PWD}@${SERVICE_JENKINSIP}/job/${JENKINS_JOBNAME}/build?token=${JENKINS_JOBTOKEN}'
sh 'curl -X POST http://${USER_PWD}@${SERVICE_JENKINSIP}/job/${JENKINS_JOBNAME}/build?token=${JENKINS_JOBTOKEN}'
}
}
}
}
——————————————————————————————————
作者:Henny_CHN
转载请标明出处,原文地址:
https://blog.youkuaiyun.com/a1234012340a/article/details/97705997
如果感觉本文对您有帮助,请留下您的赞,您的支持是我坚持写作最大的动力,谢谢!