最近周末没事,把开发过程中用到的东西重新整理一下,今天先从Jenkins开始,记录和github结合如何使用。
docker pull jenkins/jenkins
#如果要指定特定image,例如weekly
docker pull jenkins/jenkins:weekly
docker network create jenkins
docker run --name jenkins-docker --rm --detach \
--privileged --network jenkins --network-alias docker \
--env DOCKER_TLS_CERTDIR=/certs \
--volume jenkins-docker-certs:/certs/client \
--volume jenkins-data:/var/jenkins_home \
--publish 2376:2376 \
docker:dind --storage-driver overlay2
–name: 指定docker的名称
–rm: 当docker不运行是自动移除image
–detach: 让docker在后台运行, 后续我们可以通过docker stop jenkins-docker来停止这个docker
–network: 使用上一步创建的网络
– network-alias:网络别名
–env:指定docker TLS证书的根目录
–volume: 连续两个都是相当于建立映射,把/certs/client映射叫做jenkins-docker-certs
–pushlish: 暴露docker的端口,用于在本地机器发送命令之间的通讯
docker:dind: image本身
–storage-driver overlay2:docker存储驱动
FROM jenkins/jenkins:2.346.3-jdk11
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean:1.25.6 docker-workflow:1.29"
docker built -t jenkins:2.346.3-jdk11 .
docker run --name jenkins-blueocean --restart=on-failure --detach \
--network jenkins --env DOCKER_HOST=tcp://docker:2376 \
--env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \
--publish 8080:8080 --publish 50000:50000 \
--volume jenkins-data:/var/jenkins_home \
--volume jenkins-docker-certs:/certs/client:ro \
jenkins:2.346.3-jdk11
这里面最要注意的是 --publish,这两个当于建立本地和docker的端口映射,前面:后面,前面一个是本地端口,后面一个是docker的端口。
最后一个是第5步建立image的名称
至此, 我们可以通过已经在docker中运行起来了jenkins, 如何查看当前有哪些docker呢?在terminal中执行:
docker ps -a
#jenkins-blueocean 是docker的名字
docker logs jenkins-blueocean
cat /var/jenkins_home/secrets/initialAdminPassword
复制下来就可以登录了
Name: Ekin
Password: *******
Full name: Ekin
Email: 53610289@qq.com
6. 在Branch Source中选择github, 同事也需要创建credential用来登录github和执行job,以及填入项目git的URL.
而Credentials对于System和Global两种的区别是:
Global - if the credential/s to be added is/are for a Pipeline project/item. Choosing this option applies the scope of the credential/s to the Pipeline project/item “object” and all its descendent objects. (Pipeline等通用的选择这个)
System - if the credential/s to be added is/are for the Jenkins instance itself to interact with system administration functions, such as email authentication, agent connection, etc. Choosing this option applies the scope of the credential/s to a single object only. (对Jenkins系统本身的设置相关的选择System)
还有一个是只作用Job本身的Credentials, 等创建完job后可以看到
Build设置通过Jenkinsfile:
这样就添加好了一个Job
pipeline {
// agent any
agent {
docker {
image 'node:16-alpine3.15'
args '-p 3000:3000'
}
}
stages {
stage('Build') {
steps {
echo 'Building..'
sh 'PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true yarn install'
echo 'Finished Built..'
}
}
stage('Test') {
steps {
echo 'Testing..'
// sh 'yarn dev'
}
}
stage('Deploy') {
steps {
echo 'Deploying....'
}
}
}
}
10 : 但我希望的提交代码后能够自动执行job,那这个需要再哪里设置呢?
有两种方式可以选择:
a. github webhook push的方式: 在github上设置回调url(这个url是jenkins上的),当有新的代码提交后,它会触发回调,执行相应的job。
Jenkins系统配置 --> github进行设置,获取到webhook url,然后在github项目settings-> webhook设置jenkins的回调url,由于是本地建立的localhost,没法成功回调,要求是通过域名回调。
b. 在Jenkins定时执行job,从github上pull code执行job。我们可以选择这种方式
本篇介绍了如何在Docker中建立Jenkins,以及在Jenkins建立一个job,使其在代码提交时可以自动触发任务,这个任务的定义步骤在Jenkinsfile中定义,Jenkinsfile中可做较多的事情:比如几个步骤stage,像我们常做的事情,跑单测, build项目,测试环境自动化,uat环境测试,以及跑完自动化用例后,通过脚本更新结果,部署代码到生产环境等。
后续: