第一步,创建容器:
docker run -u root -p 8080:8080 -p 50000:50000 -v /root/docker:/var/jenkins_home –name j02 -idt jenkins
解释:
- 注意这里以root用户启动,如果使用默认用户jenkins则不需要加-u,但是可能会造成与dnmp之间的文件读写权限有麻烦。
- 与宿主机的共享目录设置为/root/docker,这个随便,其实放哪里都行,放这里为了登录进去以后方便找。
- –name叫j02这个随便,是生成的docker的镜像名,开始那个叫j01,后来改root权限启动我改成了j02,无所谓。
- 端口绑定的是8080
执行命令docker logs -f j02查看容器的控制台日志,看到如下信息表示jenkins服务启动成功:
Dec 31, 2017 6:29:24 AM jenkins.install.SetupWizard initINFO:***************************************************************************************************************************************************************************************Jenkins initial setup is required. An admin user has been created and a password generated.Please use the following password to proceed to installation:f0f2e35d549f49b486b0ca2bdf3756d6This may also be found at: /var/jenkins_home/secrets/initialAdminPassword***************************************************************************************************************************************************************************************Dec 31, 2017 6:29:29 AM hudson.model.UpdateSite updateDataINFO: Obtained the latest update center data file for UpdateSource defaultDec 31, 2017 6:29:30 AM hudson.model.DownloadService$Downloadable loadINFO: Obtained the updated data file for hudson.tasks.Maven.MavenInstallerDec 31, 2017 6:29:30 AM hudson.model.UpdateSite updateDataINFO: Obtained the latest update center data file for UpdateSource defaultDec 31, 2017 6:29:30 AM hudson.WebAppMain$3 runINFO: Jenkins is fully up and running–> setting agent port for jnlp–> setting agent port for jnlp… doneDec 31, 2017 6:29:33 AM hudson.model.DownloadService$Downloadable loadINFO: Obtained the updated data file for hudson.tools.JDKInstallerDec 31, 2017 6:29:33 AM hudson.model.AsyncPeriodicWork$1 runINFO: Finished Download metadata. 11,856 ms
123
打开浏览器查看IP:8080就见到jenkins的页面了,但需要输入上面那个日志中的initialAdminPassword才能开始。从上面日志复制,或者cat /root/docker/secrets/initialAdminPassword
点击左边按建议配置安装。
设置用户名密码。
参考文章:https://blog.csdn.net/boling_cavalry/article/details/78942408(它是为java弄的,如果只是php和node项目,不需要maven插件)
进入容器:
docker exec -it j02 /bin/bash
因为我们用的是root权限,而jenkins默认是jenkins用户,所以进来第一步创建ssh秘钥之前需要改一下.ssh目录的链接,使用:
ln -s /var/jenkins_home/.ssh /root/.ssh
执行以下命令产生SSH证书:
ssh-keygen -t rsa -C “abcdef@gmail.com”
会出现几个询问,直接按回车键继续。
执行以下命令配置全局用户信息的账号:
git config –global user.name”abcdef”
1
执行以下命令配置全局用户信息的邮箱:
git config –global user.email abcdef@gmail.com
1
公钥被存储到以下位置,打开复制所有内容,然后登录git,添加到SSH keys中:
/var/jenkins_home/.ssh/id_rsa.pub,也就是宿主机的/root/docker/.ssh/id_rsa.pub。
执行exit,退出容器,以下命令查看。
cat /root/docker/.ssh/id_rsa
将其贴到github账户的setting中。
打开jenkins页面,新建项目,构建一个自由风格的项目。
源码管理选择git,输入源的地址:git@github.com:bianjibang/dp-api.git
Credentials那里点add,添加provider,选择ssh username with private key,然后private key来自第三个选项From the Jenkins master ~/.ssh。
就添加成功了。
回到项目设置页面在Credentials那里点刷新就看到新增的授权了,选择的时候可能需要点两次才能选上。
构建触发器那里选GitHub hook trigger for GITScm polling,即当github收到posh的时候自动拉取。
构建那里选择execute shell,可以放入想要在完成时执行的后续命令。比如
cp -r $WORKSPACE/* $JENKINS_HOME/dnmp/www/dp/api
点击立即构建,可以看到新增的build history,点击某个history, 进入Console Output可以看到执行日志,通过其内容可以修正命令。
接下来,在宿主机/root/docker下面
git clone git@github.com:yeszao/dnmp.git(建议首先fork到自己账户下,clone自己的,这样以后修改配置比较方便)
当build项目时,如果网站发布目录不在jenkins_home之下,可以在一开始构建j01的时候,增加一个目录绑定,如 -v /var/www:/var/jenkins_www。这样就把当前网站的部署目录也共享给j01了,便于在j01内操作。