When
nếu mà match với điều kiện when thì sẽ action step trong stage(“Đó”)
nếu ko match với điều kiện when thì skip step trong stage(“Đó”)
nghe hơi ngáo vậy đi vào ví dụ thôi
Environment
pipeline{
agent{
label "k8s-permanent"
}
environment{
DEPLOY_TO = "production"
}
stages{
stage("Build"){
when{
environment name: "DEPLOY_TO", value: "production"
}
steps{
echo "Deploying"
}
}
}
}
When này sẽ check environment nếu trả về true thì action steps bên dưới.
pipeline{
agent{
label "k8s-permanent"
}
environment{
DEPLOY_TO = "test"
}
stages{
stage("Build"){
when{
environment name: "DEPLOY_TO", value: "production"
}
steps{
echo "Deploying"
}
}
}
}
equals
pipeline{
agent{
label "k8s-permanent"
}
environment{
DEPLOY_TO = "production"
}
stages{
stage("Build"){
when{
equals expected: "production", actual: DEPLOY_TO // not actual: "DEPLOY_TO"
}
steps{
echo "Deploying ${DEPLOY_TO}"
}
}
}
}
Các bạn để ý kĩ chỗ actual nhé
pipeline{
agent{
label "k8s-permanent"
}
environment{
DEPLOY_TO = "test"
}
stages{
stage("Build"){
when{
equals expected: "production", actual: DEPLOY_TO // not actual: "DEPLOY_TO"
}
steps{
echo "Deploying ${DEPLOY_TO}"
}
}
}
}
Not
pipeline{
agent{
label "k8s-permanent"
}
environment{
DEPLOY_TO = "test"
}
stages{
stage("Build"){
when{
not{
equals expected: "production", actual: DEPLOY_TO // not actual: "DEPLOY_TO"
}
}
steps{
echo "Deploying ${DEPLOY_TO}"
}
}
}
}
Nó là nghịch đảo
expression
nó giống kiểu so sánh nhưng gọn hơn equals
pipeline{
agent{
label "k8s-permanent"
}
environment{
DEPLOY_TO = "production"
}
stages{
stage("Build"){
when{
expression{
DEPLOY_TO == "production"
}
}
steps{
echo "Deploying ${DEPLOY_TO}"
}
}
}
}
Bạn thử thay environment sai sem kq như thế nào nhé
allOf
yêu cầu tất cả các điều kiện bên trong phải trả về true
pipeline{
agent{
label "k8s-permanent"
}
environment{
DEPLOY_TO = "production"
LANGUAGE = "golang"
}
stages{
stage("Build"){
when{
allOf{
environment name: "DEPLOY_TO", value: "production"
environment name: "LANGUAGE", value: "golang"
}
}
steps{
echo "Deploying ${DEPLOY_TO} language ${LANGUAGE}"
}
}
}
}
Nếu chúng ta chỉnh sai
anyOf
chỉ cần 1 trong các điều kiện trả true thì ok
tất cả đều trả về false là skip stage
pipeline{
agent{
label "k8s-permanent"
}
environment{
DEPLOY_TO = "production"
LANGUAGE = "golang"
}
stages{
stage("Build"){
when{
anyOf{
environment name: "DEPLOY_TO", value: "dev"
environment name: "LANGUAGE", value: "golang"
}
}
steps{
echo "Deploying ${DEPLOY_TO} language ${LANGUAGE}"
}
}
}
}
con nếu false hết
Branch
https://github.com/mrnim94/pipeline-stage-when-branch
Nội dung file Jenkinsfile:
pipeline {
agent any
stages {
stage('Build Master') {
when {
branch 'master'
}
steps {
echo 'Building master'
}
}
stage('Build Dev') {
when {
branch 'dev'
}
steps {
echo 'Building dev'
}
}
}
}
save lại và theo dõi
buildingTag-tag
https://github.com/mrnim94/pipeline-stage-when-buildingTag-tag
ở phần này bạn cần tìm hiểu một số command liên quan đến git he
https://xuanthulab.net/lam-viec-voi-tag-trong-git.html
Mình thấy anh mô tả khá chi tiết
Con ko bạn fork repo mình về sài ok
buildingTag – all stag
Jenkinsfile của tag buildTag
pipeline {
agent any
stages {
stage('Build') {
when{
buildingTag()
}
steps {
echo 'Hello World building tag'
}
}
}
}
tag
particular tag
ngoài ra chúng ta còn có thể chỉ tag chính xác
pipeline {
agent any
stages {
stage('Build') {
when{
tag "2.0"
}
steps {
echo 'Hello World building tag'
}
}
}
}
Lúc này chỉ run khi tag 2.0
prefix tag
Hoặc tag theo kiểu prefix
pipeline {
agent any
stages {
stage('Build') {
when{
tag "release-*"
}
steps {
echo 'Hello World building tag'
}
}
}
}
Lúc này sẽ run tag tag “release-1.0” hay “release-nim”
changelog – commit
https://github.com/mrnim94/pipeline-stage-when-changelog
pipeline {
agent any
stages {
stage('Build') {
when{
changelog '.*some_text.*'
}
steps {
echo 'Hello World changelog'
}
}
}
}
Nếu commit của chúng ta có string và match reg '.some_text.'
thì branch chứa commit sẽ được run stage build
changeRequest – Pull Request
Bạn run các job dựa trên các pull request
https://github.com/mrnim94/pipeline-stage-when-changeRequest
Ta có Jenkinsfile
pipeline {
agent any
stages {
stage('Build') {
when{
changeRequest()
}
steps {
echo 'Hello World changing request'
}
}
}
}
Bạn sửa branch dev và toạ Pull request từ dev vào master
Trên jenkins tạo 1 job “Multibranch Pipeline” như các ví dụ có liên quan đên github nhé.
Attributes of changeRequest
pipeline {
agent any
stages {
stage('Build') {
when{
changeRequest title:"when-pr"
}
steps {
echo 'Hello World changing request'
}
}
}
}
ở Jenkinsfile trên chỉ build trên các Pull Request có title là when-pr
changeset
pipeline {
agent any
stages {
stage('Build') {
when{
changeset "*.js"
}
steps {
echo 'Hello World changeset JS'
}
}
}
}
Nó sẽ đánh giá là bạn có change các fine có duôi là js hay ko?
Như đọc ở trên thì changeset ko phân biệt chữ hoa và chữ thường “glob case insensitive”
Để bắt chính sác hơn thì người ta dùng thêm
caseSensitive
: Phân biệt hoa thường
REGEXP for regular expression matching
Và biểu diễn trên Pipeline như sau:
pipeline {
agent any
stages {
stage('Build') {
when{
changeset pattern: "helloworld.js", caseSensitive: true
}
steps {
echo 'Hello World changeset JS'
}
}
}
}
pipeline{
agent none
environment{
DEPLOY_TO = "production"
}
stages{
stage("Build"){
agent{
label "k8s-permanent"
}
when{
beforeAgent false
environment name: "DEPLOY_TO", value: "dev"
}
steps{
echo "Deploying ${DEPLOY_TO} language ${LANGUAGE}"
}
}
}
}
Giờ nếu các bạn muốn when được execute trước asign agent permanent thì sửa Pipeline như sau
pipeline{
agent none
environment{
DEPLOY_TO = "production"
}
stages{
stage("Build"){
agent{
label "k8s-permanent"
}
when{
beforeAgent true
environment name: "DEPLOY_TO", value: "dev"
}
steps{
echo "Deploying ${DEPLOY_TO} language ${LANGUAGE}"
}
}
}
}